当前位置: 首页 > news >正文

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

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

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

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

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


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

3.1 SSH 登录

# 从你的本地机器执行(替换 YOUR_IP 和 YOUR_KEY.pem)sshubuntu@公网IP

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


Ubuntu / Debian

sudoaptupdatesudoaptinstall-yca-certificatescurlgnupg

添加 Docker 官方 GPG key:

sudoinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgsudochmoda+r /etc/apt/keyrings/docker.gpg

添加源:

./etc/os-releaseecho\"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \${VERSION_CODENAME}stable"|\sudotee/etc/apt/sources.list.d/docker.list>/dev/null

安装 Docker:

sudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动并设置开机自启:

sudosystemctlenable--nowdocker

验证:

sudodockerrun hello-world# 如果失败,先编辑下面的仓库

如果不想每次都写sudo
sudo usermod -aG docker $USER
然后执行:
newgrp docker
查看:
docker ps


仓库配置:

编辑/etc/docker/daemon.json

{"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"}}# 重启服务sudosystemctl daemon-reloadsudosystemctl restartdocker# 阿里云的镜像自行获取

4. 第三步:Docker 部署 Jenkins

4.1 创建 Jenkins 数据目录

# Jenkins 数据持久化到宿主机,容器删了数据还在mkdir-p~/jenkins_homesudochown1000:1000 ~/jenkins_home# Jenkins 容器内用 uid=1000

4.2 启动 Jenkins 容器

dockerrun-d\--namejenkins\--restartunless-stopped\-p8080:8080\-p50000: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:8080Jenkins Web UI 端口
  • -p 50000:50000Jenkins Agent 通信端口
  • -v ~/jenkins_home:...数据持久化
  • -v /var/run/docker.sock:...关键!让 Jenkins 容器内可以调用宿主机的 Docker(Docker-in-Docker 简化版)

4.3 确认 Jenkins 正在运行

dockerps|grepjenkins# 应该看到 jenkins 容器状态为 Up

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

5.1 访问 Jenkins Web UI

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

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

5.2 获取初始管理员密码

回到 SSH 终端执行:

dockerexecjenkinscat/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/目录中。

cd/home/yl/ci-demo-project# 初始化 Gitgitinitgitadd.gitcommit-m"feat: init calculator API project"# 关联远程仓库(替换为你的地址)gitremoteaddorigin https://gitlab.cn/YOUR_USERNAME/calculator-api.git# 推送到 GitLab(会提示输入用户名和 Access Token)gitpush-uorigin 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」,你应该看到:

[Pipeline]stage(Build)Building Docker image...dockerbuild-tcalculator-api.[Pipeline]stage(Test)Running testsincontainer...dockerrun--rmcalculator-api pytest test_app.py-vtest_health PASSED test_add PASSED...8passed[Pipeline]stage(Deploy)Deploying calculator-api...[Pipeline]End of Pipeline Finished: SUCCESS

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

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

dockerexec-uroot jenkinssh-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 "

随后给权限:

dockerexec-uroot jenkinssh-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 验证自动触发

# 在你的本地项目里随便改点东西echo"# test trigger">>README.mdgitaddREADME.mdgitcommit-m"test: trigger CI pipeline"gitpush 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 中)

cd/home/yl/ci-demo-project# 安装依赖pipinstall-rrequirements.txt# 运行测试python3-mpytest 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:

# 检查挂载dockerinspect jenkins|grepdocker.sock# 如果没有,重新创建容器(数据在 ~/jenkins_home 中不会丢)dockerrm-fjenkinsdockerrun-d\--namejenkins\--restartunless-stopped\-p8080:8080-p50000:50000\-v~/jenkins_home:/var/jenkins_home\-v/var/run/docker.sock:/var/run/docker.sock\jenkins/jenkins:lts

Q3:git push到 GitLab.cn 失败

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

Q4: Webhook 不生效

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

清理资源(重要!)

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

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

源码下载

gitlab仓库地址

http://www.jsqmd.com/news/752602/

相关文章:

  • RoboBrain 2.5:机器人语义与物理智能的闭环耦合
  • 软文发布平台_软文推广平台_软文营销资源平台 天天低价发稿就选这一家 - 代码非世界
  • 小红书视频提取 2026最新 最新方法汇总|视频怎么保存到手机?提取方式全测评 - 爱上科技热点
  • 如何用Sunshine构建你的个人游戏云:从零到一的跨平台串流革命
  • 多模型选型策略在智能CRM客户画像分析中的应用实践
  • 海棠山铁哥守凡人风骨,《第一大道》不卑不亢对峙资本《灵魂摆渡・浮生梦》
  • Harbor企业级私有镜像仓库:架构解析、生产部署与运维实战
  • 2026文昌火箭观礼主流公开门票预订渠道整理介绍 - 热敏感科技蜂
  • Gemini3.1Pro实测:办公效率提升92%
  • Wonder3D:3分钟从单张图片生成高质量3D模型的技术突破
  • RdpGamepad:3步实现远程桌面原生Xbox手柄控制
  • 视频去水印软件怎么一键去除?免费去水印工具推荐,2026最新实测好用的方法全整理 - 爱上科技热点
  • 【数据结构与算法面试宝典】23 算法模板:如何让高频算法考点秒变默写题?
  • 从零构建无限操作系统:微内核、能力系统与异构调度实践
  • 如何快速访问AO3镜像站:面向中文用户的完整实用指南
  • XUnity.AutoTranslator实战指南:5步实现Unity游戏多语言本地化
  • 告别手动做表!Gemini3.1Pro重塑办公效率
  • AI专著写作高效指南,巧用工具3天搞定20万字专著创作!
  • DCN、注意力机制与动态卷积:深入对比CV中的三大‘自适应’模块,谁才是你的菜?
  • Unlock-Music:三步解锁加密音乐,让音乐自由播放的终极指南
  • 【数据结构与算法面试宝典】结束语 算法的精进之路
  • APKMirror安卓应用:安全下载APK文件的终极免费解决方案
  • On-policy vs Off-policy:从Sarsa和Q-learning的实战对比,理解强化学习两大流派的核心差异
  • 暗黑3终极自动化指南:D3KeyHelper 5分钟快速配置教程
  • 5步打造你的专属音效:Equalizer APO从零到精通的完整指南
  • 终极指南:三步快速解锁加密音乐文件,实现跨平台播放自由
  • 教育机构利用Taotoken为学生实验提供稳定可控的AI算力
  • KMS_VL_ALL_AIO:彻底解决Windows和Office激活难题的终极方案
  • 实战应用:在快马平台开发智能应用控制自动检测与用户引导解决方案
  • 别再死记硬背了!用这5个真实电路案例,轻松掌握SPICE语法核心