首页/开发/CI/CD 与发布速查/GitLab CI 的 rules
工具链要点63 条

GitLab CI 的 rules

替代 only/except 的条件执行机制:按 if、changes、exists 从上到下逐条匹配、命中即采用,决定作业是否运行以及以何种方式运行。

CI/CD 与发布速查开发更新于 2026-10-12
条件if(CI 变量表达式)、changes(路径)、exists(文件)
动作when(on_success/never/manual/delayed)
默认未命中任何规则的作业不运行
取反用 when: never 提供反例分支

MR 与主分支两种运行

MR 与主分支两种运行
deploy:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: manual
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: on_success
    - when: never
规则自上而下逐条匹配、命中即采用:把更具体的条件放在前面,最后的兜底规则常写 when: never。

易错点

  • 同一作业混用 only/except 与 rules:语义冲突难以排查,统一迁移到 rules
  • 用变量插值的 if 表达式依赖变量存在:变量为空时规则判断与预期不符

数据来源与参考

  • GitLab Docs《Choose when to run jobs》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌