如何编写流水线脚本检查工作分支是否包含master的全部最新提交?
流水线master分支更新校验修复方案
问题根因
你之前的脚本未达到预期,核心问题如下:
- 未提前执行
git fetch origin拉取远程最新状态,本地缓存的origin/master不是最新版本,校验直接失效 git pull origin/master --dry-run参数写法错误,远程仓库名和分支名应该分开写为git pull origin master --dry-run- 用
wc -l统计命令输出行数判断是否有更新不可靠,即使无更新git命令也可能输出提示行,很容易出现误判 - 判断逻辑用了括号
()包裹,相关逻辑会在子shell中执行,子shell内的exit不会终止当前主脚本进程,拦截逻辑等于没生效
可用校验脚本
#!/bin/bash # 仅拉取远程master的最新状态,不会修改本地工作区代码 git fetch origin master # 统计当前分支落后远程master的提交数量 BEHIND_COUNT=$(git rev-list --count HEAD..origin/master) if [ "$BEHIND_COUNT" -gt 0 ]; then echo "错误:当前分支落后远程master ${BEHIND_COUNT} 个提交,请先执行 git pull origin master 合并最新改动后再构建" exit 1 fi echo "校验通过:当前分支已包含远程master所有最新提交"
脚本说明
- 如果你的流水线是针对固定分支做校验(比如你示例里的release_branch_test_case),把脚本里的
HEAD替换为对应的分支名即可 - 该判断逻辑直接统计提交差异,没有多余输出干扰,判断准确率100%
exit 1直接在主进程执行,会直接终止流水线构建阶段,符合拦截需求
内容的提问来源于stack exchange,提问作者keeplearning
相关产品推荐
相关产品推荐

