Azure Pipelines:含可选确认参数的部署模板复用后执行失败
Azure Pipelines:含可选确认参数的部署模板复用后执行失败
嘿,我来帮你排查这个可复用部署模板的问题!你想要做一个支持可选人工确认的流水线模板对吧?先看看你当前的模板代码和调用逻辑:
你的模板代码是这样的:
parameters: - name: environment type: string - name: requireConfirmation type: boolean jobs: - job: confirmDeployment displayName: Confirm deployment pool: server condition: ${{ parameters.requireConfirmation }} steps: - task: ManualValidation@0 continueOnError: false inputs: instructions: 'Continue deployment to ${{ parameters.environment }} environment?' - job: deploy condition: or(eq('${{ parameters.requireConfirmation }}', false), succeeded('confirmDeployment')) timeoutInMinutes: 10 steps: - script: echo "Fake deploying to $(environment)" displayName: 'Fake deployment'
调用模板的阶段代码如下:
# - build stage here - stage: deployTest displayName: Deploy to Test condition: ...
我发现问题出在deploy job的条件判断上!当你把requireConfirmation设为false时,confirmDeployment这个job根本不会被创建(因为它的执行条件是${{ parameters.requireConfirmation }},编译时就会跳过这个job),但你的deploy job条件里还在引用succeeded('confirmDeployment')——流水线找不到这个不存在的job,自然就执行失败了。
给你两个修复方案,选哪个都能解决问题:
方案一:用编译时条件分支
直接在编译阶段就确定deploy job的执行条件,避免引用不存在的job:
parameters: - name: environment type: string - name: requireConfirmation type: boolean jobs: - job: confirmDeployment displayName: Confirm deployment pool: server condition: ${{ parameters.requireConfirmation }} steps: - task: ManualValidation@0 continueOnError: false inputs: instructions: 'Continue deployment to ${{ parameters.environment }} environment?' - job: deploy # 编译时判断:不需要确认就直接执行,需要确认则依赖确认job成功 ${{ if eq(parameters.requireConfirmation, false) }}: condition: true ${{ else }}: condition: succeeded('confirmDeployment') timeoutInMinutes: 10 steps: - script: echo "Fake deploying to $(environment)" displayName: 'Fake deployment'
方案二:优化条件表达式
把条件改成仅当需要确认时才检查确认job的状态,避免无效引用:
condition: ${{ eq(parameters.requireConfirmation, false) }} or (${{ parameters.requireConfirmation }} and succeeded('confirmDeployment'))
这样修改后,当requireConfirmation为false时,deploy job直接执行;当为true时,才会等待confirmDeployment执行成功后再跑部署,完全不会出现找不到job的错误啦。
备注:内容来源于stack exchange,提问作者Michiel
相关产品推荐
相关产品推荐

