Azure DevOps:分享来自运行自己作业的不同代理的输出

3
我有一个包含多个作业的构建,它们相互依赖。但是我也有多个代理,这给我带来了以下问题:
如果Agent1运行Job1,Agent2运行Job2,并且Job3需要从Job1和Job2获取输出,则我无法仅访问一个代理中的文件,因为它们位于不同的机器上。
如何使我的作业能够下载其他代理的输出?
我查阅了MS Docs上工作区的内容,但它并没有描述如何处理这种情况。
2个回答

3

为了进一步补充 JukkaK 的回答。

我在MS Docs上搜索了工作区,但它没有描述如何处理这种情况。

workspace 对应于代理程序中的某些内容。我不确定您使用的是哪种代理程序,但不同代理程序具有不同的操作系统实例,因此一个代理程序中相同路径下(工作区)的内容应该与另一个代理程序中的内容相当不同。

所以,工作区不适合您的需求。

如何使我的作业能够下载其他代理程序的输出?

您可以使用 Publish Artifacts+Download Artifacts 组合来完成所需操作。请参见以下内容:

enter image description here

您可以将 Publish build Artifacts 任务放置在代理程序 job1 和 job2 的最后一个任务位置。然后将 Download buil Artifacts 添加为代理程序 job3 的第一个任务。

并确保代理程序 job3 像这样依赖于代理程序 job1 和 job2:

enter image description here

通过这种方式,来自代理程序 job1 和 job2 的输出可以在代理程序 job3 的计算机上安装以供进一步使用。希望这有所帮助。


2
如果当前的多阶段流水线功能已经能够满足您的需求,那么在多阶段流水线中使用管道工件将是完美的匹配。

https://learn.microsoft.com/en-us/azure/devops/pipelines/artifacts/pipeline-artifacts?view=azure-devops&tabs=yaml

如果没有其他更好的方法,最好的办法就是通过向代理添加能力并向池分配添加需求(或创建自己的池)来将作业指定给同一代理。对于部署组代理,添加标记是将作业定向到特定代理的方便方法,但在构建代理上没有找到类似的功能。

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&tabs=yaml


这里的答案:https://stackoverflow.com/questions/46896763/how-to-change-repository-directory-mapping-on-the-private-agent-in-vsts/ 仍然足够有效,并说明了构建定义 / 流水线如何映射到某些代理的工作目录。因此,您在一个代理中的工作目录可能为10,在另一个代理中则为25-但是如果您始终将构建指向相同的代理,则我认为(但并不完全确定)不同的作业使用相同的工作目录。然而,管道工件会是更好的解决方案。 - JukkaK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接