如何在GitLab CI/CD中用rules替换except的tags与pushes规则?
你之前的rules配置错误有两个核心问题:
tags和pushes不是GitLab CI的合法预定义变量,不能直接在if表达式中使用- 原
except的逻辑是只要满足其中一个条件就排除,需要用逻辑或||,而不是逻辑与&&
正确配置方案(两种写法任选其一)
写法一:拆分多个条件
rules: # 排除标签触发的流水线 - if: '$CI_COMMIT_TAG != null' when: never # 排除代码推送触发的流水线 - if: '$CI_PIPELINE_SOURCE == "push"' when: never # 其他所有情况都执行该任务 - when: always
写法二:合并为单个条件
rules: # 只要是标签触发或代码推送触发,就跳过任务 - if: '$CI_COMMIT_TAG != null || $CI_PIPELINE_SOURCE == "push"' when: never # 其他情况执行任务 - when: always
关键变量说明
$CI_COMMIT_TAG:当流水线由标签推送触发时,该变量会被赋值,否则为null$CI_PIPELINE_SOURCE:标识流水线的触发来源,push代表代码分支推送触发
内容的提问来源于stack exchange,提问作者Ashish Pratap
相关产品推荐
相关产品推荐

