Передача переменной между заданиями в Azure Pipeline - PullRequest
0 голосов
/ 24 января 2020

Поскольку невозможно передать переменную между этапами в 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 голосов
/ 26 января 2020

Не совсем уверен, что это проблема с форматом вставки в вышеприведенном определении конвейера YAML, и я увидел, что значение ip сгенерировано очень успешно, похоже, причина в синтаксисе name в вашем определении YAML неверна, поэтому он неправильно скомпилирован как reference name.

Просто go и убедитесь, что под name есть желтая линия, например:

enter image description here

Если да, убрать 2 пробела перед name, так что пусть оно будет на одном уровне с inputs:

enter image description here


Если я использую то же самое определение с вами, я также столкнулся с проблемой пустой выходной переменной. Но если я сделал изменения в пространстве до name, то выходная переменная может успешно войти в работу B.

Итак, вы можете попробовать это с вашей стороны.

...