У меня есть 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 - соответствующие интервалы опроса).
Есть ли более элегантное решение или решение с меньшей вероятностью?
Рад мой ответ работал для вас. Идите в команду! –