如何在GitLab流水线中绕过needs限制下载所有制品
解决方案
要实现second_job在first_job之后执行,同时自动下载.pre阶段所有任务的制品,可以通过以下两种方式配置:
方式一:结合needs与dependencies(推荐)
利用needs控制执行顺序,用dependencies指定下载.pre阶段所有任务的制品,不管该阶段有多少个任务,都会自动拉取成功任务的制品:
pre_job: stage: .pre script: - touch pre.txt artifacts: paths: - pre.txt # 示例:.pre阶段的其他任务 another_pre_job: stage: .pre script: - touch another_pre.txt artifacts: paths: - another_pre.txt first_job: stage: check script: - touch first.txt artifacts: paths: - first.txt second_job: stage: check script: - cat pre.txt - cat another_pre.txt needs: - first_job # 强制等待first_job完成后再启动 dependencies: - .pre # 自动下载.pre阶段所有任务的制品
方式二:needs中禁用目标任务的制品下载
如果你的GitLab版本不支持dependencies指定阶段(低于13.10),可以在needs里给first_job加上artifacts: false,这样既保证执行顺序,又不会改变默认的制品下载逻辑(即自动拉取所有前置阶段的制品):
second_job: stage: check script: - cat pre.txt needs: - job: first_job artifacts: false # 仅控制顺序,不下载first_job的制品
核心逻辑
needs的本质是控制任务执行的依赖顺序,但默认会改变制品下载规则——只拉取needs指定任务的制品。- 通过
dependencies指定阶段,或者在needs中禁用目标任务的制品下载,就能让needs仅发挥顺序控制作用,同时保留前置阶段的制品自动下载行为。
内容的提问来源于stack exchange,提问作者gebbissimo
相关产品推荐
相关产品推荐

