Я пытаюсь превратить файл конвейера YAML Azure в шаблон, но сталкиваюсь с некоторыми проблемами.
Общий обзор того, что я пытаюсь выполнить sh - это
- Разрешить развертывание нескольких проектов по отдельности в одном репозитории. Отсутствие изменений в каталоге этого проекта означает, что проект не следует развертывать.
- Измененная ветвь должна соответствовать среде развертывания. Например, ветвь dev может запускать конвейер разработки, мастер запускает развертывание продукта.
- Утверждения для производственных развертываний.
Я смог выполнить 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.
Кроме того, это лучший способ сделать это? Или я смогу каким-то образом указать путь к каждому проекту и проверить, есть ли в них изменения по отдельности, и запустить конвейер только в тех случаях, когда это правда?