Меркуриал, субрепозитории и CI
Jan. 26th, 2014 03:44 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Достаточно давно не могу придумать, как настроить CI для такой организации нескольких проектов:
1) Есть базовые либы
2) Есть зависящие от них несколько промежуточных проектов (ну типа "общий гуй", "общий веб-сервис")
3) Есть конечные проекты, зависящие от базовых либ и промежуточных проектов.
Каждая группа проектов лежит в своем репозитории, все они являются субрепозиториями для общего репозитория, чтобы "достать все одним hg clone")
И есть желание, чтобы CI собирал таким образом: "при изменении в проекте собирается он и все зависящие от него рекурсивно по зависимостям". Чтобы, например, если коллеги меняют свой конечный проект - пересобирался только он, а остальные проекты не трогались.
Субрепозитории меркуриала хреново ложатся на идею "зависимости между проектами".
Проекты в дотнете можно сделать либо в виде зависимостей-по-исходникам (т.е. все либы включены в .sln файл в виде проектов) или в виде бинарных зависимостей (проекты ссылаются на артефакты билда базовых проектов в виде .dll файлов), первое очень быстро вырождается в sln с 50-100 проектов, второе - в безумное отслеживание зависимостей руками и msbuild скрипты по копированию результатов билда "куда надо".
CI и его триггера для сборки тоже в зависимости умеют непонятно как.
1) Есть базовые либы
2) Есть зависящие от них несколько промежуточных проектов (ну типа "общий гуй", "общий веб-сервис")
3) Есть конечные проекты, зависящие от базовых либ и промежуточных проектов.
Каждая группа проектов лежит в своем репозитории, все они являются субрепозиториями для общего репозитория, чтобы "достать все одним hg clone")
И есть желание, чтобы CI собирал таким образом: "при изменении в проекте собирается он и все зависящие от него рекурсивно по зависимостям". Чтобы, например, если коллеги меняют свой конечный проект - пересобирался только он, а остальные проекты не трогались.
Субрепозитории меркуриала хреново ложатся на идею "зависимости между проектами".
Проекты в дотнете можно сделать либо в виде зависимостей-по-исходникам (т.е. все либы включены в .sln файл в виде проектов) или в виде бинарных зависимостей (проекты ссылаются на артефакты билда базовых проектов в виде .dll файлов), первое очень быстро вырождается в sln с 50-100 проектов, второе - в безумное отслеживание зависимостей руками и msbuild скрипты по копированию результатов билда "куда надо".
CI и его триггера для сборки тоже в зависимости умеют непонятно как.
no subject
Date: 2014-01-26 01:28 pm (UTC)Всё это работает, если изменения делают святые люди, не сажающие в систему новые ошибки. А так, хорошо проверенные вещи внезапно перестают работать.
Единственное, что видел нормального на эту тему, самописанные скрипты, связанные с системой контроля качества. Новые версии библиотек подключаются только по зелёному свистку после полноценной проверки.
no subject
Date: 2014-01-26 01:32 pm (UTC)В релиз (отдельная репа, второй CI) это дело попадает только после прохождения автоматического и прочего тестирования и только по моей команде.
no subject
Date: 2014-01-26 01:29 pm (UTC)no subject
Date: 2014-01-26 01:34 pm (UTC)Я пытаюсь сделать такое:
1) Зависимости настраиваются 1 раз
2) Работник одной командой получает на своей машине готовую для работы копию
3) Работник может одной командой собрать полный билд
4) CI использует ту же команду для сборки.
no subject
Date: 2014-01-26 02:16 pm (UTC)no subject
Date: 2014-01-26 02:30 pm (UTC)no subject
Date: 2014-01-26 01:49 pm (UTC)no subject
Date: 2014-01-27 01:42 am (UTC)no subject
Date: 2014-01-26 02:05 pm (UTC)no subject
Date: 2014-01-26 06:34 pm (UTC)no subject
Date: 2014-01-27 02:58 am (UTC)no subject
Date: 2014-01-27 03:19 am (UTC)PS Специально посмотрел: nuget позволяет свои репозитории создавать
no subject
Date: 2014-01-27 05:44 am (UTC)no subject
Date: 2014-01-27 07:54 am (UTC)