CI/CD 与 DevOps 二

CI/CD + DevOps 完整示例 Demo

整体方案:GitLab + GitLab CI + Docker + Nginx + 服务器 实现效果:本地提交代码 → 自动构建 Docker 镜像 → 自动部署到服务器,一套完整 DevOps 流水线。


一、整体架构

  1. 开发:本地编写简单 Web 项目
  2. 代码托管:GitLab
  3. CI:代码提交自动编译、构建、镜像打包
  4. CD:自动推镜像、远程部署到服务器
  5. 运维:服务器 Docker 运行,Nginx 反向代理

二、项目结构(示例:极简 Node.js Web)

新建文件夹 devops-demo

plaintext

复制代码
devops-demo/
├── app.js          # 简单web服务
├── Dockerfile      # 镜像构建
├── .gitlab-ci.yml  # CI/CD核心流水线配置
└── nginx.conf      # Nginx反向代理

1. app.js(Node.js 示例)

js

复制代码
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send(`DevOps CI/CD Demo - ${new Date()}`);
});

app.listen(port, () => {
  console.log(`服务启动: http://localhost:${port}`);
});

2. Dockerfile

dockerfile

复制代码
FROM node:18-alpine
WORKDIR /app
COPY package.json .
RUN npm install express
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

3. package.json

json

复制代码
{
  "name": "devops-demo",
  "dependencies": {
    "express": "^4.18.2"
  }
}

4. nginx.conf

nginx

复制代码
server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://demo-service:3000;
        proxy_set_header Host $host;
    }
}

5. .gitlab-ci.yml(CI/CD 核心配置,最重要

yaml

复制代码
# 阶段:构建 → 打包镜像 → 部署
stages:
  - build
  - build_image
  - deploy

# 1. 构建阶段:编译、单元测试
build:
  stage: build
  image: node:18
  script:
    - npm install
    - echo "构建完成"

# 2. 打包Docker镜像,推送到镜像仓库(DockerHub)
build_image:
  stage: build_image
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $DOCKER_USER -p $DOCKER_PWD
    - docker build -t $DOCKER_USER/devops-demo:latest .
    - docker push $DOCKER_USER/devops-demo:latest

# 3. CD部署:远程SSH到服务器,拉镜像重启容器
deploy:
  stage: deploy
  image: alpine:latest
  script:
    - apk add openssh-client
    - ssh-keyscan $SERVER_IP >> ~/.ssh/known_hosts
    - ssh root@$SERVER_IP "
        docker pull $DOCKER_USER/devops-demo:latest;
        docker stop demo-service || true;
        docker rm demo-service || true;
        docker run -d --name demo-service --restart always -p 3000:3000 $DOCKER_USER/devops-demo:latest;
      "

三、服务器环境准备(DevOps 运维侧)

1. 服务器安装

bash

运行

复制代码
# 安装docker
yum install docker -y
systemctl start docker
systemctl enable docker

# 安装nginx
yum install nginx -y
systemctl start nginx

2. Nginx 部署配置

上传 nginx.conf/etc/nginx/conf.d/default.conf 重启 nginx:

bash

运行

复制代码
nginx -s reload

3. 开放端口

安全组放行:80、3000


四、GitLab CI 配置(关键环境变量)

GitLab 项目 → 设置 → CI/CD → 变量,添加:

  1. DOCKER_USER:DockerHub 用户名
  2. DOCKER_PWD:DockerHub 密码
  3. SERVER_IP:你的云服务器公网 IP
  4. SSH_PRIVATE_KEY:服务器私钥(免密登录)

五、完整 DevOps CI/CD 运行流程

  1. 本地修改代码 → git push 提交到 GitLab
  2. GitLab CI 自动触发流水线
  3. CI 阶段:自动安装依赖、构建、测试
  4. 打包镜像:构建 Docker 镜像并推送到 DockerHub
  5. CD 部署:SSH 登录服务器,拉取镜像,重启容器
  6. 访问服务器 IP:http://你的IP,看到页面自动更新

六、扩展:DevOps 完整闭环(监控 + 日志)

在服务器上部署:

  • Prometheus + Grafana:监控容器 CPU / 内存 / 接口状态
  • ELK:收集日志 实现:开发 → CI/CD 上线 → 监控告警 → 迭代优化 完整 DevOps 闭环
相关推荐
qq_白羊座1 小时前
GitLab CI + Jenkins 双流水线模式Jenkins 端配置
ci/cd·gitlab·jenkins
Ms_lan1 小时前
同方工业携手桂花网:广州某养老院智慧健康监测实践案例
运维·服务器·网络
sailing-data1 小时前
【OS zephyr】make与cmake
linux·运维·服务器
❀搜不到1 小时前
ubuntu 更新cmake
linux·运维·ubuntu
Mr_pyx1 小时前
TypeScript 完全入门指南:从基础到项目配置
linux·运维·ubuntu
志栋智能1 小时前
安全超自动化如何支持业务快速安全地创新?
运维·安全·自动化
qq_白羊座1 小时前
GitLab CI 与 Jenkins
ci/cd·gitlab·jenkins
console.log('npc')1 小时前
git发版上线的时候,打tag标签方便jenkins部署
运维·git·jenkins
Frank_refuel1 小时前
Linux网络之网络编程套接字
linux·运维·网络