Триггеры по стратегии выпуска X
Вопрос: как настроить CI/CD в конвейерах YAML для следующего контекста.
ветви
- мастер
- выпуск /{ALPHABETICAL NAME} напр. релиз / Альберт следующий релиз - релиз / Бертран и так далее.
окружающая среда
- accept: все, что навязывается мастеру
- тест: последний выпуск ex. релиз / Бертран
- песочница: последняя версия -1 (здесь мы можем протестировать исправления) ex. релиз / Альберт
- live: последний релиз -1 (с исправлениями)
Ближайшее решение
build: создает артефакты проекта build.yml
trigger:
- master
- release/*
pool:
vmImage: 'ubuntu-latest'
steps:
- powershell: |
New-Item -Path . -Name "testfile1.txt" -ItemType "file" -Value "This is a text string."
- publish: $(Pipeline.workspace)
artifact: testArtifact
release-phase1: развертывает главную ветвь для приема release-phase1.yml
trigger: none
resources:
pipelines:
- pipeline: pipelineId
source: build
trigger:
branches:
- master
pool:
vmImage: 'ubuntu-latest'
jobs:
- deployment: DeployWeb
environment: 'testenvironment'
strategy:
runOnce:
deploy:
steps:
- script: echo FOO
release-phase2: развертывает ветвь выпуска для тестирования release-phase2.yml
trigger: none
resources:
pipelines:
- pipeline: pipelineId
source: build
trigger:
branches:
- release/current
pool:
vmImage: 'ubuntu-latest'
jobs:
- deployment: DeployWeb
environment: 'testenvironment'
strategy:
runOnce:
deploy:
steps:
- script: echo FOO
release-phase3: развертывает ветку release -1 в песочнице и после ручного утверждения - в live-release-phase3.yml
trigger: none
resources:
pipelines:
- pipeline: pipelineId
source: build
trigger:
branches:
- release/previous
pool:
vmImage: 'ubuntu-latest'
jobs:
- deployment: DeployWeb
environment: 'testenvironment'
strategy:
runOnce:
deploy:
steps:
- script: echo FOO
Причины, по которым это решение не соответствует нашим потребностям:
- имена веток выпуска не статичны.
- мы должны иметь возможность запускать конвейер release-phase3.yml, не выполняя сначала сборку этой ветки. Он должен загрузить артефакты из последней сборки этой ветки. Но это не так.
КОРОТКОЕ НАЗНАЧЕНИЕ
1 ответ
Поскольку у вас есть несколько веток (основная и релизная ветки), создается другая ветка и развертывается в другой среде. Таким образом, вы можете попробовать разместить конвейер yaml сборки CI в каждой ветке и поместить конвейер yaml развертывания компакт-диска в шаблон yaml в основной ветке (у вас должен быть файл сборки yaml в каждой ветке, чтобы получить код в этой ветке. можете проверить эту ветку).
Ниже приведен простой пример.
В главной ветке
Есть azure-pipelines.yml и template-deploy.yml. В azure-pipelines.ymlEnvironment
значение будет передано как параметр в template-deploy.yml. Так что сборка будет развернута в соответствующей среде.
azure-pipelines.yml:
trigger:
- master
- release/*
pool:
vmImage: 'windows-latest'
resources:
repositories:
- repository: deploy
type: git
name: {project name}
jobs:
- job: Build
steps:
- script: echo "start build job"
- template: template-deploy.yml@deploy
parameters:
envir: "prod"
шаблон-deploy.yml:
parameters:
envir: ""
jobs:
- deployment: DeployWeb
environment: '${{parameters.envir}}'
strategy:
runOnce:
deploy:
steps:
- script: echo FOO
В ветках релиза
Вы можете определить его индивидуальный yaml ci build, как показано ниже:
azure-pipelines.yml в ветке release-phase2:
pool:
vmImage: 'windows-latest'
resources:
repositories:
- repository: deploy
type: git
name: {project name}
jobs:
- job: Build
steps:
- script: echo "start build job"
- template: template-deploy.yml@deploy
parameters:
envir: "test"