#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}}"
Теперь я застрял.
- Как передать переменную в качестве параметра в шаблон? В шаблон передается пустая строка » для ${{переменных.МОДУЛИ}} или «$(МОДУЛИ)» для $(МОДУЛИ). Но никогда не создавал строку. Я думаю, что $(МОДУЛИ) допустимы для этой ситуации.
- Как создать допустимый объект, который можно повторять внутри каждого цикла в шаблоне? Я думаю, что моя конструкция с convertToJson, sed и jq неверна.
Моя цель-исключить группу параметров MODULE_ из шаблонов. В настоящее время каждый шаблон содержит дубликат этого раздела параметров.
Комментарии:
1. Я не решил эту проблему. Вместо всех параметров MODULES_* я передаю один дополнительный параметр: МОДУЛИ и обрабатываю его на последующих шагах. Модули параметров содержат объект параметров из 1-го шаблона. Я не знаю, как обработать параметры в переменную и передать ее дальше.