GitLab流水线only指令如何实现多条件逻辑与触发
问题解答
你提供的方案不生效,原因如下:
only/except的refs配置项的多个规则为逻辑或关系,只要匹配其中一个就会进入后续变量校验- Git标签推送事件触发CI时,预定义变量
$CI_COMMIT_BRANCH会为空(CI上下文识别的是标签引用而非分支引用),因此$CI_COMMIT_BRANCH == "master"的判断永远不成立,最终该任务完全不会被触发。
你的需求可以实现,更规范的实现方案
GitLab官方目前更推荐使用rules语法替代处于维护状态的only/except,逻辑可读性和灵活度更高。你的需求是仅当新创建的标签指向的提交属于master分支时运行任务,通用配置示例如下:
stages: - greet greet_job: stage: greet rules: # 仅标签推送事件才会匹配该规则,其他事件直接跳过该任务 - if: $CI_COMMIT_TAG # 前置校验:验证当前标签对应的提交是否属于master分支 before_script: # 拉取master分支的提交记录,depth可根据项目提交情况调整为更大值 - git fetch origin master --depth=100 - | if ! git branch -r --contains $CI_COMMIT_SHA | grep -q "origin/master"; then echo "当前标签不属于master分支,跳过任务执行" exit 0 fi script: - echo "Hello! 该任务仅在master分支的新标签推送时运行"
内容的提问来源于stack exchange,提问作者EM90
相关产品推荐
相关产品推荐

