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

Share files between azure pipeline Jobs

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

Each agent can run only one job at a time. To run multiple jobs in parallel you must configure multiple agents.

When you run a pipeline on a self-hosted agent, by default, none of the sub-directories are cleaned in between two consecutive runs. As a result, you can do incremental builds and deployments, provided that tasks are implemented to make use of that. You can override this behavior using the workspace setting on the job.

Pipeline artifacts provide a way to share files between stages in a pipeline or between different pipelines. They are typically the output of a build process that needs to be consumed by another job or be deployed.

作为一个初学者,看了这里,有一些疑惑:

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

有没有大神帮我解开这些疑惑?

If I have 2 jobs (2nd job runs after the 1st) in an azure-pipelines.yaml, will both the jobs run in the same agent?

严格来说,不,UIYAML都做不到。

正如您从文档中看到的那样:每个代理一次只能运行一个作业。我们的设计逻辑是,理论上,一个作业是一个独立运行宁个人,不同工作之间的交流需要使用"middleware",喜欢variable , artifact

Do different jobs in the same pipeline share the same workspace that can be referenced via the variable Pipeline.Workspace?

示例 1:

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

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

在job02中,打印路径$(Pipeline.Workspace):

下的文件列表

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


BUT,有一种特殊情况,即管道是 运行 自代理池,并且该池中只有一个代理。

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

样本 2:

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

The 1st job generates some files in one step. Is it possible to consume those files in 2nd job without using artifacts

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

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