Как передать переменную в качестве параметра, типа объекта, шаблону Azure DevOps

#variables #azure-devops #parameters #azure-pipelines #azure-pipelines-yaml

Вопрос:

Чтобы уменьшить количество дубликатов, я хочу переписать наши конвейеры Azure DevOps. Основные трубопроводы выглядят так:

 parameters:
  - name: MODULE_Foo
    type: boolean
    default: false
  - name: MODULE_Bar
    type: boolean
    default: false
...
  - name: MODULE_X
    type: boolean
    default: false
...rest of parameters
 - name: BRANCH_NAME
    type: string
  - name: CHECKOUT_TAG
    type: boolean
    default: false

extends:
  template: template1.yml
  parameters:
    MODULES: ${{paramaters}}
    BRANCH_NAME: ${{parameters.BRANCH_NAME}}
    ...rest of parameters
 

Шаблон template1.yml:

 parameters:
  - name: MODULES
    type: object
    default: {}
  ...rest of parameters

stages:
  - stage: Build
  jobs:
      - job: BuildAndDeploy
        steps:
          - bash: |
              MODULES=$(echo "${{ convertToJson(parameters.MODULES) }}" 
                | sed -E 's/^([[:space:]] )/1"/;s/(:[[:space:]] )/"1"/;s/,$/",/;s/([^{},])$/1"/' 
                | jq 'with_entries( select(.key | startswith("MODULE_") ) )' 
              )
              echo "##vso[task.setvariable variable=MODULES;]$MODULES"

          - template: template2.yml
            parameters:
              MODULES: $(MODULES)
            ...rest of parameters
 

И, наконец, template2.yml:

 parameters:
  - name: MODULES
    type: object
    default: {}
  ...rest of parameters

  - ${{ each module in parameters.MODULES }}:
    - ${{ if and(startsWith(module.Key, 'module'), eq(module.Value, true)) }}:
      - bash: |
          echo "Module to build: ${{module.key}}, Value: ${{module.value}}"
 

Теперь я застрял.

  1. Как передать переменную в качестве параметра в шаблон? В шаблон передается пустая строка » для ${{переменных.МОДУЛИ}} или «$(МОДУЛИ)» для $(МОДУЛИ). Но никогда не создавал строку. Я думаю, что $(МОДУЛИ) допустимы для этой ситуации.
  2. Как создать допустимый объект, который можно повторять внутри каждого цикла в шаблоне? Я думаю, что моя конструкция с convertToJson, sed и jq неверна.

Моя цель-исключить группу параметров MODULE_ из шаблонов. В настоящее время каждый шаблон содержит дубликат этого раздела параметров.

Комментарии:

1. Я не решил эту проблему. Вместо всех параметров MODULES_* я передаю один дополнительный параметр: МОДУЛИ и обрабатываю его на последующих шагах. Модули параметров содержат объект параметров из 1-го шаблона. Я не знаю, как обработать параметры в переменную и передать ее дальше.