在Azure管道的文档中,我读到:
每个代理一次只能运行一项作业。在中运行多个作业并行,您必须配置多个代理。
默认情况下,当您在自托管代理上运行管道时,子目录在两次连续运行之间被清理。作为一个结果,您可以进行增量构建和部署,前提是执行任务以利用这一点。您可以覆盖此使用作业上的工作空间设置的行为。
管道伪像提供了一种方法,可以在管道或不同管道之间。它们通常是输出需要由另一项工作消耗或部署。
作为初学者,在阅读本文后,我有些怀疑:
Pipeline.Workspace
引用的相同工作空间? (很明显,在并行作业运行的情况下,它将需要多个代理)。有人可以帮我消除这些疑问吗?
如果我有2个作业(第二个作业在第一个作业之后运行)azure-pipelines.yaml,这两个作业将在同一代理中运行吗?
严格来说,不,UI
和YAML
都无法实现。
正如您从文档中看到的:每个代理一次只能运行一个作业。理论上,我们的设计逻辑是一个作业是一个[[independent运行中的个体,即不同作业之间的通信需要使用“中间件”,例如variable
,artifact
等。>在同一管道中执行不同的作业共享相同的工作空间吗?可以通过变量Pipeline.Workspace引用?
Sample1:我在一个管道中有2个作业,一个是job01
,另一个是job02
。
在job01
中,我在$(Pipeline.Workspace)
名称project.json
中创建了一个json文件:
在job02中,打印路径$(Pipeline.Workspace)
下的文件列表:
您可以看到,第二个作业无法访问第一个作业的输出目录。
BUT
,有一种特殊情况,即管道正在使用自代理池运行,并且该池中仅存在一个代理。 目前,由于池中只有一个代理,它们可以在同一代理上运行。并且,如果您没有在作业定义中手动执行clean
操作,则在这种特殊情况下,文件可以在作业之间共享,因为它们使用的是恒定的本地路径。Sample2:
与上一个示例相同,但是这次将运行池更改为仅包含一个代理的池。
第一项工作一步一步生成了一些文件。是否有可能在不使用工件的情况下使用第二个作业中的那些文件是的,有可能。您可以参考以实现此需求。但是,大多数情况下,我们建议您使用工件在作业之间传递文件。我想我上面的特殊情况描述和
sample2
已经回答了这个问题。