#azure-devops #azure-pipelines #azure-pipelines-yaml
Вопрос:
TL;DR
Возможно ли иметь параметр и его значения в шаблоне YAML, а основной YAML должен прочитать список и представить их в раскрывающемся списке при подготовке к запуску конвейера?
Очень похоже на пример MS «Повторного использования переменных», показанный здесь.
# File: vars.yml
variables:
favoriteVeggie: 'brussels sprouts'
# File: azure-pipelines.yml
variables:
- template: vars.yml # Template reference
steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Подробные сведения
У меня есть список из примерно 50 значений, которые растут от недели к неделе. Когда оперативный сотрудник запускает мой конвейер, я бы хотел, чтобы он выбрал значение из раскрывающегося списка.
Этого можно достичь, просто указав блок параметров в файле YAML конвейера( azure-pipeline.yml
):
parameters:
- name: subscription
displayName: Subscription Name
type: string
default: sub A
values:
- sub A
- sub B
- sub C
- sub D
Это дает мне раскрывающийся список в пользовательском интерфейсе:
В моем примере выше есть только четыре значения, однако у нас более 50 значений (подписок) и они растут. Я пытаюсь придумать способ, при котором 1) операторам не придется редактировать конвейер 2) сохранять сжатый файл основного конвейера.
Я знаю, что в настоящее время нет способа динамического заполнения списка значений, но я собираюсь использовать файл YAML шаблона, в котором будут только значения, и он прочитает шаблон, заполнив раскрывающийся список. В этом случае довольно простая задача состоит в том, чтобы скрипт/конвейер динамически обновлял значения в файле шаблона.
Читая документы и некоторые блоги, я верю, что это возможно, но мне не удалось взломать его.
Похоже, что блок параметров может принимать «любую структуру YAML», хотя я не смог найти подходящего примера этого. Среди прочего, это то, что я пробовал:
шаблоны/подписки.yml
- name: subscription
displayName: Subscription Name
type: string
default: sub A
values:
- sub A
- sub B
- sub C
- sub D``
azure-конвейеры.yml
...
template: templates/subscriptions.yml
parameters:
subscription: []
stages:
- stage: Example
displayName: 1.0 Demo Stage
jobs:
...
Интересно, не в том ли моя проблема, что мне нужно, чтобы параметры считывались с самого начала, а это не поддерживается. Это работает только на этапе/задании и т. Д.
Если у кого-нибудь есть какие-либо идеи, я был бы признателен, если бы вы указали мне правильное направление.
Т. И. А.
Комментарии:
1. Ну, параметры и переменные-это совершенно разные вещи, поэтому я не думаю, что возможно сделать то, что вы описываете. Вероятно, вы можете вручную проанализировать vars yaml, но это также, скорее всего, тупик. 50 vars в любом случае скорее похоже на проблему дизайна, я бы предпочел попробовать придумать новые шаблоны и сценарии-но трудно сказать, не видя реальных трубопроводов.
2. Привет @Kevin Lu-MSFT Я придумал другой подход. Использование папки с именем, совпадающим с именем подписки, а затем использование Git для обнаружения новой папки или файлов внутри папки.
3. Привет @woter324. Рад узнать, что вы смогли найти этот метод. Вы могли бы поделиться этим в ответе и принять ответ. Это будет полезно другим пользователям.
Ответ №1:
Основываясь на ваших требованиях, я уверен, что на данный момент нет такого метода, который мог бы удовлетворить ваши требования.
На шаблон yaml в Azure Devops должен ссылаться основной yaml(например, azure-pipelines.yml), чтобы передать значение.
Пожалуйста, обратитесь к этому документу: Схема Yaml.
Поле параметров в YAML не может вызывать шаблон параметров в yaml. Поэтому, если определены только чистые параметры, они не могут быть вызваны в основном yaml.
Этот метод поддерживается только переменными.
Но ваше требование имеет смысл. Я предлагаю вам отправить заявку с предложением на нашем сайте пользовательского выбора.