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。
正确配置调整
只需要做以下两步:
- 移除
deploy-java-web-app中的dependencies: [apply],因为阶段顺序已经保证了它会在apply之后执行。 - 确保
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
相关产品推荐
相关产品推荐

