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

时间:2020-03-04 07:04:38

标签: azure-pipelines jobs agent artifacts

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

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

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

管道项目提供了一种方法,可以在一个阶段的各个阶段之间共享文件 管道或不同管道之间。它们通常是输出 需要由另一项工作消耗或 部署。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

严格来说,不,UIYAML都无法实现这一目标。

正如您从文档中看到的那样:每个代理一次只能运行一个作业。从理论上讲,我们的设计逻辑是一个作业是独立运行个人,不同工作之间的交流需要,需要使用variableartifact等“中间件”。

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

示例1:

我在一个管道中有2个工作,一个是job01,另一个是job02

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

enter image description here

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

enter image description here

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


BUT ,有一种特殊情况,即管道正在使用自代理池运行,并且该池中仅存在一个代理。

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

示例2:

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

enter image description here

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

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

是的,有可能。您可以参考以实现此需求。但是,大多数情况下,我们建议您使用工件在作业之间传递文件。