Tools:
Дженкинс вер. 1,470
Мейвен 2
Subversion
Environment
Предположим, что в моей сборке есть несколько проектов A-D. Граф зависимости существует, как показано. То есть: B зависит от классов в A, C зависит от классов в B, D зависит от классов в A. Мы создаем сборки jenkins так, чтобы они вызывали сборки, зависящие от них, как действие после сборки.
А
|--> В --> С
|--> D
Каждую ночь мы запускаем полную сборку в Jenkins (строит A, запускает B (запускает C), запускает D).Это делается достаточно легко, сказав A построить nightly, а остальные каскадировать.
Проблема
Однако при фиксации мы хотим собрать проекты, которые были зафиксированы один раз.
Ситуация 1: Мы опрашиваем репозиторий (или используем перехватчики коммитов, это не имеет значения) и обнаруживаем, что была фиксация на B, тогда B будет собираться, а C будет собираться. Успех!
Ситуация 2: мы опрашиваем репозиторий и обнаруживаем, что B и C были зафиксированы в одном коммите, затем Jenkins попытается собрать B (запустив сборку C) и построить C (вторая сборка). Неудача. Видишь, что происходит? C был построен дважды, что заняло драгоценное время сборки. Спешите строить!
Кто-нибудь знает способ запуска только самого высокого проекта в каждом зафиксированном конвейере сборки?
Я полагаю, что одним из решений может быть сложный хук SVN, определяющий самый высокий проект в каждом конвейере...
Подводные камни: Очень сложная хук фиксации SVN. Необходимо поддерживать конвейер в хуке SVN.
Я чувствую, что это проблема, с которой сталкивались другие. Есть ли подключаемый модуль Jenkins, который помогает в этом?