#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. Я проверил обе ветви, используя этот подход, отличный материал.