Все началась, когда я поменял работу и сходу попал на большой проект. Большой для меня это несколько вендоров, десяток систем, 5-ти ступенчатый релизный цикл, 1000+ инженеров в разных локациях. Исходники «жили» в нескольких svn репозиториях с большим количеством maven модулей, каждый из которых мог использоваться в одной или нескольких системах. Каждый модуль был подключен в основную систему через бинарную зависимость. В конце релизного цикла необходимо было выпустить новые версии модулей и собранных на их основе систем. Под катом я опишу проблему эффективности этого процесса, с которой я попытался побороться — и что из этого вышло.
Кстати, по поводу основной кухни версионирования модулей и выпуска релиза нашел очень подходящую статью, за что очень благодарен автору. Крайне рекомендую предварительно ознакомиться, так как это поможет понять проблему, которую я описываю, а я очень не люблю «копипастить», чего и вам не советую.
Пример, как все работало на нашем проекте:
- Есть модули A, B, C и 2 системы X, Y;
- X собирается из A (версия 1.0.0), B (1.1.0);
- Y Собирается из B (1.8.0), C(1.0.0);
- Модуль B может зависеть, например, от А;
- Зависимости прописаны в корневых
pom.xml
каждой из систем, как бинарные (смотрите ниже); - В конце цикла разработки необходимо: выпустить релиз изменившихся модулей и новые версии X и Y (увеличить версию).
<dependencies>
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>1.1.0</version>
</dependency>
Проблема
- Есть люди, ответственные за релиз каждой системы. Соответственно, они были вынуждены в конце каждого релизного цикла (1 месяц) искать все изменения по всем модулям, новые версии которых должны были войти в релиз и после этого выпускать новые релизы изменившихся модулей и в правильной последовательности (см п.4 примера), обновить
секцию корневого pom.xml своей системы ссылками на свеженькие версии выпущенных модулей;
Модулей действительно много, некоторые менялись, некоторые – нет;
Инженеров тоже много и узнать, нужны ли изменения отдельно взятого модуля в системе X и Y обычно можно только с помощью человека, который делал эти изменения, и его начальника.