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

如何在Gitlab CI中单次手动触发多个并行执行的CI作业

最优实现方案

你现有配置存在一处名称不匹配问题:入口作业名称为start-release,但后续两个部署作业的needs字段填的是start-release-staging,名称不一致会导致作业依赖失败,这也是可能你之前运行异常的原因之一。
以下是两种可行的优化方案:

方案1:优化入口作业,耗时压缩至1秒内

你之前的空作业耗时过长,通常是默认镜像过大、拉取慢、不必要的代码克隆导致的,优化后几乎无额外耗时:

start-release:
  # 使用内置的.pre阶段,无需自定义前置阶段
  stage: .pre
  # 用极小的busybox镜像,仅几百KB
  image: busybox:latest
  variables:
    # 关闭代码克隆,完全不需要拉取代码
    GIT_STRATEGY: none
  rules:
    - when: manual
      # 必须手动触发成功才会执行后续作业
      allow_failure: false
  script:
    - echo "Starting staging deployment"

release-api-staging:
  stage: build-and-deploy-to-staging
  script:
    - "ENV_NAME=staging STEP=release_api release/deploy.sh"
  needs: ["start-release"]

release-frontend-staging:
  stage: build-and-deploy-to-staging
  script:
    - "ENV_NAME=staging STEP=release_frontend release/deploy.sh"
  needs: ["start-release"]

该方案优势:入口作业语义清晰,两个部署作业完全对称,不存在主次关系。

方案2:零额外开销,完全去掉入口作业

利用GitLab CI的依赖触发特性,直接将其中一个部署作业设为手动入口,另一个作业依赖它自动运行,完全没有额外作业耗时:

# 设为手动触发入口
release-api-staging:
  stage: build-and-deploy-to-staging
  script:
    - "ENV_NAME=staging STEP=release_api release/deploy.sh"
  rules:
    - when: manual
      allow_failure: false

# 依赖入口作业,触发后自动并行运行
release-frontend-staging:
  stage: build-and-deploy-to-staging
  script:
    - "ENV_NAME=staging STEP=release_frontend release/deploy.sh"
  needs: ["release-api-staging"]

该方案优势:完全没有额外作业开销,UI上仅显示1个手动按钮,不会出现误操作问题。

内容的提问来源于stack exchange,提问作者Noé Malzieu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:27:04