Конвейер Azure DevOps CI — Как динамически проверять филиалы?

#unit-testing #azure-devops #automation #continuous-integration #azure-pipelines

Вопрос:

Настройка:
У меня есть репозиторий базы данных и репозиторий модульного тестирования, который проверяет репозиторий базы данных, оба они совместно используют проект в Azure DevOps. У меня есть конвейер CI, который находится в проекте базы данных и запускается при отправке в ветвь удаленного отслеживания. Триггер запустит CI, когда будет передана любая ветвь в этом каталоге.

Проблема:
Мне также нужно проверить проект модульного тестирования, чтобы я мог его назвать. Мы не будем знать, какие названия будут иметь тематические ветви, пока мы не создадим задачи и т. Д., Как это может быть зафиксировано динамически?

Таким образом, инженер может работать более чем в 1 филиале с поддержкой CI, не беспокоясь о приведении в порядок, если возникнет срочность.

Я прочитал это; https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#repository-details.

Я пытался:

 trigger:
- dev/a/*

steps:

- checkout: git://proj/repo-a@dev/a/*
- checkout: git://proj/repo-b@dev/a/*
 

Просто чтобы посмотреть, можно ли было совмещать проекты.

Это вызывает ошибку:

Трубопровод недействителен. Не удалось получить последнюю исходную версию для репозитория repo-a, размещенного в репозиториях Azure, с помощью ссылок ref/heads/dev/a/. Не удалось получить последнюю исходную версию для репозитория repo-b, размещенного в репозиториях Azure, с помощью ссылок ref/heads/dev/a/.

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

Конечно, это возможно …

Ответ №1:

Для динамической проверки ветвей вы можете использовать предопределенную переменную: Build.SourceBranchName .

Например:

 - checkout: git://proj/repo-a@$(Build.SourceBranchName)
 

Поскольку вы ссылались на два репозитория, вам также необходимо добавить выражение If, чтобы определить, какое репозиторий запускает сборку, и использовать имя ветви целевого репозитория.

Вы можете использовать переменную: Build.Repository.Name

Вот пример:

 steps:
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a') }}:
  - checkout: git://proj/repo-a@$(Build.SourceBranchName)
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b') }}:
  - checkout: git://proj/repo-b@$(Build.SourceBranchName)
 

Или вы можете использовать условие.

Например:

 - checkout: git://proj/repo-a@$(Build.SourceBranchName)
  condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a')
- checkout: git://proj/repo-b@$(Build.SourceBranchName)
  condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b')
 

Вот документы о выражении и состоянии.

Комментарии:

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