【问题标题】:Control Job Order in Azure DevOps Release Pipeline在 Azure DevOps 发布管道中控制作业顺序
【发布时间】:2023-03-15 12:55:01
【问题描述】:

我有一个跨越多个部署组的复杂版本,我计划使用第 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 指定的等效功能。

注意

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

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

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

【问题讨论】:

  • 看起来像一个重复的问题stackoverflow.com/questions/29978758/…
  • @KlausHeinrich - 链接的问题是关于谷歌云引擎的,这个问题是关于天蓝色管道的。它是如何复制的?

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


【解决方案1】:

只是一个建议:您可以使用 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"

请确保不要错过在您的用户设置中打开此预览功能的开关。

【讨论】:

  • 阶段仅在构建管道中受支持。这个问题专门针对发布管道,目前不支持 YAML 配置。
【解决方案2】:

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

我进行了几次 Google 搜索,但这种行为似乎在任何地方都没有记录。所以,我不确定它是否得到保证。但它可能适用于我的情况。

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

【讨论】:

    【解决方案3】:

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

    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。

    我遇到了类似的问题,因为我的工作没有按定义的顺序执行。此外,我正在参考其他工作模板。我的印象是每个模板都必须在新工作中。后来,我设法将我的工作分解为任务。

    注意事项:

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

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2019-04-29
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多