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