условная сборка на основе ветвления для многоступенчатого конвейера с использованием разных шаблонов по этапам

Как вызвать по ветке использовать определенный шаблон в "этапах"?

триггер:

 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 - Условия поддержки шаблонов для получения дополнительной информации.

Надеюсь это поможет.

Другие вопросы по тегам