在评估条件之前需要 Azure 管道批准

Azure pipelines approval is required before the condition is evaluated

我有一个 CI/CD 管道用于包含多个项目的解决方案。我检查更改并只构建已更改的项目,而不是构建所有项目。 我在每个项目的构建阶段使用条件来完成此操作。这是相关部分:

  - stage: S_BuildChannelUpdate
    dependsOn: 'PreSteps'
    jobs:
    - job: 'BuildChannelUpdate'
      variables:
        BuildCondition: $[ stageDependencies.PreSteps.Check_changes.outputs['pwsh_script.BuildChannelUpdate'] ]
      condition: eq(variables['BuildCondition'], True)

如我所料,构建步骤仅在满足条件时执行。到目前为止,一切都很好。 对于部署部分,我只想在有新东西要部署时才这样做。 IE。项目已更改,构建成功。同样,这里是相关部分:

  - stage: 'S_ReleaseChannelUpdate'
    dependsOn:
      - PreSteps
      - S_BuildChannelUpdate
    jobs:
    - deployment: 'ReleaseChannelUpdate'
      variables:
        ReleaseCondition: $[ stageDependencies.PreSteps.Check_changes.outputs['pwsh_script.BuildChannelUpdate'] ]
      condition: eq(variables['ReleaseCondition'], True)
      environment: 'dev'
      strategy:
        runOnce:
          deploy:
            steps:

这里的问题是我想为发布设置批准,而管道要求我在评估条件之前批准它。我只想在 ReleaseCondition 为 True 时获得批准请求。 我还期待,既然S_BuildChannelUpdate阶段被跳过了(不满足条件),那么S_ReleaseChannelUpdate阶段会考虑未满足其依赖项。

有什么建议吗?

The problem here is that I want to set an approval for the releases and the pipeline asks me to approve it before evaluating the condition. I would like to get the approval request only if the ReleaseCondition is True

对于这个问题,在这里同意PaulVrugt。批准在阶段级别执行。 Azure Pipelines 在每个阶段之前暂停管道的执行,并等待所有挂起的检查完成。如果条件设置在job级别,条件在审批之前是不会执行的,所以作为解决方案,我们需要在stage级别设置条件。

例如:

- stage: 'S_ReleaseChannelUpdate'
    dependsOn:
      - PreSteps
      - S_BuildChannelUpdate
    condition: eq(variables['ReleaseCondition'], True)
    jobs:
    - deployment: 'ReleaseChannelUpdate'
      environment: 'dev'
      strategy:
        runOnce:
          deploy:
            steps:

根据这个定义,在执行审批前,pipeline会先判断ReleaseCondition是否为True,如果ReleaseConditionFalse,则stage为skipped 并且不检查批准。

- stage: 'S_ReleaseChannelUpdate'
    dependsOn:
      - S_BuildChannelUpdate

为此,如果阶段 S_BuildChannelUpdate 被跳过(条件不满足),阶段 S_ReleaseChannelUpdate 也将被跳过