在 Azure Pipeline 中的作业之间传递变量

Mat*_*rix 5 variables azure-devops azure-pipelines

由于无法在 AzurePipeline 中的阶段之间传递变量,因此我尝试在两个作业之间传递变量,如 Azure 文档中所述(https://learn.microsoft.com/en-us/azure/ devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch),但是它没有成功并且返回一个空变量。

这就是我正在尝试的:

stages:
- stage: Deploy
  jobs:
  - deployment: A
    displayName: TerraformDeploy
    pool:
      vmImage: 'ubuntu-latest'
    environment: 'test'
    strategy:
      runOnce:
       deploy:
        steps:
        - checkout: self
        - task: Bash@3
          displayName: 'Deploying Terraform'
          inputs:
            targetType: 'inline'
            script: |
              cd environments/test
              terraform init
              terraform apply -var 'client_id=$(client-id)' -var 'client_secret=$(client-secret)' -var 'key_data=$(LinuxSSHPubKey)' -var 'tenant_id=$(tenant-id)' -auto-approve
              ip=$(terraform output public_ip_address)
              echo $ip   ###1.2.3.4
              echo "##vso[task.setvariable variable=myPubIP;isOutput=true]$ip"
            name: setvarStep

  - job: B
    dependsOn: A
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      myIP: $[ dependencies.A.outputs['A.setvarStep.myPubIP'] ]
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: $(azureSubscription)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          echo "ip:"$(myIP)   ### Empty variable!!
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多不同的方法来解决这个问题,但到目前为止还没有解决,任何人都可以帮忙解决这个问题吗?

更新:

似乎其他人也报告了这个问题,他们正在计划修复它:

https://developercommunity.visualstudio.com/content/problem/769690/sharing-variables- Between-jobs-not-working-for-dep.html

即使我将这两项工作用作正常工作,它仍然不适用于我的情况。

Mer*_*SFT 4

不太确定这是上面 YAML 管道定义中的粘贴格式问题,并且我看到该ip值已非常成功地生成,这似乎是由于 YAML 定义中的语法name不正确造成的,因此它没有正确编译为reference name.

去确认下是否有黄线即可name,如下所示:

在此输入图像描述

如果是,则删除之前的2 个空格name,使其与 处于同一级别inputs

在此输入图像描述


如果我使用与你相同的定义,我也面临着空输出变量的问题。但如果我之前对空间进行了更改name,那么输出变量就可以成功进入工作B

所以,你可以尝试一下这个。