Рубрики
Uncategorized

Азародные трубопроводные шаблоны и параметры и параметры

В настоящее время я строю проект, который использует лазурные трубопроводы, в частности, Yaml … Tagged с Azurepipelenine, Andistroddelivery, Azure, DevOps.

В настоящее время я строю проект, который использует Лазурные трубопроводы конкретно ЯмЛ трубопровод Так что я могу иметь его в контроле источника.

Но у трубопровода есть ряд задач, которые я должен выполнить несколько раз с разными параметрами, поэтому я сгруппировал их в работа И просто скопируйте/вставили их в 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»