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

GitLab CI Job矩阵如何实现一次性手动触发所有组合?

解决GitLab CI手动触发整个Job矩阵的问题

方法一:前置手动触发Job(推荐,灵活可控)

核心思路是只给一个前置Job加手动触发规则,让整个矩阵Job依赖这个前置Job,这样只会出现一个触发按钮,点击后整个矩阵一次性执行。

示例配置:

stages:
  - trigger
  - deploy

# 唯一的手动触发入口
trigger_deploy_matrix:
  stage: trigger
  script:
    - echo "触发全量服务器部署矩阵"
  when: manual
  allow_failure: false # 必须手动触发才能进入部署阶段

# 矩阵Job依赖前置触发Job,无手动规则
deploy_to_servers:
  stage: deploy
  needs: [trigger_deploy_matrix]
  script:
    - echo "开始部署到服务器: $SERVER"
    # 这里放你的实际部署命令,比如scp、ansible等
  parallel:
    matrix:
      - SERVER: ["prod-web-01", "prod-web-02", "prod-web-03"]

效果:流水线中只会出现trigger_deploy_matrix的手动触发按钮,点击后所有服务器的部署Job会同时启动,避免部分更新的一致性问题。

方法二:通过Workflow控制全流水线手动触发

如果你的整个流水线都需要手动触发(而非仅矩阵部分),可以用workflow规则限制只有手动触发的流水线才会运行,矩阵Job自然会一次性执行。

示例配置:

workflow:
  rules:
    # 仅允许Web界面手动触发的流水线运行
    - if: $CI_PIPELINE_SOURCE == 'web'
      when: always
    # 拒绝其他触发方式(比如push、schedule等)
    - when: never

stages:
  - deploy

deploy_to_servers:
  stage: deploy
  script:
    - echo "部署到服务器: $SERVER"
  parallel:
    matrix:
      - SERVER: ["prod-web-01", "prod-web-02", "prod-web-03"]

效果:只有在GitLab Web界面手动点击"运行流水线"时,整个矩阵才会一次性执行,不会生成单个Job的触发按钮。

额外注意事项

  • 如果需要给矩阵传递自定义变量,可以在手动触发前置Job时,通过GitLab的"手动触发变量"功能输入,矩阵Job会自动继承这些变量
  • 确保needs关联正确,矩阵Job不要单独设置when: manual,否则会回到单个按钮的问题
  • 可以给前置触发Job添加only/rules规则,限制只有特定分支或标签才能触发部署

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:32