Триггеры по стратегии выпуска 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"