Несколько проектов в CruiseControl.NET в одной очереди, запущенных одновременно - PullRequest
3 голосов
/ 07 февраля 2011

У меня есть несколько проектов в 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 ]

4 голосов
/ 09 февраля 2011

Одд. Я использую ту же конфигурацию, которую вы упомянули, и она ставит в очередь запросы на принудительную сборку. Попробуйте обновить версию 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>
0 голосов
/ 07 февраля 2011

Вы можете попытаться определить каждый проект в его собственной очереди со всеми другими очередями, добавленными к параметру lockqueues (см. Последний пример из Конфигурация очереди )

...