Используйте выходные данные команды bash в качестве входных параметров шаблона задания в конвейере Azure DevOps

Существует шаблон вакансии (управляемый извне). Я хочу использовать этот шаблон в своем конвейере. Мне нужно предоставить ряд параметров, чтобы этот шаблон работал. Я хотел бы динамически генерировать значение для одного из этих параметров, а именно пароля.

Я думал об использовании pwgen для этого следующим образом:

  jobs:
    - job: generate_key_password
      steps:
        - bash: |
            set -e
            echo "Installing pwgen"
            sudo apt install pwgen && echo "Successfully installed pwgen"
            pw=$(pwgen -y -s 25 1)
          displayName: Installing pwgen

Затем я хотел бы использовать результаты этого шага в шаблоне:

- template: /x/y/z/a-template.yml@some-repo
  parameters:
    theParameterName: <this should be the password I generated>

Раньше я использовал vso для передачи переменных от одного задания к другому, но это кажется невозможным в контексте моей задачи (я не могу установить dependsOn). Существует ли какая-либо простая стратегия передачи переменной и ее использования в последующем задании шаблона или нет?

В совокупности это будет выглядеть так:

stages:
  - stage: the_stage
    jobs:
      - job: generate_key_password
        steps:
          - bash: |
              set -e
              echo "Installing pwgen"
              sudo apt install pwgen && echo "Successfully installed pwgen"
              pw=$(pwgen -y -s 25 1)
            displayName: Installing pwgen
      - template: /x/y/z/a-template.yml@some-repo
        parameters:
          theParameterName: <this should be the password I generated>

Сгенерированная среда выполнения pw не может быть отображена в параметрах. theParameterName выдаст ошибку, чтобы указать значение, поскольку оно отображается в начале, а pw не выводится.

wenbo 12.07.2024 10:45

Можете ли вы разделить на два этапа: pw созданное задание на этапе 1 и a-template.yml задание на этапе 2, чтобы вы могли установить dependsOn на этапе, чтобы избежать его в шаблоне вакансии.

wenbo 12.07.2024 10:47

@wenbo Да, это возможно

Dominique M 12.07.2024 10:48

«Я не могу установить зависимость» — это проблема дизайна. Должно быть возможно установить некоторые параметры, такие как зависимости заданий, условия, тайм-ауты и другие, чтобы создавать настраиваемые и расширяемые шаблоны заданий. Подумайте о том, чтобы попросить автора(ов) шаблона добавить параметр dependsOn и другие, которые могут облегчить вашу жизнь (и жизнь других).

Rui Jarimba 12.07.2024 11:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы можете установить dependsOn на уровне stage, вы можете перенести переменную на следующий этап. Пожалуйста, обратитесь к моему образцу ниже:

основной.yml:

trigger: none

pool:
  vmImage: ubuntu-latest

stages:
- stage: One
  jobs:
  - job: A
    steps:
      - bash: echo "##vso[task.setvariable variable=MyVar;isOutput=true]testpwd"
        name: ProduceVar

- stage: Two
  dependsOn: One
  variables:
    varFromA: $[ stageDependencies.One.A.outputs['ProduceVar.MyVar'] ]
  jobs:
    - template: template4.yml
      parameters:
        pwd: $(varFromA)

шаблон4.yml

parameters:
  - name: pwd
    type: string

jobs:
- job: job2
  steps:
  - script: echo ${{ parameters.pwd}}

Результат выполнения:

Или вы можете поместить шаблон в new pipeline. Вы можете сгенерировать пароль в 1-м конвейере, использовать rest API Runs — Run Pipeline , чтобы запустить 2-й конвейер сборки, и установить параметр во 2-й конвейер для параметра шаблона.

Образец вы можете найти в моем ответе здесь.

По умолчанию этапы запускаются один за другим, поэтому ваш пример должен работать без dependsOn: One, верно?

Rui Jarimba 12.07.2024 12:05

Да, это работает. Но я предпочитаю добавить dependsOn: One, чтобы было понятнее.

wade zhou - MSFT 12.07.2024 12:09

«Я предпочитаю добавить dependOn: One, чтобы было понятнее» — да, я согласен.

Rui Jarimba 12.07.2024 12:15

Другие вопросы по теме