Как динамически извлекать ветки объектов из нескольких репозиториев через конвейер Jenkins? - PullRequest
0 голосов
/ 06 ноября 2019

в первую очередь: здесь уже есть несколько похожих вопросов, но ни один из них не может помочь мне решить мою проблему.

Думаю, мне нужна помощь в создании усовершенствованного конвейера CI. Проект, над которым я работаю, разделен на несколько репозиториев, каждый из которых управляет определенным аспектом (веб-приложение, общие методы и т. Д.). В настоящее время я создаю рабочий процесс CI для управления интеграционными тестами в функциональных ветвях. Я подумал о следующем рабочем процессе (и проблемах):

  • новая функция разработана в нескольких различных проектах (например, изменения пользовательского интерфейса и функциональные возможности Backend) в соответствующей ветви функций под названием "feature1"
  • когда изменения зафиксированы, Jenkins запускается через веб-хук и строит каждую ветвь функции соответственно
  • , поэтому мне нужен способ собрать все изменения во всех репозиториях, которые имеют эту точную ветку функции "feature1", и собратьсоответственно, для всех других зависимостей должна использоваться основная ветвь
  • количество репозиториев может возрасти в ближайшем будущем, поэтому я не хочу жестко кодировать все URL-адреса репозитория в сценарии конвейера
  • каждый репозиторий является проектом maven, поэтому создание ветки объектов и ее установка в локальное репозиторий jenkins перезапишет потенциальный «главный артефакт», поэтому потенциально может повредить зависимости для других репозиториев

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

Если кто-то знает разумное решение этой проблемы или может порекомендовать совершенно другую стратегиюдля решения этой проблемы, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 07 ноября 2019

Насколько я понимаю, в Jenkins настроено несколько проектов. Эти проекты используют одно и то же имя ветви. Вы хотите иметь возможность добавлять новые проекты в Jenkins для сборки и развертывания в своей тестовой среде интеграции, но вы не хотите вручную изменять имя ветви в каждом проекте Jenkins при изменении ветви, когда вам нужно работать с другой функцией.

Решение простое. В Jenkins используйте Environment variables:

Эти пары ключ-значение применяются для каждой сборки на каждом узле. Они могут использоваться в конфигурации Jenkins (как $ key или $ {key}) и будут добавлены в среду для процессов, запускаемых из сборки.

Например, вы можете объявить переменную DEV_BRANCH, чтобы указатьв свою ветвь функций, а затем в каждом проекте укажите Repository URL как ${DEV_BRANCH}/projectName

...