GitLab-CI:配置作业仅在满足所有条件时运行
这个问题问得很到位!GitLab CI 里默认的 only 关键字确实是或逻辑——只要命中列表里任意一个条件,作业就会跑起来。但如果要实现「必须同时满足多个条件才运行」的需求,比如你说的「既是 Pipeline Schedule 触发,又在 master 分支」,咱们得用更灵活的 rules 关键字来配置,它支持直接组合布尔逻辑。
实现“与”逻辑的具体配置
以下是精准匹配「定时调度触发 + master 分支」双条件的作业配置:
job: rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "master"' when: always
关键细节解释
rules的if字段支持使用布尔运算符组合判断:&&代表“与”,||代表“或”,完全满足复杂条件的需求$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




