如何在同一次Jenkins Pipeline构建中生成两个不同的Docker Image?
实现同次Jenkins构建生成多个更新Docker镜像的最佳方案
核心思路
通过构建前扫描变更文件的方式动态判定待构建镜像列表,无需修改原有触发规则,即可兼容单文件更新、多文件同时更新两种场景。
具体实现步骤
- 第一步:在Pipeline开头加入变更文件检测逻辑
使用git diff对比当前提交与上一次成功构建的提交,筛选出变更的Docker配置文件,示例代码片段如下:// 提取本次提交所有变更的文件 changedFiles = sh( script: "git diff --name-only ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT} ${env.GIT_COMMIT}", returnStdout: true ).trim().split('\n') // 替换为你仓库中实际的两个Docker配置文件路径 targetDockerfiles = ['path/to/Dockerfile.service1', 'path/to/Dockerfile.service2'] // 取交集得到本次需要构建的配置文件列表 toBuildFiles = changedFiles.intersect(targetDockerfiles) - 第二步:编写动态构建逻辑
遍历toBuildFiles列表,逐个执行镜像构建、打标签、推送操作:- 单个Dockerfile更新时,列表只有1个元素,仅构建对应镜像
- 两个Dockerfile同时更新时,列表有2个元素,自动在本次构建中完成两个镜像的构建流程
可以提前为每个Dockerfile配置对应的镜像命名规则,避免标签冲突,比如Dockerfile.service1对应镜像名registry.example.com/service1:build-${BUILD_ID}。
- 第三步:优化触发配置避免重复构建
原有触发规则保持不变(两个Dockerfile任意变更都触发构建),只需确认仓库的Webhook配置是单次推送触发一次构建,而非每个文件变更触发一次构建即可,避免同时更新两个文件时触发两次流水线。
可选优化项
- 如果两个镜像存在依赖关系,可在遍历构建时增加顺序判断,比如优先构建基础镜像再构建依赖它的业务镜像
- 构建完成后增加校验步骤,遍历
toBuildFiles列表检查对应镜像是否成功推送到镜像仓库,出现异常直接标记构建失败
内容的提问来源于stack exchange,提问作者setup
相关产品推荐
相关产品推荐

