Как сделать так, чтобы этап в Azure Pipelines запускался только тогда, когда запрос на включение объединен, а не создан?

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

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

Мой репозиторий находится в Azure, и ветки, с которых я начинаю, — это просто ветка функций и ветка разработки.

trigger:
  batch: true
  branches:
    include:
      - feature
      - dev

pool:
  vmImage: ubuntu-latest

stages:
  - stage: Validate
    {Rest of validate stage}
  - stage: Deploy
    dependsOn: Validate
    condition: {Condition that makes it where this deploy stage runs only when merge happens}
    {Rest of deploy stage}

До сих пор я пробовал использовать предопределенные переменные, такие как Build.Reason, Build.SourceBranch, System.PullRequest и т. д., и мне не удавалось заставить это работать. Любая помощь приветствуется!

I want it to run the first stage when the pull request is created and the second stage when the pull request is completed and merged - Не думаю, что это возможно в одной сборке.
Rui Jarimba 10.04.2024 21:11

Контекст не позволяет этого сделать в одной сборке, если я его хорошо знаю.

KKI 10.04.2024 23:35
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
323
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я хочу, чтобы он запускал первый этап при создании запроса на включение и второй этап, когда запрос на включение завершен и объединен. Меня устраивает, что при слиянии снова запускается первый этап.

Другими словами, вы хотите запускать второй этап только тогда, когда запрос на включение завершен и объединен. Когда PR будет объединен, в истории коммитов появится сообщение о фиксации, например Merged PR xx: The pull request title.

На основе этого сообщения мы можем создать условия, чтобы второй этап запускался только тогда, когда сообщение о фиксации $(Build.SourceVersionMessage) содержит ключевое слово Merged PR.

Однако в моем тесте переменная $(Build.SourceVersionMessage) может быть недоступна во время оценки условия на втором этапе.

В качестве обходного пути мы можем определить, содержит ли $(Build.SourceVersionMessage) ключевое слово Merged PR на этапе 1. Если содержит, установите выходную переменную для использования на втором этапе.

Вот мой образец yaml:

trigger:
  batch: true
  branches:
    include:
      - feature
      - dev

pool:
  vmImage: ubuntu-latest

stages:
- stage: Validate
  jobs:
  - job: A1
    steps:
    - powershell: |
        Write-Host $(Build.SourceVersionMessage)
        if ('$(Build.SourceVersionMessage)' -like '*Merged PR*') {
          Write-Host "##vso[task.setvariable variable=isMergedPR;isOutput=true]true"
        }
      name: SetIsMergedPR
- stage: Deploy
  dependsOn: Validate
  jobs:
  - job: B1
    condition: eq(variables['MergedPR'], 'true')
    variables:
      MergedPR: $[stageDependencies.Validate.A1.outputs['SetIsMergedPR.isMergedPR']]
    steps:
    - powershell: Write-Host "$(MergedPR)"

Результат испытаний:

Задание на втором этапе будет выполнено, если $(Build.SourceVersionMessage) содержит ключевое слово Merged PR, и будет пропущено, если ключевое слово Merged PR отсутствует.

Рад помочь вам. Кроме того, вот примечание с решением: если вы хотите настроить сообщение о фиксации слияния, сохраните ключевое слово Merged PR.

Miao Tian-MSFT 12.04.2024 11:01

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