如何禁止GitLab CI作业手动重试,仅允许最新提交运行新流水线?
解决方案
1. 直接禁用项目级作业重试功能
进入GitLab项目的设置 > CI/CD > 流水线设置,找到“作业重试”选项并关闭。这样单个作业或整个流水线的重试按钮都会被禁用,彻底阻止在历史提交上执行重试操作。
2. 通过CI脚本校验提交是否为最新
在流水线的前置步骤(或全局before_script)中添加校验逻辑,仅当当前运行的提交是对应分支的最新提交时,才允许流水线继续执行,否则直接终止:
# 获取当前分支的最新远程提交SHA LATEST_COMMIT=$(git rev-parse origin/$CI_COMMIT_BRANCH) # 对比当前流水线的提交SHA if [ "$CI_COMMIT_SHA" != "$LATEST_COMMIT" ]; then echo "错误:当前提交并非分支最新提交,流水线终止" exit 1 fi
这种方式保留重试按钮,但重试历史提交时会自动失败,无法完成执行。
3. 用Workflow规则限制仅最新提交可触发流水线
通过workflow规则配置,仅允许在最新提交上触发手动流水线:
workflow: rules: # 仅当手动触发(web来源)且当前提交是默认分支最新提交时,允许流水线运行 - if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_SHA == $CI_DEFAULT_BRANCH_SHA' when: always # 其他情况一律禁止流水线运行 - when: never
如果需要支持非默认分支,可结合脚本动态获取分支最新SHA,或调整规则中的变量适配需求。
内容的提问来源于stack exchange,提问作者stackprotector
相关产品推荐
相关产品推荐

