GitLab CI如何确保后续任务仅在前序关联任务执行后运行?
问题
我配置了包含build和deploy两个阶段的GitLab CI流水线,build阶段的Build0、Build1任务各自带有运行规则,仅满足条件时才执行。现在希望deploy阶段的Deploy0、Deploy1任务仅在其关联的Build0、Build1任务已执行时才运行,且不想复用build阶段的规则以避免冲突,请问是否有可行方案?
原流水线配置如下:
stages: - build - deploy Build0: stage: build extends: - .Build0Rules - .Build0Make Build1: stage: build extends: - .Build1Rules - .Build1Make Deploy0: stage: deploy dependencies: - Build0 script: - bash gitlab-ci/deploy0.sh Deploy1: stage: deploy dependencies: - Build1 script: - bash gitlab-ci/deploy1.sh
可行方案
无需复用build阶段的规则,有两种可靠方案实现需求:
方案一:通过needs关联+任务状态规则
给每个Deploy任务添加needs关联对应的Build任务,同时用规则限定仅当关联Build任务成功时才执行:
Deploy0: stage: deploy needs: ["Build0"] rules: - if: '$CI_JOB_STATUS == "success"' when: on_success script: - bash gitlab-ci/deploy0.sh Deploy1: stage: deploy needs: ["Build1"] rules: - if: '$CI_JOB_STATUS == "success"' when: on_success script: - bash gitlab-ci/deploy1.sh
- 若对应的
Build任务未触发(不满足自身规则),Deploy任务会因needs指向的任务不存在而自动跳过 - 若
Build任务执行失败,Deploy任务也不会启动
方案二:变量标记触发
在每个Build任务中设置专属变量标记任务已执行,Deploy任务通过规则判断该变量是否存在:
Build0: stage: build extends: - .Build0Rules - .Build0Make variables: BUILD0_EXECUTED: "true" Build1: stage: build extends: - .Build1Rules - .Build1Make variables: BUILD1_EXECUTED: "true" Deploy0: stage: deploy dependencies: - Build0 rules: - if: '$BUILD0_EXECUTED == "true"' script: - bash gitlab-ci/deploy0.sh Deploy1: stage: deploy dependencies: - Build1 rules: - if: '$BUILD1_EXECUTED == "true"' script: - bash gitlab-ci/deploy1.sh
这种方式完全独立于build阶段的原有规则,通过变量标记明确控制Deploy任务的触发逻辑,不会产生规则冲突。
内容的提问来源于stack exchange,提问作者Yosef
相关产品推荐
相关产品推荐

