#powershell #azure-devops
Вопрос:
Я пытаюсь передать переменную «$a» с одного шага на другой в Azure DevOps. Хэш $содержит имя,значение только для чтения и длину в качестве свойства заметки. Мне удалось передать переменную с одного шага на следующий как $b, но когда я пытаюсь получить доступ к свойству записи переменной $b, я не могу получить к ней доступ
1.My question is it possible pass variable from one step to another step, How do i access the variables NoteProperty ??
2. Does Azure DevOps support passing complex objects from one step to another step ??
Ответ №1:
По вашему первому вопросу:
можно ли передавать переменную с одного шага на другой, как получить доступ к свойствам заметок переменных ??
Конечно, вы можете передавать переменные с шага на последующие шаги в том же задании, и вы даже можете передавать переменные на шаги в последующих заданиях.
Чтобы передать значение переменной, сгенерированное на шаге, на другие последующие шаги, вы можете использовать команду «setVariable» на шаге, который генерирует значение.
- Если вы хотите предоставить значение переменной только для последующих шагов в том же задании, вы можете просто установить его в качестве переменной общего уровня задания, используя следующую команду.
Удар
echo "##vso[task.setvariable variable=<var_name>;]<var_value>"
или PowerShell
Write-Host "##vso[task.setvariable variable=<var_name>;]<var_value>"
Таким образом, на последующих шагах вы можете использовать выражение «
$(var_name)
для доступа к этой переменной.После выполнения приведенной выше команды для настройки переменной, как и других общих переменных конвейера, эта переменная будет автоматически отображена в качестве переменной среды. Таким образом, вы также можете использовать выражение «
%VAR_NAME%
(CMD)», «$env:VAR_NAME
(PowerShell) или «$VAR_NAME
(Bash) для доступа к переменной. - Если вы хотите поделиться значением переменной с последующими шагами в том же задании и шагами в последующих заданиях, вы можете задать его в качестве выходной переменной с помощью следующей команды.
Удар
echo "##vso[task.setvariable variable=<var_name>;isoutput=true]<var_value>"
или PowerShell
Write-Host "##vso[task.setvariable variable=<var_name>;isoutput=true]<var_value>"
Таким образом, для доступа к этой выходной переменной на последующих шагах того же задания вы можете использовать выражение «
$(step_name.var_name)
.Чтобы получить доступ к этой выходной переменной на этапах последующих заданий, последующие задания должны зависеть от (
dependsOn
) задания, содержащего шаг для настройки выходной переменной. И вам также необходимо сопоставить эту выходную переменную как переменную уровня задания для каждого последующего задания, а затем использовать эту переменную уровня задания для доступа к выходному значению.
Чтобы просмотреть дополнительные сведения о переменных в конвейерах Azure, см. раздел «Определение переменных«.
Простой пример в качестве ссылки.
- azure-конвейеры.yml
jobs: - job: JobA displayName: 'Job A' steps: - bash: echo "##vso[task.setvariable variable=MyVar;isoutput=true]This is an output variable!" name: set_output displayName: 'Set up the output variable' - bash: echo "set_output.MyVar = $(set_output.MyVar)" displayName: 'Show the value of output variable' - job: JobB displayName: 'Job B' dependsOn: JobA variables: output_from_JobA: $[ dependencies.JobA.outputs['set_output.MyVar'] ] steps: - bash: echo "output_from_JobA = $(output_from_JobA)" displayName: 'Show the value of output variable from JobA'
- Результат:
По вашему второму вопросу:
Поддерживает ли Azure DevOps передачу сложных объектов с одного шага на другой ??
Обычно значение переменной в конвейерах Azure должно быть строковым. Чтобы передать содержимое объекта в качестве переменной в конвейере, вы можете попытаться преобразовать объект (например, узел JSON, узел XML и т. Д.) В строку, А затем, как в приведенном выше примере, передать эту строку в качестве переменной. На последующих шагах, которые необходимы для доступа к этому объекту, после получения строковой переменной вы можете попытаться преобразовать строку обратно в объект. Это самый распространенный метод, который я могу придумать.