在Azure DevOps发布管道中控制作业订单

时间:2019-03-20 12:27:42

标签: azure azure-devops azure-pipelines azure-pipelines-release-task

我有一个跨多个部署组的复杂发行版,并且我计划使用第三方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中指定的发布管道中(至少目前)没有等效的功能。

  

注意

     

目前仅在构建管道中支持并行运行多个作业。在发布管道中尚不支持。

尽管没有特别提到dependsOn功能,但似乎没有一种在发布管道中使用它的方法(如果我错了,请纠正我)。

我意识到我可能可以创建一个包含一个作业和任务的单独阶段来创建Git标签,但这感觉就像是一个hack。 在所有其他发布作业完成之后,是否有更好的方法来运行特定的发布作业?

3 个答案:

答案 0 :(得分:1)

查看已指定的示例,您无需为每个步骤创建不同的作业。每个任务都可以添加到一个作业中。

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。

我面临着一个类似的问题,我的工作没有按照预定的顺序进行。另外,我还参考了其他工作模板,给我的印象是每个模板都必须放在一个新工作中。后来,我设法将工作分解成任务。

注意事项:

  • 作业在一个代理上运行。如果只是要执行的脚本序列,则可能不需要。作业本质上包含步骤,这是一组任务。
  • 步骤中的任务是一个接一个地执行的,因此您不必明确地提供订单。

答案 1 :(得分:0)

创建测试项目并将其添加到发布管道的多个作业中,然后连续运行几次后,看来作业的顺序是确定的。也就是说,它们似乎总是按照实际出现在门户中的顺序运行。

我进行了几次Google搜索,但似乎没有任何地方记录这种行为。因此,我不确定是否可以保证。但这对我的情况可能会起作用。

如果有任何官方消息确认该工作单得到保证,请发表评论。

答案 2 :(得分:0)

只是一个建议:您可以使用m ultistage pipelines,然后在Azure Devops Ui中也可以很清楚地表示出来。

阶段有工作,工作有步骤: enter image description here

示例管道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"

请确保不要错过在用户设置中启用此预览功能的机会。