在 Azure DevOps 发布管道中控制作业顺序
Control Job Order in Azure DevOps Release Pipeline
我有一个跨多个部署组的复杂版本,我计划使用第 3 方 vsts-git-release-tag 扩展来标记版本。理想情况下,整个发布(所有作业)将在标记存储库之前首先成功。
所以我正在尝试找出实现该目标的最佳方法。如果这是构建管道而不是部署管道,很明显我可以按如下方式安排它们 using dependsOn
。
jobs:
- job: Deployment_Group_1
steps:
- script: echo hello from Deployment Group 1
- job: Deployment_Group_2
steps:
- script: echo hello from Deployment Group 2
- job: Tag_Repo
steps:
- script: echo this is where I would tag the Repo
dependsOn:
- Deployment_Group_1
- Deployment_Group_2
但是,在发布管道中似乎没有指定的等效功能(至少目前没有)in this document。
Note
Running multiple jobs in parallel is supported only in build pipelines at present. It is not yet supported in release pipelines.
虽然它没有具体提到 dependsOn
功能,但似乎没有办法在发布管道中使用它(如果我错了请纠正我)。
我意识到我可能会创建一个包含单个作业和任务的单独阶段来创建 Git 标记,但这感觉像是一个 hack。 在所有其他发布作业完成后,是否有更好的方法 运行 特定发布作业?
在创建测试项目并将多个作业添加到它的发布管道后,然后 运行连续多次使用它,作业的顺序似乎是确定的。也就是说,它们似乎总是 运行 按照它们在门户中实际出现的顺序。
我进行了几次 Google 搜索,但似乎没有任何地方记录这种行为。所以,我不确定它是否有保证。但它可能适合我的情况。
如果有任何官方来源确认工作订单得到保证,请发表评论。
只是一个建议:您可以使用 multistage pipelines,然后在 Azure Devops Ui.
中也非常清楚地表示出来
阶段有作业,作业有步骤:
示例管道 yml:
trigger:
batch: true
branches:
include:
- "*"
resources:
containers:
- container: ubuntu
image: ubuntu:18.04
stages:
- stage: STAGE1
jobs:
- job: PrintInfoStage1Job1
container: ubuntu
steps:
- script: |
echo "THIS IS STAGE 1, JOB 1"
displayName: "JOB 1"
- job: PrintInfoStage1Job2
dependsOn: PrintInfoStage1Job1
container: ubuntu
steps:
- script: |
echo "THIS IS STAGE 1, JOB 2"
displayName: "JOB 2"
- stage: STAGE2
dependsOn: STAGE1
jobs:
- job: PrintInfoStage2Job1
dependsOn: []
container: ubuntu
steps:
- script: |
echo "THIS IS THE STAGE 2, JOB 1"
displayName: "JOB 1"
- job: PrintInfoStage2Job2
container: ubuntu
dependsOn: []
steps:
- script: |
echo "THIS IS THE STAGE 2, JOB 2"
displayName: "JOB 2"
请确保不要错过在您的用户设置中打开此预览功能。
查看已指定的示例,您不需要为每个步骤创建不同的作业。每个任务都可以添加到一个作业中。
jobs:
- job:
steps:
- script: echo hello from Deployment Group 1
- script: echo hello from Deployment Group 2
- script: echo this is where I would tag the Repo
如果需要,您也可以在代码中删除 Jobs > Job。
我遇到了类似的问题,我的作业没有按定义的顺序执行。此外,我参考了其他模板 jobs.I 的印象是每个模板都必须在新工作中。后来,我设法将我的工作分解为任务。
注意事项:
- 作业在单独的代理上运行。如果它只是您要执行的一系列脚本,您可能不想要。 Job本质上包含了steps,也就是一组任务。
- 步骤中的任务是逐个执行的,因此您不必明确提供顺序。
我有一个跨多个部署组的复杂版本,我计划使用第 3 方 vsts-git-release-tag 扩展来标记版本。理想情况下,整个发布(所有作业)将在标记存储库之前首先成功。
所以我正在尝试找出实现该目标的最佳方法。如果这是构建管道而不是部署管道,很明显我可以按如下方式安排它们 using dependsOn
。
jobs:
- job: Deployment_Group_1
steps:
- script: echo hello from Deployment Group 1
- job: Deployment_Group_2
steps:
- script: echo hello from Deployment Group 2
- job: Tag_Repo
steps:
- script: echo this is where I would tag the Repo
dependsOn:
- Deployment_Group_1
- Deployment_Group_2
但是,在发布管道中似乎没有指定的等效功能(至少目前没有)in this document。
Note
Running multiple jobs in parallel is supported only in build pipelines at present. It is not yet supported in release pipelines.
虽然它没有具体提到 dependsOn
功能,但似乎没有办法在发布管道中使用它(如果我错了请纠正我)。
我意识到我可能会创建一个包含单个作业和任务的单独阶段来创建 Git 标记,但这感觉像是一个 hack。 在所有其他发布作业完成后,是否有更好的方法 运行 特定发布作业?
在创建测试项目并将多个作业添加到它的发布管道后,然后 运行连续多次使用它,作业的顺序似乎是确定的。也就是说,它们似乎总是 运行 按照它们在门户中实际出现的顺序。
我进行了几次 Google 搜索,但似乎没有任何地方记录这种行为。所以,我不确定它是否有保证。但它可能适合我的情况。
如果有任何官方来源确认工作订单得到保证,请发表评论。
只是一个建议:您可以使用 multistage pipelines,然后在 Azure Devops Ui.
中也非常清楚地表示出来阶段有作业,作业有步骤:
示例管道 yml:
trigger:
batch: true
branches:
include:
- "*"
resources:
containers:
- container: ubuntu
image: ubuntu:18.04
stages:
- stage: STAGE1
jobs:
- job: PrintInfoStage1Job1
container: ubuntu
steps:
- script: |
echo "THIS IS STAGE 1, JOB 1"
displayName: "JOB 1"
- job: PrintInfoStage1Job2
dependsOn: PrintInfoStage1Job1
container: ubuntu
steps:
- script: |
echo "THIS IS STAGE 1, JOB 2"
displayName: "JOB 2"
- stage: STAGE2
dependsOn: STAGE1
jobs:
- job: PrintInfoStage2Job1
dependsOn: []
container: ubuntu
steps:
- script: |
echo "THIS IS THE STAGE 2, JOB 1"
displayName: "JOB 1"
- job: PrintInfoStage2Job2
container: ubuntu
dependsOn: []
steps:
- script: |
echo "THIS IS THE STAGE 2, JOB 2"
displayName: "JOB 2"
请确保不要错过在您的用户设置中打开此预览功能。
查看已指定的示例,您不需要为每个步骤创建不同的作业。每个任务都可以添加到一个作业中。
jobs:
- job:
steps:
- script: echo hello from Deployment Group 1
- script: echo hello from Deployment Group 2
- script: echo this is where I would tag the Repo
如果需要,您也可以在代码中删除 Jobs > Job。
我遇到了类似的问题,我的作业没有按定义的顺序执行。此外,我参考了其他模板 jobs.I 的印象是每个模板都必须在新工作中。后来,我设法将我的工作分解为任务。
注意事项:
- 作业在单独的代理上运行。如果它只是您要执行的一系列脚本,您可能不想要。 Job本质上包含了steps,也就是一组任务。
- 步骤中的任务是逐个执行的,因此您不必明确提供顺序。