metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-01-26 03:44 pm

Меркуриал, субрепозитории и CI

Достаточно давно не могу придумать, как настроить CI для такой организации нескольких проектов:
1) Есть базовые либы
2) Есть зависящие от них несколько промежуточных проектов (ну типа "общий гуй", "общий веб-сервис")
3) Есть конечные проекты, зависящие от базовых либ и промежуточных проектов.

Каждая группа проектов лежит в своем репозитории, все они являются субрепозиториями для общего репозитория, чтобы "достать все одним hg clone")
И есть желание, чтобы CI собирал таким образом: "при изменении в проекте собирается он и все зависящие от него рекурсивно по зависимостям". Чтобы, например, если коллеги меняют свой конечный проект - пересобирался только он, а остальные проекты не трогались.

Субрепозитории меркуриала хреново ложатся на идею "зависимости между проектами".
Проекты в дотнете можно сделать либо в виде зависимостей-по-исходникам (т.е. все либы включены в .sln файл в виде проектов) или в виде бинарных зависимостей (проекты ссылаются на артефакты билда базовых проектов в виде .dll файлов), первое очень быстро вырождается в sln с 50-100 проектов, второе - в безумное отслеживание зависимостей руками и msbuild скрипты по копированию результатов билда "куда надо".
CI и его триггера для сборки тоже в зависимости умеют непонятно как.

[identity profile] vit-r.livejournal.com 2014-01-26 01:28 pm (UTC)(link)
и все зависящие от него рекурсивно по зависимостям

Всё это работает, если изменения делают святые люди, не сажающие в систему новые ошибки. А так, хорошо проверенные вещи внезапно перестают работать.

Единственное, что видел нормального на эту тему, самописанные скрипты, связанные с системой контроля качества. Новые версии библиотек подключаются только по зелёному свистку после полноценной проверки.

[identity profile] metaclass.livejournal.com 2014-01-26 01:32 pm (UTC)(link)
Оно как раз против ошибок.
В релиз (отдельная репа, второй CI) это дело попадает только после прохождения автоматического и прочего тестирования и только по моей команде.

[identity profile] dr-cha0s.livejournal.com 2014-01-26 01:29 pm (UTC)(link)
я конечно не совсем сварщик... но все зависимости настраиваются в CI, например, jenkins, а не через студию, hg etc...

[identity profile] metaclass.livejournal.com 2014-01-26 01:34 pm (UTC)(link)
В этом есть зло.
Я пытаюсь сделать такое:
1) Зависимости настраиваются 1 раз
2) Работник одной командой получает на своей машине готовую для работы копию
3) Работник может одной командой собрать полный билд
4) CI использует ту же команду для сборки.

[identity profile] dr-cha0s.livejournal.com 2014-01-26 02:16 pm (UTC)(link)
зачем 4й пункт? ты же понимаешь что выпуск релизов и разработка разные вещи? кроме того для CI это можно настроить единожды.

[identity profile] berezovsky.livejournal.com 2014-01-26 02:30 pm (UTC)(link)
А скрипт для CI положить в репозиторий с базовыми проектами, чтобы CI определял изменения в репозитории и перенастраивал сам себя! O_O

[identity profile] berezovsky.livejournal.com 2014-01-26 01:49 pm (UTC)(link)
Круиз контроль вроде умел запускать билд и прочее по изменению в репозитории, только надо скрипт писать, какие билды по каким изменениям запускать и чё ещё делать.
(deleted comment)

[identity profile] darkdrip.livejournal.com 2014-01-27 01:42 am (UTC)(link)
Юра, ты опять бредишь? ты щизофреник, тебя надо лечить.

[identity profile] berezovsky.livejournal.com 2014-01-26 02:05 pm (UTC)(link)
Можно, конечно, написать тулзу, чтоб сама за репозиториями следила и дерева зависимостей между проектами строила, но это рак.

[identity profile] osdm.livejournal.com 2014-01-26 06:34 pm (UTC)(link)
Не понял вашей проблемы с 50-100 проектами в *.sln. У нас в *.sln около 200 проектов, меркуриал, три субрепо, CI через TeamCity. Все отлично работает и собирается через msbuild (правда, в скриптах для msbuild есть неизвестная мне магия).

[identity profile] anonim-legion.livejournal.com 2014-01-27 02:58 am (UTC)(link)
Сначала прочитал как Меркуриал, субрепозитории и 1С. Аж интересно стало.

[identity profile] theaspect.livejournal.com 2014-01-27 03:19 am (UTC)(link)
А в чем проблема? Пусть все собирается по мере поступления, а бинарные артефакты хранятся отдельно.

PS Специально посмотрел: nuget позволяет свои репозитории создавать
Edited 2014-01-27 03:21 (UTC)

[identity profile] permea-kra.livejournal.com 2014-01-27 05:44 am (UTC)(link)
Просто удивительно какие костыли городят люди, ниасилившие Make.

[identity profile] metaclass.livejournal.com 2014-01-27 07:54 am (UTC)(link)
Тут msbuild, какой еще нахрен мейк?