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

GitLab CI中如何在手动触发的apply阶段后触发下游流水线?

解决方案:确保deploy阶段在apply执行后触发

你的需求完全可以实现,问题出在对dependencies关键字的误解——它只负责控制任务间的制品(artifacts)传递,不影响阶段的执行顺序。GitLab CI的阶段执行顺序完全由stages数组定义,前一个阶段的所有任务完成后才会推进到下一个阶段。

问题根源

你当前的配置中,deploy阶段确实在apply阶段之后,但因为apply任务没有产出任何制品,dependencies: [apply]没有实际作用,反而可能让你误以为它能控制执行顺序。而你观察到deploy-java-web-app在plan后就触发,大概率是因为apply任务被设置了allow_failure: true(可能你没在配置中显式写出,或GitLab有默认配置),导致流水线跳过apply阶段直接进入deploy。

正确配置调整

只需要做以下两步:

  1. 移除deploy-java-web-app中的dependencies: [apply],因为阶段顺序已经保证了它会在apply之后执行。
  2. 确保apply任务没有设置allow_failure: true(你的现有配置已经满足),这样流水线会停在apply阶段,直到你手动触发并完成该任务,才会进入deploy阶段触发下游流水线。

调整后的完整配置:

stages:
  - validate
  - plan
  - apply
  - deploy
  - destroy

validate:
  stage: validate
  script:
    - terraform validate

plan:
  stage: plan
  script:
    - terraform plan -out="planfile"
  dependencies:
    - validate
  artifacts:
    paths:
      - planfile
    untracked: false
    when: on_success
    expire_in: "30 days"

apply:
  stage: apply
  script:
    - terraform apply -input=false "planfile"
  dependencies:
    - plan
  when: manual
  # 确保没有allow_failure: true,否则流水线会跳过此阶段

deploy-java-web-app:
  stage: deploy
  trigger:
    include: java-web-app/.gitlab-ci.yml
    # 如果需要等待下游流水线完成再标记此任务为成功,可添加strategy: depend
    # strategy: depend

destroy:
  stage: destroy
  script:
    - terraform destroy --auto-approve
  when: manual

额外说明

如果需要deploy-java-web-app等待下游流水线完成后,再继续执行后续阶段(比如destroy),可以给trigger添加strategy: depend,这样当前任务会等待下游流水线结束后才标记状态。

内容的提问来源于stack exchange,提问作者Foxy Fox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:37