Azure DevOps - Рабочий процесс и развертывание запросов на извлечение - PullRequest
0 голосов
/ 07 августа 2020

Я немного запутался в том, как настроить этот рабочий процесс с помощью запросов на вытягивание.

У меня есть существующий многоступенчатый конвейер сборки YAML, который в итоге выполняет следующие действия:

  1. Запускает сборку из любой ветки
  2. Запускает задание развертывания в Среду разработки / Ресурс, если исходной ветвью является feature / * или release / * и сборка завершается успешно
  3. Запускается задание развертывания в среду / ресурс UAT, если исходная ветка - release / *
  4. Запускает задание развертывания в Live / Production Environment / Resource, если исходная ветвь является master

Итак, с обратной стороны CI этот рабочий процесс, кажется, работает нормально, правильные этапы выполняются в зависимости от ветки и т. Д. c.

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

trigger: none

* 102 1 * Теперь это работает правильно в соответствии с политикой ветвления, сборка запускается только тогда, когда открывается запрос на перенос для разработки или мастера.

Однако именно тогда я немного смущен тем, как это должно работать, и как я думаю, это работает ....

Во-первых, невозможно ли запустить многоступенчатый YAML с обратной стороны pull-запросов (используя Azure Repos)? В голове все, что я хочу сделать, это ввести политики запросов на вытягивание и ветвления, но сохранить многоступенчатое развертывание в средах как есть. Однако сейчас все этапы задания по развертыванию пропускаются, но это может быть связано с моими условиями в YAML, а именно:

- stage: 'Dev'
  displayName: 'Development Deployment'
  dependsOn: 'Build'
  condition: |
    and
    (
      succeeded()
      eq(variables['Build.Reason'], 'PullRequest'),
      ne(variables['System.PullRequest.PullRequestId'], 'Null'),
      or
      (
        startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/'),
        startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')
      )
    )
  jobs:
  - deployment: Deploy
    pool: 
      name: 'Development Server Agent Pool'
    variables:
      Parameters.WebsitePhysicalPath: '%SystemDrive%\inetpub\wwwroot\App'
      Parameters.VirtualPathForApplication: ''
      Parameters.VirtualApplication: ''
    environment: 'Development.Resource-Name'
.....

Что-то мне не хватает? Или мне нужно удалить многоэтапные развертывания из YAML и вернуться к использованию Release Pipelines для запросов на вытягивание (возможно, с воротами утверждения ??)

Заранее спасибо!

1 Ответ

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

Похоже, проблема условий в YAML.

Если конвейер запускается PR. значение variables['Build.SourceBranch'] будет refs/pull/<PR id>/merge. express в приведенном выше условии startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/') будет ложным, что привело к пропуску этапа. См. переменные сборки для получения дополнительной информации.

Вы можете попробовать использовать variables['System.PullRequest.SourceBranch'], который будет оцениваться как значение исходной ветви PR. Проверьте Системные переменные для получения дополнительной информации. См. Ниже:

condition: |
    and
    (
      succeeded(),
      eq(variables['Build.Reason'], 'PullRequest'),
      ne(variables['System.PullRequest.PullRequestId'], ''),
      or
      (
        startsWith(variables['System.PullRequest.SourceBranch'], 'refs/heads/feature/'),
        startsWith(variables['System.PullRequest.SourceBranch'], 'refs/heads/release/')
      )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...