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 闭环
相关推荐
TimberWill21 小时前
Docker使用总结
运维·docker·容器
m0_5474866621 小时前
《KVM Docker OpenStack实战—虚拟化与云计算配置 管理与运维》全套课件PPT
运维·docker·openstack
yyuuuzz21 小时前
2026游戏云服务器推荐的技术判断思路
运维·服务器·开发语言·网络·人工智能·游戏·php
江华森21 小时前
Linux 运维新手入门课
linux·运维·服务器
正经教主21 小时前
【docker基础】第十周:CI/CD集成
运维·docker·容器
rabbit_pro21 小时前
Nginx配置维护模式
运维·nginx
izcll1 天前
ubuntu系统安装软件的方法
linux·运维·ubuntu
糖果店的幽灵1 天前
软件测试接口测试从入门到精通:接口测试CI_CD集成
软件测试·ci/cd·接口测试
云飞云共享云桌面1 天前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
Maynor9961 天前
我用 Codex 给自己的网站上线了一个智能体客服:从 Dify 到服务器部署,全程实战复盘
运维·服务器