腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)

腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南

适用场景:个人学习 / 体验 CI/CD 流程
总耗时:约 2~3 小时(含 CVM 创建等待时间)
预算:腾讯云 CVM 按量计费约 0.4~0.5 元/小时


文章目录

  • [腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南](#腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南)
    • [1. 架构概览](#1. 架构概览)
    • [2. 第一步:创建腾讯云 CVM 实例](#2. 第一步:创建腾讯云 CVM 实例)
      • [2.1 登录腾讯云控制台](#2.1 登录腾讯云控制台)
      • [2.2 推荐配置](#2.2 推荐配置)
      • [2.3 安全组配置](#2.3 安全组配置)
    • [3. 第二步:连接 CVM 并安装 Docker](#3. 第二步:连接 CVM 并安装 Docker)
      • [3.1 SSH 登录](#3.1 SSH 登录)
      • [3.2 安装 Docker(官方脚本,最快最稳)](#3.2 安装 Docker(官方脚本,最快最稳))
    • [4. 第三步:Docker 部署 Jenkins](#4. 第三步:Docker 部署 Jenkins)
      • [4.1 创建 Jenkins 数据目录](#4.1 创建 Jenkins 数据目录)
      • [4.2 启动 Jenkins 容器](#4.2 启动 Jenkins 容器)
      • [4.3 确认 Jenkins 正在运行](#4.3 确认 Jenkins 正在运行)
    • [5. 第四步:Jenkins 初始化配置](#5. 第四步:Jenkins 初始化配置)
      • [5.1 访问 Jenkins Web UI](#5.1 访问 Jenkins Web UI)
      • [5.2 获取初始管理员密码](#5.2 获取初始管理员密码)
      • [5.3 安装推荐插件](#5.3 安装推荐插件)
      • [5.4 创建管理员账户](#5.4 创建管理员账户)
      • [5.5 实例配置](#5.5 实例配置)
    • [6. 第五步:GitLab.cn 创建项目并推送代码](#6. 第五步:GitLab.cn 创建项目并推送代码)
      • [6.1 注册/登录 GitLab.cn](#6.1 注册/登录 GitLab.cn)
      • [6.2 创建新项目](#6.2 创建新项目)
      • [6.3 获取项目地址](#6.3 获取项目地址)
      • [6.4 生成 GitLab Personal Access Token](#6.4 生成 GitLab Personal Access Token)
      • [6.5 从本地推送 Demo 项目](#6.5 从本地推送 Demo 项目)
      • [6.6 验证](#6.6 验证)
    • [7. 第六步:Jenkins 配置 GitLab 集成](#7. 第六步:Jenkins 配置 GitLab 集成)
      • [7.1 安装必要插件](#7.1 安装必要插件)
      • [7.2 添加 GitLab 凭据](#7.2 添加 GitLab 凭据)
      • [7.3 配置 GitLab 服务器连接](#7.3 配置 GitLab 服务器连接)
    • [8. 第七步:创建 Jenkins Pipeline 任务](#8. 第七步:创建 Jenkins Pipeline 任务)
      • [8.1 新建 Pipeline 任务](#8.1 新建 Pipeline 任务)
      • [8.2 配置 Pipeline](#8.2 配置 Pipeline)
        • [General 部分](#General 部分)
        • [Build Triggers 部分](#Build Triggers 部分)
      • [8.3 Pipeline 定义](#8.3 Pipeline 定义)
    • [9. 第八步:触发 CI/CD 并验证](#9. 第八步:触发 CI/CD 并验证)
      • [9.1 方式一:手动触发(先试这个)](#9.1 方式一:手动触发(先试这个))
      • [9.2 方式二:Git Push 自动触发(配置 Webhook)](#9.2 方式二:Git Push 自动触发(配置 Webhook))
      • [9.3 验证自动触发](#9.3 验证自动触发)
    • [10. 附:Python Demo 项目文件清单](#10. 附:Python Demo 项目文件清单)
      • [快速本地验证(在 WSL 中)](#快速本地验证(在 WSL 中))
    • 视频演示
    • 常见问题排查
      • [Q1: Jenkins 页面打不开](#Q1: Jenkins 页面打不开)
      • [Q2: Jenkins Pipeline 报 `docker: command not found`](#Q2: Jenkins Pipeline 报 docker: command not found)
      • [Q3: `git push` 到 GitLab.cn 失败](#Q3: git pushGitLab.cn 失败)
      • [Q4: Webhook 不生效](#Q4: Webhook 不生效)
    • 清理资源(重要!)
    • 源码下载

1. 架构概览

复制代码
┌──────────────┐     push code      ┌──────────────┐
│    GitLab    │ ──────────────────▶│    Jenkins    │
│  (代码仓库)   │    webhook 触发     │  (CI/CD 引擎) │
└──────────────┘                    └──────┬───────┘
                                           │
                                     Docker 执行
                                           │
                              ┌────────────┴────────────┐
                              │  ① Build (docker build) │
                              │  ② Test  (pytest)       │
                              │  ③ Deploy (echo)        │
                              └─────────────────────────┘
                                           │
                                    ┌──────▼──────┐
                                    │  腾讯云 CVM   │
                                    │  (Ubuntu)    │
                                    └─────────────┘

核心组件:

组件 用途 部署方式
腾讯云 CVM 运行 Jenkins 的服务器 云控制台创建
Docker 容器运行时,运行 Jenkins 和构建任务 apt 安装
Jenkins CI/CD 编排引擎 Docker 容器
GitLab 源代码托管 SaaS 平台
Python Demo 被构建和测试的项目 Flask 应用

2. 第一步:创建腾讯云 CVM 实例

2.1 登录腾讯云控制台

打开 https://console.cloud.tencent.com/cvm ,点击 「新建」

2.2 推荐配置

配置项 推荐值 说明
计费模式 按量计费 体验用,用完即删,省钱
地域 任意(如广州/上海) 跟着推荐走
机型 任意标准型 /2核4G以上 Jenkins + Docker 最低需求
镜像 Ubuntu 22.04 LTS 稳定,Docker 支持好
系统盘 高性能云硬盘 50GB 默认即可
网络 子网选择要正确 比如南京三区,子网选择对应
带宽 按流量计费 体验够用

2.3 安全组配置

关键步骤! 需要放行以下端口:

端口 协议 来源 用途
22 TCP 你的 IP(建议) SSH 连接
8080 TCP 0.0.0.0/0 Jenkins Web UI
50000 TCP 0.0.0.0/0 Jenkins Agent 通信

嫌麻烦的直接安全组配置:0.0.0.0/0 ALL

⚠️ 安全提醒:体验结束后建议将 8080 和 50000 的来源改回你的 IP 或直接删除安全组规则。


3. 第二步:连接 CVM 并安装 Docker

3.1 SSH 登录

bash 复制代码
# 从你的本地机器执行(替换 YOUR_IP 和 YOUR_KEY.pem)
ssh ubuntu@公网IP

3.2 安装 Docker(官方脚本,最快最稳)


Ubuntu / Debian

bash 复制代码
sudo apt update
sudo apt install -y ca-certificates curl gnupg

添加 Docker 官方 GPG key:

bash 复制代码
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

添加源:

bash 复制代码
. /etc/os-release
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  ${VERSION_CODENAME} stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker:

bash 复制代码
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动并设置开机自启:

bash 复制代码
sudo systemctl enable --now docker

验证:

bash 复制代码
sudo docker run hello-world
# 如果失败,先编辑下面的仓库

如果不想每次都写 sudo
sudo usermod -aG docker $USER

然后执行:
newgrp docker

查看:
docker ps


仓库配置:

编辑 /etc/docker/daemon.json

bash 复制代码
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://xxx.mirror.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://mirror.ccs.tencentyun.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 阿里云的镜像自行获取

4. 第三步:Docker 部署 Jenkins

4.1 创建 Jenkins 数据目录

bash 复制代码
# Jenkins 数据持久化到宿主机,容器删了数据还在
mkdir -p ~/jenkins_home
sudo chown 1000:1000 ~/jenkins_home  # Jenkins 容器内用 uid=1000

4.2 启动 Jenkins 容器

bash 复制代码
docker run -d \
  --name jenkins \
  --restart unless-stopped \
  -p 8080:8080 \
  -p 50000:50000 \
  -v ~/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts

参数说明:

  • -d 后台运行
  • --restart unless-stopped 开机自启
  • -p 8080:8080 Jenkins Web UI 端口
  • -p 50000:50000 Jenkins Agent 通信端口
  • -v ~/jenkins_home:... 数据持久化
  • -v /var/run/docker.sock:... 关键! 让 Jenkins 容器内可以调用宿主机的 Docker(Docker-in-Docker 简化版)

4.3 确认 Jenkins 正在运行

bash 复制代码
docker ps | grep jenkins
# 应该看到 jenkins 容器状态为 Up

5. 第四步:Jenkins 初始化配置

5.1 访问 Jenkins Web UI

浏览器打开:http://YOUR_CVM_IP:8080

如果打不开,检查安全组是否放行了 8080 端口

5.2 获取初始管理员密码

回到 SSH 终端执行:

bash 复制代码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

将输出的密码粘贴到 Web 页面的输入框中。

5.3 安装推荐插件

选择 「Install suggested plugins」,等待插件安装完成(约 3~5 分钟)。

这一步会自动安装 Git、Pipeline、Docker 等核心插件。

5.4 创建管理员账户

按提示创建:

  • 用户名:admin
  • 密码:自己设一个,记住
  • 邮箱:你的邮箱

5.5 实例配置

Jenkins URL 保持默认 http://YOUR_IP:8080,点击 Save and Finish。


6. 第五步:GitLab.cn 创建项目并推送代码

6.1 注册/登录 GitLab.cn

打开 https://gitlab.cn ,注册或登录你的账号。

6.2 创建新项目

  1. 点击 「New project」「Create blank project」
  2. 填写:
    • Project name:calculator-api
    • Visibility Level:选 PrivatePublic(看你喜好)
  3. 点击 「Create project」

6.3 获取项目地址

项目创建后,页面顶部会显示 Git 地址,例如:

复制代码
https://gitlab.cn/your-username/calculator-api.git

6.4 生成 GitLab Personal Access Token

  1. 点击右上角头像 → 「Preferences」
  2. 左侧菜单 「Access Tokens」
  3. 填写:
    • Token name:jenkins-ci
    • Expiration date:随便选个远的(如 2027-01-01)
    • Scopes:勾选 read_repositorywrite_repository
  4. 点击 「Create personal access token」
  5. 立即复制 Token! 页面刷新后就看不到了

6.5 从本地推送 Demo 项目

回到你的本地开发机(或 WSL 终端),项目文件已在 /home/yl/ci-demo-project/ 目录中。

bash 复制代码
cd /home/yl/ci-demo-project

# 初始化 Git
git init
git add .
git commit -m "feat: init calculator API project"

# 关联远程仓库(替换为你的地址)
git remote add origin https://gitlab.cn/YOUR_USERNAME/calculator-api.git

# 推送到 GitLab(会提示输入用户名和 Access Token)
git push -u origin main

用户名填你的 GitLab 用户名,密码填刚才生成的 Personal Access Token

6.6 验证

刷新 GitLab.cn 项目页面,应该能看到所有文件(app.py, Jenkinsfile, Dockerfile 等)。


7. 第六步:Jenkins 配置 GitLab 集成

7.1 安装必要插件

回到 Jenkins Web UI → 「Manage Jenkins」「Plugins」「Available plugins」,搜索并安装:

  • GitLab Plugin
  • Docker Pipeline

安装后重启 Jenkins(或勾选「重启后安装」)。

7.2 添加 GitLab 凭据

  1. 「Manage Jenkins」「Credentials」「System」「Global credentials」
  2. 点击 「Add Credentials」
  3. 填写:
    • Kind:GitLab API token
    • API token:粘贴 6.4 步生成的 Personal Access Token
    • ID:gitlab-token(自定义标识)
    • Description:GitLab API Token for calculator-api
  4. 点击 「Create」

7.3 配置 GitLab 服务器连接

  1. 「Manage Jenkins」「Configure System」
  2. 找到 「GitLab」 部分
  3. 点击 「Add」「GitLab Servers」
  4. 填写:
    • Server name:jihulab
    • URL:https://jihulab.com
    • Credentials:选择刚才创建的 gitlab-token
  5. 点击 「Test Connection」 → 应该显示 「Success」
  6. 保存

8. 第七步:创建 Jenkins Pipeline 任务

8.1 新建 Pipeline 任务

  1. Jenkins 首页点击 「New Item」
  2. 输入名称:calculator-api-pipeline
  3. 选择 「Pipeline」,点击 OK

8.2 配置 Pipeline

在任务配置页面:

General 部分
  • 勾选 「GitLab Connection」 :选择 gitlab.cn
  • 勾选 「This project is parameterized」:(可跳过)
Build Triggers 部分
  • 勾选 「Build when a change is pushed to GitLab」
  • 勾选以下事件:
    • ✅ Push Events
    • ✅ Merge Request Events
  • 点击 「Advanced」 ,在 「Secret token」 处点击 「Generate」 ,生成一个 Token
    • 复制这个 Secret token 值,后面配置 webhook 要用!
    • 然后点击页面底部的 「Save」

8.3 Pipeline 定义

「Pipeline」 部分,选择 「Pipeline script from SCM」

  • SCM:Git
  • Repository URL:https://jihulab.com/ylqb1124/calculator-api.git
  • Credentials:Username with password
  • Branches to build:*/main
  • Script Path:Jenkinsfile
  • 点击 「Save」

项目里已经有一个写好的 Jenkinsfile,Pipeline 会自动读取它。


9. 第八步:触发 CI/CD 并验证

9.1 方式一:手动触发(先试这个)

在 Jenkins 任务页面点击 「Build Now」,观察构建过程。

点击构建编号(如 #1)→ 「Console Output」,你应该看到:

bash 复制代码
[Pipeline] stage (Build)
Building Docker image...
docker build -t calculator-api .

[Pipeline] stage (Test)
Running tests in container...
docker run --rm calculator-api pytest test_app.py -v
test_health PASSED
test_add PASSED
...
8 passed

[Pipeline] stage (Deploy)
Deploying calculator-api...

[Pipeline] End of Pipeline
Finished: SUCCESS

!!!注意:这里很有可能会Failure,这是因为容器内没有docker环境

可以下载一个最小的二进制Docker环境:

bash 复制代码
docker exec -u root jenkins sh -c "
  curl -fsSLo /tmp/docker.tgz https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-27.5.1.tgz && \
  tar xzf /tmp/docker.tgz -C /usr/local/bin --strip-components=1
"

随后给权限:

bash 复制代码
docker exec -u root jenkins sh -c "
  # 把 docker.sock 的组改成 docker(宿主机映射过来的可能需要这一步)
  chmod 666 /var/run/docker.sock
"

9.2 方式二:Git Push 自动触发(配置 Webhook)

  1. 回到 GitLab.cn 项目页面
  2. 「Settings」「Webhooks」
  3. 填写:
    • URL:http://YOUR_CVM_IP:8080/project/calculator-api-pipeline ⚠️ 注意:GitLab.cn 的 Webhook URL 必须是公网可访问的。如果你的 CVM 没有固定公网 IP,webhook 可能不生效,但手动触发完全不受影响。
    • Secret token:粘贴 8.2 步生成的 Secret token
    • Trigger:勾选 「Push events」
    • 取消勾选 「Enable SSL verification」(新手建议取消)
  4. 点击 「Add webhook」
  5. 点击 「Test」 → 选择 「Push events」,如果返回 HTTP 200 即成功

9.3 验证自动触发

bash 复制代码
# 在你的本地项目里随便改点东西
echo "# test trigger" >> README.md
git add README.md
git commit -m "test: trigger CI pipeline"
git push origin main

回到 Jenkins,应该看到一个自动触发的构建任务开始运行。


10. 附:Python Demo 项目文件清单

项目目录:/home/yl/ci-demo-project/

复制代码
ci-demo-project/
├── app.py              # Flask 计算器 API(/add /subtract /multiply /divide /health)
├── test_app.py         # pytest 测试用例(8 个测试,覆盖正常/异常场景)
├── requirements.txt    # Python 依赖(Flask, pytest)
├── Dockerfile          # 多阶段构建镜像
├── docker-compose.yml  # 一键启动
├── Jenkinsfile         # CI/CD Pipeline 定义(Build → Test → Deploy)
├── .dockerignore       # Docker 构建忽略文件
├── README.md           # 项目说明
└── CI-CD-Guide.md      # 本文档

快速本地验证(在 WSL 中)

bash 复制代码
cd /home/yl/ci-demo-project

# 安装依赖
pip install -r requirements.txt

# 运行测试
python3 -m pytest test_app.py -v

# 启动服务
python3 app.py
# 然后访问 http://localhost:5000/health
# 测试计算: http://localhost:5000/add?a=3&b=4

所有 8 个测试已验证通过 ✅


视频演示

jenkins、CI/CD效果演示

常见问题排查

Q1: Jenkins 页面打不开

  • 检查 CVM 安全组是否放行 8080 端口
  • 检查 Jenkins 容器是否运行:docker ps | grep jenkins
  • 检查 CVM 防火墙:sudo ufw status

Q2: Jenkins Pipeline 报 docker: command not found

Jenkins 容器内部没有 Docker。确认启动时有没有挂载 docker.sock:

bash 复制代码
# 检查挂载
docker inspect jenkins | grep docker.sock

# 如果没有,重新创建容器(数据在 ~/jenkins_home 中不会丢)
docker rm -f jenkins
docker run -d \
  --name jenkins \
  --restart unless-stopped \
  -p 8080:8080 -p 50000:50000 \
  -v ~/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts

Q3: git pushGitLab.cn 失败

  • 确认使用的是 Personal Access Token 而不是密码
  • 确认 Token 权限包含 write_repository

Q4: Webhook 不生效

  • GitLab.cn 到 CVM 公网 IP 可能不通(国内网络环境),建议先用手动触发验证
  • 如果公网 IP 是动态的,Webhook 不可靠,手动触发一样体验流程

清理资源(重要!)

体验完成后,及时释放资源避免持续扣费:

bash 复制代码
# 1. 在腾讯云控制台销毁 CVM 实例(或关机)
# 2. 删除不再需要的安全组规则
# 3. 如果使用了弹性公网 IP,记得释放(按量计费 IP 闲置也扣费)

源码下载

gitlab仓库地址

相关推荐
H_unique1 小时前
LangChain:创建工具Ⅰ
python·langchain
eqwaak02 小时前
PyTorch张量操作全攻略:从入门到精通
开发语言·人工智能·pytorch·python
A懿轩A2 小时前
Ghostty:告别 Mac 毛坯终端,打造 2026 最丝滑的 Ghostty AI 开发驾驶舱——Claude Code 团队也在用
python·macos·策略模式
Chasing Aurora2 小时前
python 安装依赖和导入模块 详解
开发语言·python·虚拟环境·import·pyenv·requirements
念恒123062 小时前
Python(for循环)
python·学习
咱那飘逸的长发2 小时前
Trae java项目配置全局maven和jdk
java·python·maven
码界筑梦坊2 小时前
116-基于Flask的健身房会员锻炼数据可视化分析系统
python·信息可视化·数据分析·flask·毕业设计
wcy_10112 小时前
QCoder智能生成Excel数据清洗与可视化代码
python·excel
SNOWPIAOP3 小时前
DOCKER的一些有用命令
docker