You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI/CD中用rules替换except的tags与pushes规则?

正确实现GitLab CI中替换except: [tags, pushes]的rules配置

你之前的rules配置错误有两个核心问题:

  1. tags和pushes不是GitLab CI的合法预定义变量,不能直接在if表达式中使用
  2. 原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:27:22