Azure devops 基于触发器的同一Azure管道的不同代理池或需求

Azure devops 基于触发器的同一Azure管道的不同代理池或需求,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我有一个用YAML编写的Azure管道,每当对master分支进行更改时,它都会从CI触发器运行。它也可以从拉取请求中手动触发,也可以由用户针对任何分支手动触发 由于使用了许多许可组件,因此从master生成需要在特定代理上运行。其他构建没有,事实上我更希望它们在其他代理上运行 因此,我的问题是,有没有办法根据触发构建的内容或构建正在构建的分支,在YAML管道中指定不同的代理/池?我希望这是在管道中永久配置的行为,而不是要求用户在他们希望在其他地方构建的每个分支上更新YAML 在文档中关于池/需

我有一个用YAML编写的Azure管道,每当对
master
分支进行更改时,它都会从CI触发器运行。它也可以从拉取请求中手动触发,也可以由用户针对任何分支手动触发

由于使用了许多许可组件,因此从
master
生成需要在特定代理上运行。其他构建没有,事实上我更希望它们在其他代理上运行

因此,我的问题是,有没有办法根据触发构建的内容或构建正在构建的分支,在YAML管道中指定不同的代理/池?我希望这是在管道中永久配置的行为,而不是要求用户在他们希望在其他地方构建的每个分支上更新YAML


在文档中关于池/需求/条件关键字的部分中,我看不到任何明显的内容。

池关键字指定管道的作业要使用哪个池。池规范还保存有关作业运行策略的信息。可以在管道、阶段或作业级别指定池。在层次结构的最低级别指定的池用于运行作业

有没有办法在YAML中指定不同的代理/池 基于触发生成的内容或生成的分支的管道 什么是建筑

对于这个问题,您可以为不同的分支创建不同的yaml文件,在相应的yaml文件中指定不同的代理池

您可以使用如下所示的选项切换到管道中不同分支的yaml文件:


pool关键字指定管道的作业要使用的池。池规范还保存有关作业运行策略的信息。可以在管道、阶段或作业级别指定池。在层次结构的最低级别指定的池用于运行作业

有没有办法在YAML中指定不同的代理/池 基于触发生成的内容或生成的分支的管道 什么是建筑

对于这个问题,您可以为不同的分支创建不同的yaml文件,在相应的yaml文件中指定不同的代理池

您可以使用如下所示的选项切换到管道中不同分支的yaml文件:


你能试试表达式吗?我在变量组上成功地使用了它,所以它可能在代理池上工作

- ${{ if eq(variables['build.SourceBranchName'], 'prod') }}:
  - pool: Host1
- ${{ if eq(variables['build.SourceBranchName'], 'staging') }}:
  - pool: Host2
- ${{ if not(and(eq(variables['build.SourceBranchName'], 'staging'), eq(variables['build.SourceBranchName'], 'prod'))) }}:
  - pool: Host3

这里是动态拉取变量组的原始解决方案:

您能试试表达式吗?我在变量组上成功地使用了它,所以它可能在代理池上工作

- ${{ if eq(variables['build.SourceBranchName'], 'prod') }}:
  - pool: Host1
- ${{ if eq(variables['build.SourceBranchName'], 'staging') }}:
  - pool: Host2
- ${{ if not(and(eq(variables['build.SourceBranchName'], 'staging'), eq(variables['build.SourceBranchName'], 'prod'))) }}:
  - pool: Host3

这里是动态拉取变量组的原始解决方法:

我通过将作业的
步骤
放入模板,然后在管道中创建一组具有不同
条件
条目的作业来解决这个问题,这样我们就可以根据这些条件设置
需求

骨架版本如下所示:

-阶段:构建
工作:
-作业:TopicBranchHandPullRequestBuild
条件:或(startsWith(变量['Build.SourceBranch'],'refs/heads/topic'),startsWith(变量['Build.SourceBranch'],'refs/pull'))
displayName:“生成主题分支或请求”
游泳池:
名称:唯一的池
要求:
-HasLicensedComponents-等于false
步骤:
-模板:build-template.yml
-工作:硕士和博士
条件:或(eq(变量['Build.SourceBranch'],'refs/heads/master'),startsWith(变量['Build.SourceBranch'],'refs/heads/release'))
displayName:“生成主版本或发布分支”
游泳池:
名称:唯一的池
要求:
-HasLicensedComponents-等于true
步骤:
-模板:build-template.yml

显然,这里给出的值只是示例,但除此之外,这就是我的工作。

我通过将作业的
步骤
放入模板中,然后在管道中创建一组具有不同
条件
项的作业来解决这个问题,这样我们就可以根据这些条件设置
需求

骨架版本如下所示:

-阶段:构建
工作:
-作业:TopicBranchHandPullRequestBuild
条件:或(startsWith(变量['Build.SourceBranch'],'refs/heads/topic'),startsWith(变量['Build.SourceBranch'],'refs/pull'))
displayName:“生成主题分支或请求”
游泳池:
名称:唯一的池
要求:
-HasLicensedComponents-等于false
步骤:
-模板:build-template.yml
-工作:硕士和博士
条件:或(eq(变量['Build.SourceBranch'],'refs/heads/master'),startsWith(变量['Build.SourceBranch'],'refs/heads/release'))
displayName:“生成主版本或发布分支”
游泳池:
名称:唯一的池
要求:
-HasLicensedComponents-等于true
步骤:
-模板:build-template.yml

显然,这里给出的值只是示例,但除此之外,这就是我的工作。

更清楚地说,我希望能够在管道中创建一个规则,当从
主分支运行时,该规则强制它在特定主机上运行,并允许它在除该主机以外的任何其他主机上运行。我希望这是自动的,而不是要求人们在每个分支中手动更新yaml。我将更新问题以反映这一点。您可以尝试通过两个作业来实现它。第一个作业可以通过powershell任务确定源分支。如果是
master
,则将变量
vm
设置为代理的名称。然后将第二个作业中的池设置为:
vmImage:$(vm)
@jamestelfe