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

时间:2020-01-24 14:01:30

标签: variables azure-devops azure-pipelines

由于无法在AzurePipeline的各个阶段之间传递变量,因此我正在尝试在两个作业之间传递变量,正如Azure文档(https://docs.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!!

在这种情况下,我尝试了很多不同的方法,但到目前为止还没有得到解决,有人可以帮忙吗?

已更新:

似乎其他人也报告了此问题,他们正计划解决此问题:

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

即使我同时使用这两项工作,也仍然不能满足我的情况。

1 个答案:

答案 0 :(得分:0)

不太确定这是上述YAML管道定义中的粘贴格式问题,并且我看到ip值生成非常成功,这似乎是由于YAML定义中name的语法引起的不正确,因此不能正确编译为reference name

只需去确认name下是否有黄线,就像这样:

enter image description here

如果是,请在name之前删除2个空格,以便使其与inputs处于同一级别:

enter image description here


如果我使用相同的定义,我还将面临输出变量为空的问题。但是,如果我在name之前进行了空间更改,则输出变量可以成功进入作业B

因此,您可以尝试一下。

相关问题