【发布时间】:2021-12-01 05:56:00
【问题描述】:
如果源分支在与目标分支的提交中落后,则需要使管道失败
【问题讨论】:
如果源分支在与目标分支的提交中落后,则需要使管道失败
【问题讨论】:
自 issue 15310 和 GitLab 11.6(2018 年 12 月)以来,您只能运行管道,前提是它是 merge_request。
这允许您访问 $CI_MERGE_REQUEST_TARGET_BRANCH_SHA 预定义变量,然后您可以在 rules 中使用该变量(就像在 gitlab/ci/templates/Workflows/MergeRequest-Pipelines.gitlab-ci.yml 中定义的变量一样。
在您的情况下,特定于测试是否添加了新提交的规则:
test:
stage: test
script: ./test
only:
- merge_requests
rules:
- if: $CI_COMMIT_TAG
但是,if 规则不允许执行 script git command you would need 的类型:
git merge-base --is-ancestor <maybe-ancestor-commit> <descendant-commit>
git merge-base --is-ancestor $CI_MERGE_REQUEST_TARGET_BRANCH_SHA CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
如果该命令返回 0 (true),则作业应该处理,并且目标分支 HEAD 是合并请求分支的祖先,这意味着后者只会在前一个(目标)分支之上直接带来新的提交。
所以我仍然有一份工作只为merge_requests 运行,在script: 指令中执行git 命令,并调用您的实际脚本(您希望看到在合并请求中执行的脚本“以防万一如果源分支在与目标分支的提交中落后”)在一个 separate 阶段(由第一个看门人调用),使用needs: <first-stage>, as in here。
【讨论】: