2010-01-22 3 views
2

У меня есть 2 приложения, совместно использующие общую библиотеку. Оба приложения и библиотека находятся в активной разработке. Оба приложения включают файл проекта в их решение.Общие библиотеки кода и тестирование круиз-контроля

папки выкладываются в системе управления версиями, как:

Root 
    App1 
    App2 
    Library 

В настоящее время у нас есть отдельный круиз-контроль сборки настроены на запуск в любое время файл привержено иерархий app1, app2 или папке библиотеки. Успешная сборка библиотеки будет инициировать сборку приложений app1 и app2.

По большей части это хорошо работает; проблема в том, что кто-то совершает изменения как в библиотеке, так и в App1 (или app2). Это обычно происходит в результате реализации функции, которая требует модификации/добавления к чему-то в библиотеке, которая будет реализована. Когда это произойдет, активируются триггеры для создания Библиотеки (изменение в библиотеке \ foo.cs) и App1 (изменение в app1 \ bar.cs). Оба будут видеть, что файл Base \ Library \ foo.cs был изменен и пытается перестроить библиотеку. Только один будет успешным, потому что пожар, который начнет писать объектный файл для библиотеки, получит эксклюзивную блокировку файла; второй немедленно терпит неудачу. Это произошло несколько раз, заставляя кого-то войти и вручную повторить сборку, которая не удалась из-за блокировки.

Чтобы уменьшить риск повторения этого события, мы изменили интервалы опроса для каждого из триггеров, чтобы они были установлены на разные значения, чтобы попытаться избежать двух срабатываний одновременно. Это все еще не идеально, потому что циклы между Библиотекой и AppN будут возникать одновременно с каждой секундой N * M (N и M - соответствующие интервалы опроса).

Есть ли более элегантное решение или решение с меньшей вероятностью?

+0

Рад мой ответ работал для вас. Идите в команду! –

ответ

4

Да. Я считаю, что вы хотите поместить все 3 проекта в одну очередь. Это предотвратит одновременное создание проектов.

Вы хотите что-то вроде этого в файле CCNet.Config:

<project name="Library" queue="Q1" queuePriority="1"> 
<project name="App1" queue="Q1" queuePriority="2"> 
<project name="App2" queue="Q1" queuePriority="3"> 
Смежные вопросы