Как предотвратить параллельные сборки в CruiseControl.NET?
У нас есть несколько проектов в CruiseControl, и я заметил, что часто два или более проектов строятся одновременно. Это, кажется, вызывает конфликты. Часто сборка выходит из строя, и если я смотрю на причину, ей не удается получить доступ к некоторому файлу, и если я подожду, пока другая сборка не завершится, я могу просто принудительно построить неудачную сборку, и она будет успешной.
Как настроить CC так, чтобы он не запускал сборки одновременно, если они конфликтуют друг с другом?
Ответы
Ответ 1
Вы должны делать все сборки, зависящие друг от друга, в одной очереди.
Элемент конфигурации проекта управления круиз-контролем имеет два атрибута для управления concurrency и порядок сборки:
<project name="Project 1" queue="Q1" queuePriority="1">
С queue
вы можете определить, в какой очереди должен строиться проект, а queuePriority
вы можете определить порядок сборки, когда запрашивается несколько сборок.
Таким образом, два проекта, которые не могут быть построены параллельно, должны находиться в одной очереди, например queue="Q1"
. Когда второй проект зависит от первого, второй проект должен иметь более высокий приоритет, чем первый.
Ответ 2
Вы можете использовать функцию Locking для определения очереди, которая не должна запускаться одновременно.
Это доступно в версии 1.4.3
Пример из документации:
<cruisecontrol>
<queue name="Q1" lockqueues="Q2"/>
<queue name="Q2" lockqueues="Q1"/>
<project name="MyFirstProject" queue="Q1" queuePriority="1">
...
</project>
...
<project name="MySecondProject" queue="Q2" queuePriority="1">
...
</project>
...
</cruisecontrol>