Передача переменных из одного задания в другое в многоступенчатом конвейере azure (YAML) - PullRequest
1 голос
/ 17 апреля 2020

У меня очень базовый c YAML azure конвейер

jobs:
- job: Foo
  steps:
  - bash: |
      echo "Create variable xyz"
      echo "##vso[task.setvariable variable=xyz;]yes"
    displayName: 'Determine slot name'
  - bash: |
     echo "Var is: $(xyz)"
    displayName: 'Show variable'
- job: Bar
  dependsOn: Foo
  steps:
  - bash: |
      echo "Hello world $(Foo.xyz)"
    displayName: 'Show variable'

В первом задании с именем Foo переменная xyz установлена ​​в yes. Это работает, потому что я могу отобразить его в секундах со строкой

echo "Var is: $(xyz)"

Однако я хотел бы использовать эту переменную в следующем задании (названном Bar). Но что бы я ни делал, этого не существует. Я пробовал что-то вроде

 echo "Hello world $(xyz)"

или

 echo "Hello world $(Foo.xyz)"

Но оба они выдают следующую ошибку при запуске конвейера

 line 1: Foo.xyz: command not found

Как я могу поделиться этой переменной между рабочие места? и разделение между этапами тоже было бы неплохо !!

1 Ответ

3 голосов
/ 17 апреля 2020

Таким образом, у вас есть на самом деле две вещи.

Передача переменных от работы к работе, что возможно:

Вы пробовали выходную переменную нескольких заданий :

jobs:

# Set an output variable from job A
- job: A
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
    name: setvarStep
  - script: echo $(setvarStep.myOutputVar)
    name: echovar

# Map the variable into job B
- job: B
  dependsOn: A
  pool:
    vmImage: 'ubuntu-16.04'
  variables:
    myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]  # map in the variable
                                                                          # remember, expressions require single quotes
  steps:
  - script: echo $(myVarFromJobA)
    name: echovar

Пожалуйста, проверьте этот вопрос .

Передача переменной от этапа к этапу: что в настоящий момент невозможно из коробки .

Пожалуйста, проверьте этот вопрос . Мерлин Лян - MSFT объяснил это там.

Обходной путь

Вы можете попробовать записать в какой-то файл свои переменные, publi sh, это как pipeartifact , загрузите этот артефакт на другом этапе и загрузите переменные. Пожалуйста, проверьте эту ссылку .

...