CI/CD + DevOps 完整示例 Demo
整体方案:GitLab + GitLab CI + Docker + Nginx + 服务器 实现效果:本地提交代码 → 自动构建 Docker 镜像 → 自动部署到服务器,一套完整 DevOps 流水线。
一、整体架构
- 开发:本地编写简单 Web 项目
- 代码托管:GitLab
- CI:代码提交自动编译、构建、镜像打包
- CD:自动推镜像、远程部署到服务器
- 运维:服务器 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 → 变量,添加:
DOCKER_USER:DockerHub 用户名DOCKER_PWD:DockerHub 密码SERVER_IP:你的云服务器公网 IPSSH_PRIVATE_KEY:服务器私钥(免密登录)
五、完整 DevOps CI/CD 运行流程
- 本地修改代码 →
git push提交到 GitLab - GitLab CI 自动触发流水线
- CI 阶段:自动安装依赖、构建、测试
- 打包镜像:构建 Docker 镜像并推送到 DockerHub
- CD 部署:SSH 登录服务器,拉取镜像,重启容器
- 访问服务器 IP:
http://你的IP,看到页面自动更新
六、扩展:DevOps 完整闭环(监控 + 日志)
在服务器上部署:
- Prometheus + Grafana:监控容器 CPU / 内存 / 接口状态
- ELK:收集日志 实现:开发 → CI/CD 上线 → 监控告警 → 迭代优化 完整 DevOps 闭环