Azure Pipelines YAML: неожиданное значение 'переменные'
Я использую Azure Pipelines как часть Azure DevOps. Я пытаюсь определить переменные в моем файле шаблона, потому что мне нужно использовать одно и то же значение несколько раз.
Это мое stage-template.yml
:
parameters:
- name: param1
type: string
- name: param2
type: string
variables:
var1: path/${{ parameters.param2 }}/to-my-file.yml
stages:
- stage: Deploy${{ parameters.param2 }}
displayName: Deploy ${{ parameters.param1 }}
jobs:
...
При попытке использовать этот конвейер я получаю сообщение об ошибке:
/stage-template.yml (Строка: 7, Столбец: 1): Неожиданное значение 'переменных'
Почему это не работает? Что я сделал не так?
3 ответа
Вы не можете использовать шаблон, включенный в качестве шаблона этапа, задания или шага (т. е. включенный нижеstages
,jobs
илиsteps
элемент конвейера). Вы можете использовать толькоvariables
в переменном шаблоне.
Документация, к сожалению, не очень ясна по этому поводу.
Включая шаблон этапа
# pipeline-using-stage-template.yml
stages:
- stage: stage1
[...]
# stage template reference, no 'variables' element allowed in stage-template.yml
- template: stage-template.yml
Включение шаблона переменной
# pipeline-using-var-template.yml
variables:
# variable template reference, only variables allowed inside the template
- template: variables.yml
steps:
- script: echo A step.
Если вы используете шаблон для включения переменных в конвейер, включенный шаблон можно использовать только для определения переменных.
У вас не может быть параметров в конвейере, только в templateReferences:
name: string # build numbering format
resources:
pipelines: [ pipelineResource ]
containers: [ containerResource ]
repositories: [ repositoryResource ]
variables: # several syntaxes, see specific section
trigger: trigger
pr: pr
stages: [ stage | templateReference ]
если вы хотите использовать переменные в шаблонах, вы должны использовать правильный синтаксис:
parameters:
- name: param1
type: string
- name: param2
type: string
stages:
- stage: Deploy${{ parameters.param2 }}
displayName: Deploy ${{ parameters.param1 }}
variables:
var1: path/${{ parameters.param2 }}/to-my-file.yml
jobs:
...
Это работает для меня:
В вашем родительском yaml:
этапы:
stage: stage1
displayName: 'этап от родителя'
вакансии:
- шаблон: template1.yml
параметры: param1: 'somevalueforparam1'
- шаблон: template1.yml
..... внутри template1:
параметры:
param1: ''
param2: ''
вакансии:
job: job1
рабочая среда:
чистый: все
displayName: 'Установить задание'
бассейн:
name: 'yourpool'
переменные:
имя: var1
значение: 'значение1'