在Azure管道作业之间共享文件

问题描述 投票:1回答:1

在Azure管道的文档中,我读到:

每个代理一次只能运行一项作业。在中运行多个作业并行,您必须配置多个代理。

默认情况下,当您在自托管代理上运行管道时,子目录在两次连续运行之间被清理。作为一个结果,您可以进行增量构建和部署,前提是执行任务以利用这一点。您可以覆盖此使用作业上的工作空间设置的行为。

管道伪像提供了一种方法,可以在管道或不同管道之间。它们通常是输出需要由另一项工作消耗或部署。

作为初学者,在阅读本文后,我有些怀疑:

  1. 如果我在azure-pipelines.yaml中有2个作业(第二个作业在第一个作业之后运行),两个作业将在同一代理中运行吗?同一管道中的不同作业是否共享可以通过变量Pipeline.Workspace引用的相同工作空间? (很明显,在并行作业运行的情况下,它将需要多个代理)。
  2. 第一项工作一步一步生成了一些文件。是否可以在不使用构件的情况下使用第二个作业中的那些文件(通常使用构件,第一个作业发布构件,第二个作业下载构件)?

有人可以帮我消除这些疑问吗?

azure-pipelines jobs agent artifacts
1个回答
0
投票

如果我有2个作业(第二个作业在第一个作业之后运行)azure-pipelines.yaml,这两个作业将在同一代理中运行吗?

严格来说,不,UIYAML都无法实现。

正如您从文档中看到的:每个代理一次只能运行一个作业。理论上,我们的设计逻辑是一个作业是一个[[independent运行中的个体,即不同作业之间的通信需要使用“中间件”,例如variableartifact等。>

在同一管道中执行不同的作业共享相同的工作空间吗?可以通过变量Pipeline.Workspace引用?

Sample1:我在一个管道中有2个作业,一个是job01,另一个是job02

job01中,我在$(Pipeline.Workspace)名称project.json中创建了一个json文件:

enter image description here

在job02中,打印路径$(Pipeline.Workspace)下的文件列表:

enter image description here

您可以看到,第二个作业无法访问第一个作业的输出目录。


BUT

,有一种特殊情况,即管道正在使用自代理池运行,并且该池中仅存在一个代理。 目前,由于池中只有一个代理,它们可以在同一代理上运行。并且,如果您没有在作业定义中手动执行clean操作,则在这种特殊情况下,文件可以在作业之间共享,因为它们使用的是恒定的本地路径。

Sample2:

与上一个示例相同,但是这次将运行池更改为仅包含一个代理的池。

enter image description here

第一项工作一步一步生成了一些文件。是否有可能在不使用工件的情况下使用第二个作业中的那些文件

我想我上面的特殊情况描述和sample2已经回答了这个问题。

是的,有可能。您可以参考以实现此需求。但是,大多数情况下,我们建议您使用工件在作业之间传递文件。
© www.soinside.com 2019 - 2024. All rights reserved.