在azure devops部署作业中,我们如何将变量从jobs.deployment.strategy.runOnce.deploy.steps传递到on.failure.steps

cRe*_*lts 5 azure-deployment azure-pipelines

如下面的 yaml 所示,当我们知道在parameters.deploymentTemplate 中包含的任何任务期间部署失败的原因时,我们会填充deploymentFailureReason 变量。我们希望能够在从 on:failure 作业调用时将该原因传递给我们的部署跟踪器。

我们知道如何在作业之间和阶段之间传递变量。两者都需要了解我们试图从中获取变量的作业和/或阶段。这些作业是基于每个虚拟机创建的,目前我们无法找到访问在部署作业中创建的 failure.reason 输出变量的方法。我们已经验证,当到达下面名为“failure”的 powershell 步骤时,deploymentFailureReason 已填充。只是似乎无法找到一种方法来完成 on:failure 工作。

我们曾考虑过将deploymentFailureReason写入文件并从on:failure作业中读取它,因为两者都在同一台机器上运行,但肯定有更好的方法。

我们欢迎任何想法、澄清问题或想法,这些可能会促使我们摆脱当前限制我们对此问题思考的框框。

parameters:
  - name: deploymentTemplate
    type: string

stages:
  - stage: DevStage
    jobs:
      - deployment: Dev_Deployment
        variables:
          - name: deploymentFailureReason
            value: ''
  
        environment:
          name: Dev-VM
          resourceType: VirtualMachine
        workspace:
          clean: all
        strategy:
          runOnce:
            deploy:
              steps:
                - template: ./deployment-initialize.yml    
                - template: ${{ parameters.deploymentTemplate }}
                - powershell: |
                    Write-Output "were here"
                    Write-Output "deploymentFailureReason = $(deploymentFailureReason)"
                    
                    Write-Host "##vso[task.setvariable variable=reason;isOutput=true]$(deploymentFailureReason)"
                  name: failure
                  condition: failed()
            on:  # On success or failure hook for runOnce deployment strategy
              success:  # Runs on success of all of the steps
                steps:
                  - template: ./call-deployment-tracker.yml
                    parameters:
                      functionName: "DeploymentSuccess"
              failure:  # Runs on failure of any step
                steps:
                  - template: ./call-deployment-tracker.yml
                    parameters:
                      functionName: "DeploymentFailure"
...
Run Code Online (Sandbox Code Playgroud)