You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GitLab-CI:配置作业仅在满足所有条件时运行

这个问题问得很到位!GitLab CI 里默认的 only 关键字确实是逻辑——只要命中列表里任意一个条件,作业就会跑起来。但如果要实现「必须同时满足多个条件才运行」的需求,比如你说的「既是 Pipeline Schedule 触发,又在 master 分支」,咱们得用更灵活的 rules 关键字来配置,它支持直接组合布尔逻辑。

实现“与”逻辑的具体配置

以下是精准匹配「定时调度触发 + master 分支」双条件的作业配置:

job:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "master"'
      when: always

关键细节解释

  • rulesif 字段支持使用布尔运算符组合判断:&& 代表“与”,|| 代表“或”,完全满足复杂条件的需求
  • $CI_PIPELINE_SOURCE 是 GitLab 预定义的环境变量,当 Pipeline 由定时调度触发时,它的值固定为 "schedule"
  • $CI_COMMIT_BRANCH 则对应当前 Pipeline 所在的分支名称
  • when: always 表示只要条件满足就强制运行作业;如果不需要强制,也可以使用默认的 when: on_success(仅当前置作业成功时才运行)

为什么不用 only

之前的 only 关键字无法直接实现“与”逻辑,它的列表项默认是或关系。比如如果硬写下面的配置,实际效果是「是定时调度 或者 是 master 分支」,完全不符合你的需求:

# 错误示例!这是或逻辑,不是与逻辑
job:
  only:
    - schedules
    - master

所以 rules 是处理这类复杂条件场景的最优方案。

内容的提问来源于stack exchange,提问作者Sah

火山引擎 最新活动