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) это дело попадает только после прохождения автоматического и прочего тестирования и только по моей команде.