Git Changelog Jenkins插件:如何展示commit-b与commit-c的变更差异
解决Jenkins后置构建变更日志显示最新提交差异的问题
这个问题本质是Jenkins默认的变更集机制导致的:Jenkins在构建触发瞬间就锁定了当时的代码状态和变更范围,所以哪怕你在构建过程中推送了新的commit-c,后置插件依然会使用触发时的变更数据(commit-a与commit-b的差异)。要让变更日志展示commit-b到commit-c的差异,我们需要在构建流程中重新捕获最新的变更,具体方案如下:
步骤1:在构建触发时保存基准提交(commit-b)
当构建刚启动时,先获取此时仓库的最新提交哈希(也就是commit-b),并把它存到环境变量里方便后续使用。如果是自由风格项目,可以在前置执行步骤里加这段命令:COMMIT_B=$(git rev-parse HEAD) echo "COMMIT_B=${COMMIT_B}" >> $WORKSPACE/commit_b.txt如果是Pipeline项目,直接在脚本里赋值即可:
def commitB = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()步骤2:构建结束前拉取最新代码并计算新变更
在后置插件运行之前,新增一个步骤拉取远程仓库的最新代码,然后对比commit-b和当前最新提交(commit-c)的差异:# 拉取最新代码(用fetch避免自动合并冲突) git fetch origin # 读取之前保存的commit-b哈希 COMMIT_B=$(cat $WORKSPACE/commit_b.txt) # 生成commit-b到最新提交的变更日志,保存到文件 git log --oneline --no-merges ${COMMIT_B}..origin/你的分支名 > $WORKSPACE/latest_changelog.txt步骤3:让后置插件读取自定义变更日志
如果你的后置插件支持自定义变更源,直接配置它读取latest_changelog.txt的内容作为变更日志即可;如果插件没有这个功能,也可以在Pipeline里手动把变更信息附加到构建描述中:def changelog = sh(script: "git log --oneline --no-merges ${commitB}..origin/${BRANCH_NAME}", returnStdout: true).trim() currentBuild.description = "本次构建新增变更:\n${changelog}"关键注意事项
- 确保构建节点有Git权限,能正常拉取远程仓库的代码;
- 多分支项目记得把命令里的固定分支名替换为分支变量
${BRANCH_NAME}; - 优先用
git fetch而非git pull,避免自动合并带来的代码冲突问题。
内容的提问来源于stack exchange,提问作者darknight1906
相关产品推荐
相关产品推荐

