在评估条件之前需要 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
,如果ReleaseCondition
为False
,则stage为skipped
并且不检查批准。
- stage: 'S_ReleaseChannelUpdate'
dependsOn:
- S_BuildChannelUpdate
为此,如果阶段 S_BuildChannelUpdate
被跳过(条件不满足),阶段 S_ReleaseChannelUpdate
也将被跳过
我有一个 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
,如果ReleaseCondition
为False
,则stage为skipped
并且不检查批准。
- stage: 'S_ReleaseChannelUpdate'
dependsOn:
- S_BuildChannelUpdate
为此,如果阶段 S_BuildChannelUpdate
被跳过(条件不满足),阶段 S_ReleaseChannelUpdate
也将被跳过