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 闭环
相关推荐
Lottie20266 分钟前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化
章老师说8 分钟前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
wbs_scy23 分钟前
仿 muduo 高并发服务器项目:实现 Any 通用容器并理解 std::any
运维·服务器
做个文艺程序员1 小时前
Linux第11篇:存储管理——磁盘分区、LVM 与文件系统
linux·运维·服务器
懂AI的老郑1 小时前
工业检测场景下智能体的应用:从自动化到智能化
运维·自动化
运维大师1 小时前
【云原生与DevOps】08-多云容灾架构设计:跨Region自动切换实践
运维·云原生·devops
一氧化二氢.h1 小时前
AI大模型批量自动化评测脚本
运维·人工智能·自动化
jarreyer10 小时前
【AI Agent】大模型自动化载体
运维·自动化
xixingzhe210 小时前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
翼龙云_cloud11 小时前
阿里云国际代理商:阿里云 ECS 全维度监控配置教程
运维·阿里云·云计算·监控