Jenkins03-GitLib+Docker实现CI/CD

本文详细介绍如何使用Jenkins配合GitLab实现持续集成(CI)和持续部署(CD),包括项目配置、WebHook设置、自动构建及部署流程,适合小微企业的DevOps实践。

  记录一下 如何使用Jenkins实现CI/CD 

前提:已有gitlib 并且已经创建完项目

1、Jenkins创建项目 我这里以maven项目为例

2、项目 -  配置

此处我以阿里云gitlib为例 当然也可以自己搭gitlib  一样的道理,设置好仓库url  和 Credentials  这个是连接gitlib仓库的账号密码

阿里云gitlib账号在 code首页 - 设置 - 个人设置

密码在 code首页 - 设置 - 密码  第一次使用  请直接点忘记密码  然后通过邮箱设置密码

3、创建远程触发webHook

红线处是我们的gitlib触发Jenkins的Webhook

4、gitlib设置Jenkins的WebHook

在code 阿里云首页 进入一个项目 -  设置 -  WebHooks

增加wehoooks后 可以点一下测试  如果返回403则表示 Jenkins不允许匿名访问  这时候我们要在Jenkins配置一下权限:

进入Jenkins - 系统设置 - 全局安全配置

我们勾选匿名用户允许触发任务

现在可以再测试一下  是否返回200 OK

接下来有的同学会问  我git上有多个分支  Jenkins下每个分支一个项目   那我向git仓库推送  然后触发Jenkins webhook的时候  Jenkins怎么知道我是哪一个分支呢,其实Jenkins也想到了这一点  提供了分支识别  我们进入 Jenkins - 项目 - 配置 -  构建触发器 -  高级展开

如下图:

 include这里填入分支名称即可(下面警告说找不到这个分支  不用管它) 

好了  这样Jenkins只会处理当前触发Push events的分支

5、执行自动构建(CI)

Jenkins拉完代码之后  默认是不会进行任何操作的 我们要让他执行自动构建 

项目设置:

因为是maven项目  Jenkins拉完代码后会自动执行maven构建命令

6、添加构建后的操作

我这里构建后让他执行一些命令 让他执行CD

这里sshServer 是本地 大家也可以生成sshKey登录 我这里为了方便使用的是密码  大家如果没有sshServer 可以去系统设置 - Publish over SSH 设置 创建

7、执行自动部署(CD)

构建完成后台 自动部署

结合docker思路:

 ①停止旧容器

②删除旧容器

③删除旧镜像

④构建镜像

⑤run镜像

这里是我的步骤:

这里使用的是maven的docker插件  其实就是自动写Dockerfile文件的  大家也可以自己写Dockerfile哈

PS:我这里是开发环境  生产环境千万别这样干哈  因为会造成业务中断

生产环境思路:

①删除旧镜像

②构建新镜像

③登录docker私库

④push镜像至docker私库

⑤生产环境手动执行更新

下面是我的步骤 仅供参考

注释部分是使用docker命令方式  我使用的是maven插件方式  一样的道理

 

至此 我们实现了CD即自动部署   也是最简化版的DevOps  但是小微企业应该够用了

 

 

在软件开发中,**JenkinsCI/CD 的实施** 是指: 👉 **通过自动化工具(如 Jenkins实现代码集成、构建、测试和部署的全流程自动化**,以提升交付效率、减少人为错误。 --- ## ✅ 什么是 CI/CD? | 缩写 | 全称 | 含义 | |------|------|------| | **CI** | Continuous Integration(持续集成) | 开发人员频繁地将代码变更合并到主干,并自动触发构建与测试 | | **CD** | Continuous Delivery / Deployment(持续交付 / 部署) | 自动将通过测试的代码打包并发布到指定环境(如测试、预生产、生产) | > 🎯 目标:**让每次提交都可发布(release-ready)** --- ## 🔧 JenkinsCI/CD 中的角色 Jenkins 是最流行的开源 CI/CD 工具之一,它通过“任务(Job)”或“流水线(Pipeline)”来定义自动化流程。 ### ✅ Jenkins 能做什么? | 功能 | 示例 | |------|------| | 拉取 Git/SVN 代码 | `git clone https://github.com/myteam/app.git` | | 编译项目 | `mvn clean package`、`make all`、`npm build` | | 运行单元测试 | `pytest`, `junit`, `go test` | | 执行静态代码检查 | SonarQube、ESLint、Checkstyle | | 构建 Docker 镜像 | `docker build -t myapp:v1.0 .` | | 部署到服务器 | SCP、Ansible、Kubernetes | | 发送通知 | 邮件、企业微信、钉钉、Slack | --- ## 🛠️ 实施 Jenkins CI/CD 的完整流程(7 步法) ### ✅ 第一步:明确目标和范围 先回答以下问题: - 我们想自动化什么?(编译?测试?烧录?) - 哪些团队参与?(开发、测试、Calib、SQA?) - 是否支持多车型/多版本? - 是否需要权限控制或审批流程? 📌 示例目标: > “每次提交代码后,自动拉取 → 编译固件 → 生成 CHK 文件 → CRC 校验 → 输出报告” --- ### ✅ 第二步:搭建 Jenkins 环境 #### 1. 安装 Jenkins ```bash # Linux(Ubuntu) wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update sudo apt install jenkins # 启动服务 sudo systemctl start jenkins ``` 访问地址:`http://your-server:8080` #### 2. 初始化设置 - 输入初始密码(位于 `/var/lib/jenkins/secrets/initialAdminPassword`) - 安装推荐插件 - 创建管理员用户 #### 3. 推荐安装的插件 | 插件名 | 用途 | |-------|------| | **Git Plugin** | 支持从 Git 拉取代码 | | **Pipeline** | 使用 Jenkinsfile 定义流程 | | **HTML Publisher Plugin** | 展示 HTML 报告(如 CRC 结果) | | **Email Extension Plugin** | 发送构建结果邮件 | | **Workspace Cleanup Plugin** | 清理工作空间 | | **Build Timeout Plugin** | 设置超时防止卡死 | | **Parameterized Trigger Plugin** | 触发下游任务 | --- ### ✅ 第三步:配置 Agent(执行节点) 对于嵌入式开发(如 ECU 固件),通常需要 Windows 环境运行 Excel 宏、Make 编译等。 #### 方案:使用 Windows Slave 节点 1. 在 Windows 机器上安装 Java 和 Jenkins Agent(通过 JNLP 或 SSH) 2. 在 Jenkins 中添加节点:Manage Jenkins → Nodes → New Node - 名称:`win-calib-node` - 类型:Permanent Agent - Labels:`windows-calib` 3. 连接方式:Launch agent via Java Web Start 然后在 Pipeline 中指定: ```groovy agent { label 'windows-calib' } ``` 确保该节点已安装: - Git - Python + xlwings/pandas - Cygwin(用于 checksum 工具) - Excel(支持 VBA 宏) --- ### ✅ 第四步:编写 Jenkinsfile(声明式 Pipeline) ```groovy pipeline { agent { label 'windows-calib' } environment { WORKSPACE_W = 'W:\\mainline\\spa_traveo' CALIB_XLSM = "${WORKSPACE_W}\\tool_bin\\calibration\\Calibration.xlsm" } stages { stage('🔍 映射 W 盘') { steps { bat ''' net use W: \\\\fileserver\\mainline\\spa_traveo /user:jenkins pass123 || echo 已连接 ''' } } stage('📝 更新 Calib 配置') { steps { sh 'python update_calibration_config.py' } } stage('⚙️ 运行 Excel 宏') { steps { bat 'python run_excel_macro.py' } } stage('🛠️ 全编译固件') { steps { dir("${WORKSPACE_W}\\prj\\Amber_BB_va1") { bat 'make clean && make all' } } } stage('📦 生成 CHK & CRC 校验') { steps { bat ''' cd ${WORKSPACE_W}\\tool_bin\\checksum call create_chk.bat ''' sh 'python verify_crc.py' } } stage('📊 发布报告') { steps { publishHTML([ target: [ reportDir: 'dst', reportFiles: 'CRCチェック結果.xlsx', reportName: 'CRC Validation Report' ] ]) } } } post { success { emailext(subject: "✅ 构建成功", body: "详见 ${env.BUILD_URL}", recipientProviders: [developers()]) } failure { emailext(subject: "🚨 构建失败", body: "请查看日志: ${env.BUILD_URL}/console", recipientProviders: [developers()]) } } } ``` --- ### ✅ 第五步:配置参数化构建(可选) 允许用户选择参数启动构建: ```groovy parameters { string(name: 'VEHICLE_MODEL', defaultValue: 'TZAA', description: '输入车型') choice(name: 'BUILD_TYPE', choices: ['Debug', 'Release'], description: '构建类型') booleanParam(name: 'RUN_CRC_CHECK', defaultValue: true, description: '是否运行 CRC 校验') } ``` 在脚本中使用:`${params.VEHICLE_MODEL}` --- ### ✅ 第六步:触发方式配置 | 触发方式 | 配置方法 | |--------|---------| | **手动触发** | 用户点击 【Build Now】 | | **定时构建** | 使用 cron 表达式,如每天凌晨 `H 2 * * *` | | **Git Hook 触发** | GitHub/GitLab 提交后自动触发(需 Webhook) | | **上游任务触发** | Job A 成功后自动运行 Job B | --- ### ✅ 第七步:监控与优化 | 优化项 | 建议 | |-------|------| | 日志高亮 | 使用 ANSI Color Plugin 彩色输出 | | 构建归档 | `archiveArtifacts 'dst/*.hex, dst/*.chk'` | | 权限控制 | 使用 Role-based Authorization Strategy 控制谁能构建 | | 构建超时 | 添加 `timeout(time: 30, unit: 'MINUTES')` | | 失败重试 | `retry(2)` 尝试最多 3 次 | --- ## 📊 实施效果对比 | 传统模式 | 实施 CI/CD 后 | |--------|--------------| | 手动操作,容易出错 | 全流程自动化,稳定可靠 | | 一天只能构建一次 | 每次提交都能验证 | | 问题发现滞后 | 提交即发现问题(左移测试) | | 报告靠人工整理 | 自动生成 HTML/PDF 报告 | | 权限混乱 | 可控的构建权限和审计日志 | --- ## ✅ 成功案例(汽车行业 ECU 开发) 某 Tier1 厂商使用 Jenkins 实现- Calib 数据更新 → 自动运行 Excel 宏 → 生成 C 文件 → 编译固件 → CRC 校验 - 每天自动构建 Nightly Build - 所有输出文件归档 + 报告邮件通知 SQA 团队 - 构建成功率从 60% 提升至 98% ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值