Несколько проектов в CruiseControl.NET в одной очереди, запущенных одновременно
У меня есть несколько проектов в CruiseControl.NET (версия 1.4.4), которые я назначил для одной очереди...
<project name="Build - A" queue="Q1">
...
</project>
<project name="Build - B" queue="Q1">
...
</project>
<project name="Build - C" queue="Q1">
...
</project>
<project name="Build - D" queue="Q1">
...
</project>
Все проекты не являются инициированными - я (вместе со всеми другими разработчиками в отделе) использую CCTray, чтобы вручную запустить каждый проект. Проблема заключается в следующем: если во время работы проекта A другой пользователь использует Force Build для запуска другого проекта, он запускается одновременно с проектом A. Даже если они находятся в одной очереди. Я бы подумал, что запросы в одной и той же очереди будут... Я не знаю, поставлены в очередь и не выполняются одновременно. Я использую реализацию очереди по умолчанию "UseFirst".
Любая идея, как заставить проекты в очереди вести себя немного более как в очереди? Я хотел бы добавить проекты в планировщик времени, но без какой-либо уверенности в том, что не все проекты будут пытаться запускаться одновременно и убить мою печально слабую сборочную машину, я не осмелюсь попробовать это.
2 ответа
Странный. Я использую ту же конфигурацию, которую вы упомянули, и она ставит в очередь запросы на принудительную сборку Попробуйте обновить версию ccnet.
Ниже приведен (некоторые из) мой стиль конфигурации ccnet (он использует препроцессор):
<cruisecontrol
xmlns:cb="urn:ccnet.config.builder" xmlns="http://thoughtworks.org/ccnet/1/5">
<!-- Queue to make sure one build at a time - to avoid same folder SVN locking issues-->
<queue name="Q_Synchronizer" duplicates="UseFirst" />
<!-- ************ Common defs (CC.net pre-processor tags)*********-->
<cb:define local_svn_root="C:\svn"/>
<cb:define remote_svn_root="http://SVN_SERVER:8888/svn/"/>
<cb:define svn_exe="C:\Program Files\Subversion\bin\svn.exe"/>
<cb:define svn_user="SVNUSER" svn_pw="PPPPPWWWW"/>
<cb:define server_url="http://CCNET_SERVER/ccnet"/>
<cb:define build_timeout="900"/>
<cb:define name="msbuild_task">
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
<workingDirectory>$(local_svn_root)$(project_solution_path)</workingDirectory>
<projectFile>$(project_solution_file)</projectFile>
<buildArgs>/p:Configuration=$(project_solution_configuration) /p:VCBuildAdditionalOptions="/useenv" /v:diag /t:rebuild</buildArgs>
<timeout>$(build_timeout)</timeout>
</msbuild>
</cb:define>
<cb:define name="svn_dependency">
<svn>
<executable>$(svn_exe)</executable>
<workingDirectory>$(local_svn_root)$(internal_svn_path)</workingDirectory>
<trunkUrl>$(remote_svn_root)$(internal_svn_path)</trunkUrl>
<username>$(svn_user)</username>
<password>$(svn_pw)</password>
<timeout units="minutes">30</timeout>
</svn>
</cb:define>
<cb:define name="project_template" >
<project name="$(project_name)" queue="Q_Synchronizer" queuePriority="$(queuePriority)">
<workingDirectory>$(local_svn_root)$(project_solution_path)</workingDirectory>
<webURL>$(server_url)/server/local/project/$(project_name)/ViewLatestBuildReport.aspx</webURL>
<triggers>
<intervalTrigger seconds="30" name="continuous" buildCondition="IfModificationExists"/>
</triggers>
<sourcecontrol type="multi">
<sourceControls>
<cb:svn_dependency internal_svn_path="$(project_internal_svn_path)"/>
<cb:additional_svn_dependencies/>
</sourceControls>
</sourcecontrol>
<tasks>
<cb:msbuild_tasks/>
</tasks>
<publishers>
<xmllogger logDir="$(local_svn_root)$(project_solution_path)\BuildLogs" />
</publishers>
</project>
</cb:define>
<!-- ************* Projects definition ************-->
<cb:project_template
project_name="Proj A"
project_internal_svn_path="/code/"
project_solution_path="/code/Proj A"
project_solution_file="Proj A.sln"
queuePriority="1"
>
<cb:define name="msbuild_tasks">
<cb:msbuild_task project_solution_configuration="Debug"/>
<cb:msbuild_task project_solution_configuration="Release"/>
</cb:define>
<cb:define name="additional_svn_dependencies">
<cb:svn_dependency internal_svn_path="/bin"/>
</cb:define>
</cb:project_template>
<cb:project_template
project_name="Proj B"
project_internal_svn_path="/code/"
project_solution_path="/code/Proj B"
project_solution_file="Proj B.sln"
queuePriority="1"
>
<cb:define name="msbuild_tasks">
<cb:msbuild_task project_solution_configuration="Debug"/>
<cb:msbuild_task project_solution_configuration="Release"/>
</cb:define>
<cb:define name="additional_svn_dependencies">
<cb:svn_dependency internal_svn_path="/third-party"/>
</cb:define>
</cb:project_template>
</cruisecontrol>
Вы можете попытаться определить каждый проект в его собственной очереди со всеми другими очередями, добавленными в lockqueues
параметр (см. последний пример из конфигурации очереди)