Azure DevOps Pipeline определяет переменную при развертывании и повторно использует в последующем задании - PullRequest
0 голосов
/ 28 апреля 2020

Я использую Azure конвейер DevOps для развертывания моего кода, и теперь мне нужно передать значение переменной из задания развертывания в последующее, зависящее от него. Я прочитал этот пример , но, похоже, он вообще не работает.

Я пытаюсь запустить Azure ARM Deployment, в котором предусмотрено хранилище ключей. , Имя хранилища ключей выводится из задания развертывания ARM, и затем я пытаюсь передать это имя другому заданию, которому необходимо добавить определенные c секреты. Контроль доступа позаботился, но мне все еще нужно передать имя.

Я свел проблему к основам передачи переменной от deployment до job. Вот мой полный тестовый конвейер (почти полностью скопированный с здесь ):

trigger: none

stages:
  - stage: X
    jobs:
      - deployment: A
        pool:
          vmImage: "ubuntu-16.04"
        environment: test
        strategy:
          runOnce:
            deploy:
              steps:
                - script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
                  name: setvarStep
                - script: echo $(setvarStep.myOutputVar)
                  name: echovar

      - job: B
        dependsOn: A
        pool:
          vmImage: "ubuntu-16.04"
        variables:
          myVarFromDeploymentJob: $[ dependencies.A.outputs['deploy.setvarStep.myOutputVar'] ]
        steps:
          - script: "echo $(myVarFromDeploymentJob)"
            name: echovar

После того, как я запустил это, значение отклика будет пустым в задании B, но определено в развертывании A. Почему это? И есть ли способ подсчитать все в dependencies.A.outputs, чтобы я мог видеть, с чем мне приходится работать?

Как передать переменную из задания развертывания runOnce в обычное задание?

1 Ответ

1 голос
/ 28 апреля 2020

Я решил это. Проблема в том, что в документации здесь указана эта схема для извлечения переменной для runOnce развертывания:

$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]

Это на самом деле НЕПРАВИЛЬНО . Параметр <lifecycle-hookname> следует заменить именем развертывания, например:

$[dependencies.<job-name>.outputs['<job-name>.<step-name>.<variable-name>']]

Пример из этой документации (прокрутить вниз) верен.

Полный пример конвейера, который я протестировал и работает:

trigger: none

stages:
- stage: X
  jobs:
  - deployment: A # This name is important
    pool:
      vmImage: 'ubuntu-16.04'
    environment: staging
    strategy:
      runOnce:
        deploy:
          steps:
          - script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
            name: setvarStep # This name is also important
          - script: echo $(setvarStep.myOutputVar)
            name: echovar

  - job: B
    dependsOn: A
    pool:
      vmImage: 'ubuntu-16.04'
    variables:
      myVarFromDeploymentJob: $[ dependencies.A.outputs['A.setvarStep.myOutputVar'] ]
    steps:
    - script: "echo $(myVarFromDeploymentJob)"
      name: echovar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...