下面的示例使用needs
在second_job之后启动first_job。然而,second_job不再能够访问pre_job的伪制品。显然,我们可以添加needs: [pre_job, first_job]
,但是在.pre
阶段有多个作业,我们希望下载它们的所有工件(而不知道哪些作业是准确运行的)。
是否存在needs
只影响作业顺序而不影响工件下载的设置?
pre_job:
stage: .pre
script:
- touch pre.txt
artifacts:
paths:
- pre.txt
first_job:
stage: check
script:
- touch first.txt
artifacts:
paths:
- first.txt
second_job:
stage: check
script:
- cat pre.txt
needs:
- first_job
发布于 2022-11-17 15:31:42
这并不好看,但如果您知道可以使用需求:可选关键字在前期运行的每一个可能的作业,就可以做到这一点。您需要将可能需要工件的每个作业作为可选依赖项列出。
示例:
second_job:
stage: check
script:
- cat pre.txt
needs:
- job: first_job
artifacts: true
- job: pre_job
artifacts: true
optional: true
- job: other_pre_job
artifacts: true
optional: true
- job: another_pre_job
artifacts: true
optional: true
... <etc> ...
如果您能够定义可能需要工件的每个可能的作业,那么这将允许second_job
有条件地依赖于在需要中定义的每个作业,因为optional
关键字允许作业不存在。
在上面的示例中,如果用作业first_job
和other_pre_job
触发管道,那么second_job
将等待前两个作业完成并从它们接收工件。
发布于 2022-11-16 03:52:00
嗯..。看来这根本不可能
当作业使用需要时,默认情况下它不再从以前的阶段下载所有工件,因为有需求的作业可以在早期阶段完成之前启动。使用configuration,您只能从需求配置中列出的作业下载工件。
来自https://docs.gitlab.com/ee/ci/yaml/index.html#needsartifacts
https://stackoverflow.com/questions/74459320
复制