Как предотвратить параллельные сборки в 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>