Превращение azure -pipeline.yml в шаблон - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь превратить файл конвейера YAML Azure в шаблон, но сталкиваюсь с некоторыми проблемами.

Общий обзор того, что я пытаюсь выполнить sh - это

  1. Разрешить развертывание нескольких проектов по отдельности в одном репозитории. Отсутствие изменений в каталоге этого проекта означает, что проект не следует развертывать.
  2. Измененная ветвь должна соответствовать среде развертывания. Например, ветвь dev может запускать конвейер разработки, мастер запускает развертывание продукта.
  3. Утверждения для производственных развертываний.

Я смог выполнить sh это с этот конвейер:

variables:
  projectPath: PathTo/ProjectFolder

trigger:
  branches:
    include:
      - master
      - release*
  paths:
    include:
      - $(projectPath)

pool:
  vmImage: 'windows-latest'

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    # build stuff        
    - publish: $(Build.ArtifactStagingDirectory)\Output
      artifact: drop

- stage: DeployToTest
  condition: and(succeeded('Build'), startsWith(variables['Build.SourceBranchName'], 'release'))
  jobs:
  - job: DeployToTestJob
    steps:
    - download: current
      artifact: drop
    # etc

- stage: DeployToProd
  condition: and(succeeded('Build'), eq(variables['Build.SourceBranchName'], 'master'))
  jobs:
  - deployment: DeployToProdJob
    pool: 
     vmImage: 'windows-latest'
    environment: prod
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          # etc...

И это работает. Одна жалоба заключается в том, что мне нужно создать конвейер для каждого проекта в репо. Я чувствую, что могу обойти это, но не уверен, как это сделать без большого количества скриптов. Но все остальное хорошо.

Я хочу превратить это в шаблон, где единственное, что мне нужно указать, - это путь к проекту. Я попробовал это и получил:

# template.yaml

parameters:
- name: 'projectPath'
  default: '.'
  type: string

trigger:
  branches:
    include:
      - master
      - release*
  paths:
    include:
      - ${{ projectPath }}

pool:
  vmImage: 'windows-latest'

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    # build stuff        
    - publish: $(Build.ArtifactStagingDirectory)\Output
      artifact: drop

- stage: DeployToTest
  condition: and(succeeded('Build'), startsWith(variables['Build.SourceBranchName'], 'release'))
  jobs:
  - job: DeployToTestJob
    steps:
    - download: current
      artifact: drop
    # deploy stuff

- stage: DeployToProd
  condition: and(succeeded('Build'), eq(variables['Build.SourceBranchName'], 'master'))
  jobs:
  - deployment: DeployToProdJob
    pool: 
     vmImage: 'windows-latest'
    environment: prod
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          # deploy stuff

и

# pipeline.yaml

resources:
  repositories:
    - repository: templates
      type: git
      name: sample/repo
      #ref: refs/tags/v1.0 # optional ref to pin to

extends:
  template: template.yml@templates  # Template reference
  parameters:
    projectPath: 'Some\Path'

Но это дало мне пару ошибок:

/approval-pipeline.yml@templates (Line: 13, Col: 9): A template expression is not allowed in this context /approval-pipeline.yml@templates (Line: 15, Col: 1): Unexpected value 'pool'

Можно ли еще использовать здесь свой параметр projectPath? И есть ли причина, по которой я могу использовать здесь бассейн? Я не нашел ограничений шаблонов, перечисленных где-либо в документации MSDN.

Кроме того, это лучший способ сделать это? Или я смогу каким-то образом указать путь к каждому проекту и проверить, есть ли в них изменения по отдельности, и запустить конвейер только в тех случаях, когда это правда?

1 Ответ

1 голос
/ 04 августа 2020

Могу ли я по-прежнему использовать здесь свой параметр projectPath?

Если вы используете шаблоны для создания файлов YAML, то вы можете указать триггеры только в основном файле YAML для трубопровод. Вы не можете указать триггеры в файлах шаблона.

И есть ли причина, по которой я не могу использовать здесь пул?

В шаблоне «пул» следует добавить в ' job '.

Итак, что вам нужно сделать, это:

  1. Переместите свой' trigger 'в pipeline.yml
  2. Удалите' pool 'и добавьте его между' job 'и' steps '.

Модифицированный код:

# template.yaml

stages:
- stage: Build
  jobs:
  - job: BuildJob
    pool:
      vmImage: 'windows-latest'
    steps:
    # build stuff        
    - publish: $(Build.ArtifactStagingDirectory)\Output
      artifact: drop

- stage: DeployToTest
  condition: and(succeeded('Build'), startsWith(variables['Build.SourceBranchName'], 'release'))
  jobs:
  - job: DeployToTestJob
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    # deploy stuff

- stage: DeployToProd
  condition: and(succeeded('Build'), eq(variables['Build.SourceBranchName'], 'master'))
  jobs:
  - deployment: DeployToProdJob
    pool: 
      vmImage: 'windows-latest'
    environment: prod
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          # deploy stuff

и

# pipeline.yaml

variables:
  projectPath: PathTo/ProjectFolder

trigger:
  branches:
    include:
      - master
      - release*
  paths:
    include:
      - $(projectPath)

resources:
  repositories:
    - repository: templates
      type: git
      name: sample/repo
      #ref: refs/tags/v1.0 # optional ref to pin to

extends:
  template: template.yml@templates  # Template reference
  parameters:
    projectPath: 'Some\Path'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...