В настоящее время я строю проект, который использует Лазурные трубопроводы конкретно ЯмЛ трубопровод Так что я могу иметь его в контроле источника.
Но у трубопровода есть ряд задач, которые я должен выполнить несколько раз с разными параметрами, поэтому я сгруппировал их в работа И просто скопируйте/вставили их в 3 раза мне нужны. Это был быстрый способ получить его тестировать и работать, но, как я изменил трубопровод, мне придется сделать модификацию несколько раз, что было немного раздражает (несколько раз я забыл повторить изменения и сломал сборку!) Отказ
Введите шаблоны
В прошлом я использовал Группы задач В построителях визуального трубопровода, чтобы извлечь общий набор задач для выполнения нескольких раз. С YAML у нас есть Шаблоны что работает, позволяя вынуть работа
в отдельный файл, который вы можете ссылаться.
Фантастические, это работает так же, как я хочу, единственное, что осталось пройти в различных параметрах. Это легко сделать с главного трубопровода:
jobs: - template: templates/npm-with-params.yml # Template reference parameters: name: Linux vmImage: 'ubuntu-16.04'
И тогда я ударил проблему …
Работа с выходными переменными
Не все переменные, в которых мне нужно пройти, являются статическими значениями, некоторые являются результатом других задач (в этом случае развертывание руки), что означает, что я устанавливаю некоторые Выходные переменные Multi-Job Отказ
До рефакторов I доступа к выходу переменной с $ [зависимости. JobName.outputs ['taskname. Variablename ']]
И все было хорошо, теперь мне нужно передать его, поэтому мы обновим наш шаблон Call:
jobs: # omitted parent jobs - template: templates/some-template.yml # Template reference parameters: STORAGE_ACCOUNT_NAME: $[dependencies.JobName.outputs['taskName.StorageAccountName']] name: SomeName azureSubscription: '...'
Затем в шаблоне я бы использовал его так:
parameters: STORAGE_ACCOUNT_NAME: '' name: '' jobs: - job: ${{ parameters.name }} pool: vmImage: 'Ubuntu-16.04' steps: - task: AzureCLI@1 inputs: azureSubscription: ${{ parameters.azureSubscription }} scriptLocation: inlineScript arguments: ${{ parameters.STORAGE_ACCOUNT_NAME }} inlineScript: | account_name=$1 key=$(az storage account keys list --account-name $account_name | jq '.[0].value') # more script here
Я запускаю это и получите ошибку:
AZ Список клавиш учетной записи AZ: ошибка: учетная запись «Зависимости». JobName.outputs [‘taskname. StorageAccountName ‘]] не найден.
Ммм … что? Да, ты прав Azure, это не имя учетной записи хранилища, это динамическая переменная, которую вы должны оценить! Почему ты не оценил?!
Оценка параметров в шаблонах
Итак, вот проблема, параметр, который я передаю к моему шаблону, не оценивается, что означает, что его способом пропускается в сценарии, когда я хочу его использовать. Но никогда не бойтесь, что есть простое исправление, вам просто нужно Назначьте параметр переменной :
parameters: STORAGE_ACCOUNT_NAME: '' name: '' jobs: - job: ${{ parameters.name }} pool: vmImage: 'Ubuntu-16.04' variables: STORAGE_ACCOUNT_NAME: ${{ parameters.STORAGE_ACCOUNT_NAME }} steps: - task: AzureCLI@1 inputs: azureSubscription: ${{ parameters.azureSubscription }} scriptLocation: inlineScript arguments: $(STORAGE_ACCOUNT_NAME) inlineScript: | account_name=$1 key=$(az storage account keys list --account-name $account_name | jq '.[0].value') # more script here
Теперь вы обратитесь к Переменная не параметр в ваших задачах.
Заключение
Честно говоря, я втянул свой мозг на это для лучшей части дня, и это действительно не очевидно, что это так. Я только наткнулся на это случайно после попытки много других вещей.
Надеюсь, это поможет кому-то еще, когда они пытаются выработать, почему их параметры шаблона не оцениваются!
Оригинал: «https://dev.to/azure/azure-pipeline-yaml-templates-and-parameters-448j»