GitLab配置:如何让Job B仅在Job A成功后运行
解决GitLab CI中Job仅依赖前置成功Job运行的问题
你遇到的问题是因为needs的简写形式仅指定了依赖关系,但不限制前置Job的运行状态。要让Job B仅在Job A成功时才运行,需要使用needs的完整对象配置语法,指定依赖Job的状态必须为成功。
修改后的.gitlab-ci.yml配置如下:
A: stage: build script: - "false" B: stage: build needs: - job: A status: success script: - "true"
原理说明
- 原来的
needs: ["A"]是简写方式,它仅要求依赖的Job完成(无论成功或失败),当前Job就会触发。 - 改用完整对象配置后,通过
status: success明确要求依赖的Job A必须执行成功,Job B才会被调度运行;如果Job A失败,Job B会被标记为跳过,不会执行。
兼容旧版本GitLab(低于14.2)
如果你的GitLab版本低于14.2(该版本才支持needs中的status参数),可以通过rules结合自定义变量实现:
A: stage: build script: - "false" after_script: - echo "CI_JOB_STATUS_A=$CI_JOB_STATUS" >> .env artifacts: reports: dotenv: .env B: stage: build needs: ["A"] rules: - if: $CI_JOB_STATUS_A == 'success' script: - "true"
这种方式通过artifacts:reports:dotenv将Job A的状态变量传递给后续Job,再用rules判断是否执行Job B。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

