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

如何默认将GitLab CI所有任务设为手动触发?无需逐个配置规则

解决方案:无需逐个添加when: manual实现任务级手动触发

针对你的需求——既保留任务的特定触发规则,又能手动触发任意未运行任务,同时解决规则引用冲突的问题,可以按以下方式配置:

1. 定义共享手动触发规则

先创建一个可复用的规则片段,统一管理手动触发逻辑,避免重复编写:

.shared_rules:
  # 允许通过Web界面或API手动触发任务
  manual_trigger:
    - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "api"
      when: manual
      allow_failure: false # 可选:需手动任务必须执行则设为false,否则设为true

2. 单个任务的规则配置

每个任务先写自身的自动触发条件(比如changes匹配时自动运行),再追加共享的手动触发规则。这样任务会优先匹配自动条件,不满足时可手动触发:

job1:
  rules:
    # 自动触发条件:somedir目录下文件变更时自动运行
    - changes:
        - somedir/**/*
      when: always
    # 追加手动触发规则
    - !reference [.shared_rules, manual_trigger]

job2:
  rules:
    # 自动触发条件:txt文件变更时自动运行
    - changes:
        - *.txt
      when: always
    # 追加手动触发规则
    - !reference [.shared_rules, manual_trigger]

3. 解决多规则引用冲突

对于需要同时满足多个任务触发条件的job3,不要直接引用其他任务的完整规则(其他任务规则末尾的when: manual会中断匹配),而是合并它们的自动触发条件,再追加手动触发规则:

job3:
  rules:
    # 合并job1和job2的自动触发条件:满足任一条件即自动运行
    - changes:
        - somedir/**/*
      when: always
    - changes:
        - *.txt
      when: always
    # 追加手动触发规则
    - !reference [.shared_rules, manual_trigger]

4. 结合现有Workflow配置优化

你当前的workflow配置已经禁用了push事件的自动流水线,确保只有标签、默认分支、受保护分支的提交,以及定时/合并请求流水线会自动触发。如果需要进一步限制任务的自动触发范围,还可以在共享规则或任务规则中添加额外的if条件(比如if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH)。

最终效果:

  • 任务满足自身特定条件时自动运行
  • 未满足自动条件时,可通过GitLab Web界面或API手动触发任意单个任务
  • 彻底避免规则引用时的匹配中断问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:42:04