在 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,也就是一组任务。
  • 步骤中的任务是逐个执行的,因此您不必明确提供顺序。