условная сборка на основе ветвления для многоступенчатого конвейера с использованием разных шаблонов по этапам
Как вызвать по ветке использовать определенный шаблон в "этапах"?
триггер:
branches
include:
- ci
- prod
этапы:
шаблон: ci.yml
условие: и (eq(['build.sourceBranch'], 'ci'))
шаблон: prod.yml
condition: and(eq(['build.sourceBranch'], 'prod'))
Пробовал вышеуказанное условие, но не сработало. Я получал "условие неожиданного значения". Любая помощь приветствуется
***** Пробовал одно из решений, передавая условие как параметр в шаблон:
этапы:
шаблон: ci.yml
параметры:
condition: and (success (), eq(variables['Build.SourceBranch'], 'refs/ Heads/ci'))
шаблон: prod.yml
параметры:
condition: and (success (), eq(variables['Build.SourceBranch'], 'refs/ Heads/prod'))
Получение "непредвиденного состояния параметра"
Структура трубопровода:
master.yml (содержит параметры времени выполнения) этапы:
шаблон: ci.yml
параметры:
condition: and (success (), eq(variables['Build.SourceBranch'], 'refs/ Heads/ci'))
шаблон: prod.yml
параметры:
condition: and (success (), eq(variables['Build.SourceBranch'], 'refs/ Heads/prod'))
ci.yml
этапы:
этап: BuildApp
stage: BuildWeb
stage: DeployLocal
prod.yml
этапы:
этап: BuildApp
stage: BuildWeb
stage: DeployProd
1 ответ
Как запустить по ветке для использования определенного шаблона на "этапах"?
Чтобы решить эту проблему, мы могли бы добавить условие на уровне задания, например:
stages:
- stage: Test1
jobs:
- job: ci
displayName: ci
pool:
name: MyPrivateAgent
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))
steps:
- template: ci.yml
- job: prod
displayName: prod
pool:
name: MyPrivateAgent
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/prod'))
steps:
- template: prod.yml
Проверьте документ Укажите условия для получения более подробной информации.
С другой стороны, мы также можем установить условие как параметр для шаблона yml, например:
- template: ci.yml
parameters:
doTheThing: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))
Файл шаблона yml:
# template.yml
parameters:
doTheThing: 'false'
steps:
- script: echo This always happens!
displayName: Always
- script: echo Sometimes this happens!
condition: ${{ parameters.doTheThing }}
displayName: Only if true
Вы можете проверить тему YAML - Условия поддержки шаблонов для получения дополнительной информации.
Надеюсь это поможет.