【问题标题】:Passing variable between jobs in Azure Pipeline在 Azure Pipeline 中的作业之间传递变量
【发布时间】:2020-01-24 14:01:30
【问题描述】:

由于无法在 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

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

【问题讨论】:

  • 我已经复制并改编了你的 yaml,我使用了 Bash 任务而不是 AzureCLI,变量在作业之间成功传递。我想 AzureCLI@2 任务(可能无法访问变量)或您的“环境测试”有问题。请检查在作业 B 中使用 Bash@3 并检查变量是否通过。我的 yaml 和结果在附图中。似乎使用“部署”或“工作”没有问题。 i.stack.imgur.com/2rTmk.png

标签: variables azure-devops azure-pipelines


【解决方案1】:

不太确定是不是上述 YAML 管道定义中的粘贴格式问题,我看到 ip 值生成非常成功,似乎是由于您的 YAML 定义中 name 的语法不正确,所以它没有正确编译为reference name

去确认name下面有没有黄线,像这样:

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


如果我使用与您相同的定义,我也会遇到空输出变量的问题。但是如果我在name 之前对空间进行了更改,那么输出变量可以成功进入工作B

所以,你可以试试这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2021-02-20
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多