Разработчики Azure передают объект ввода с одного шага на другой

#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 и т. Д.) В строку, А затем, как в приведенном выше примере, передать эту строку в качестве переменной. На последующих шагах, которые необходимы для доступа к этому объекту, после получения строковой переменной вы можете попытаться преобразовать строку обратно в объект. Это самый распространенный метод, который я могу придумать.