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
相关产品推荐
相关产品推荐

