如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段

Posted

技术标签:

【中文标题】如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段【英文标题】:How to use a single agent for multiple jobs/stages in azure devops YAML pipeline 【发布时间】:2020-10-26 17:53:18 【问题描述】:

我正在研究 Azure DevOps YAML 管道,我不确定我们是否可以在整个管道中使用单个代理。 我有多个工作/阶段 - 构建、部署、部署后,并希望将其分配给单个代理,因为它正在使用相同的工件。 有没有办法通过管道分配单个代理。

提前致谢。

【问题讨论】:

您是说在给定阶段的所有作业中专门为每个单独阶段、同一个池或同一个代理使用相同的代理? 是的,我说的是对多个阶段/作业使用相同的代理 @Abhishek Anvekar 没有获得您的最新信息,解决方法对您有帮助吗?或者,如果您有任何疑虑,请随时在此处分享。 【参考方案1】:

是的,您可以在 YAML 上定义特定的代理。

例如: 水池: 名称:代理池名称 需要: - agent.name -等于 AgentName

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

【讨论】:

您好,感谢您的回复,我的问题有点不同,我不希望代理每次都为新工作进行结帐操作。就像我的第一份工作会生成工件一样,几秒钟内应该会自动将工件放在代理文件夹中。 这是 YML 文件:触发器:-主池:vmImage:Windows-2019 阶段:-阶段:构建 displayName:“构建”作业:-作业:构建 displayName:构建步骤:-任务: PowerShell@2 输入:targetType:'inline' 脚本:Write-Host “这是构建作业”-作业:部署 displayName:部署步骤:-任务:CmdLine@2 输入:脚本:echo 这是部署作业【参考方案2】:

我不希望代理每次都为新工作做结帐操作

使用 checkout 关键字来配置或禁止此行为。

steps:
- checkout: none

详情可以参考这位官方document。

【讨论】:

【参考方案3】:

如果您不能像 @Savio Moreira 建议的那样使用特定代理,我发现的唯一选择是重复一些步骤。

在我的情况下,有一个类似的管道,有 2 个阶段:

构建(验证 PR) Visual Studio 构建 Visual Studio 测试 VS 测试 发布(合并到主文件后发布工件) Visual Studio 构建 复制文件 发布构建工件

只有在使用 YAML 阶段和启用分支策略中的条件创建 PR 时才会触发构建部分。 Publish部分只有在合并到master时才会触发。

有些步骤需要重复但执行是唯一的,这有点烦人,并且使用相同的管道我可以在合并之前执行验证,然后在代码进入 master 后创建工件。

结帐选项没有帮助,因为在我的情况下,每个阶段都在完全不同的容器上执行。

【讨论】:

以上是关于如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure DevOps yaml 管道中设置 ENVIRONMENT 状态

合并 PR 后如何限制 Azure DevOps YAML 管道中的关联工作项?

如何排除对管道 yaml 文件的更改以触发构建 i azure devops?

Azure DevOps、YAML 发布管道? [关闭]

请参阅使用 YAML 管道在 Azure DevOps 中构建工件

Azure DevOps 中的多个 YAML 构建管道