Пример cruisecontrol.net ccnet.config, который работает с msbuild и delphi XE? - PullRequest
4 голосов
/ 16 марта 2012

Некоторое время назад я попросил помощи, чтобы непрерывная интеграция работала в Delphi ранее. Один побочный ответ содержит частично неполную (не работающую для меня) информацию [здесь] [2] об использовании системы cruisecontrol.

Я заставил Дженкинса / Хадсона работать, и самое простое в этом то, что (с Delphi) конфигурация выполняется исключительно через веб-браузер. Однако с CruiseControl.net настроить намного сложнее.

Я хотел бы увидеть пример ccnet.config, который будет создавать проект hello-world delphi (Project1.dproj) с использованием MSBUILD из CruiseControl и автоматически перестраивать каждый раз, когда изменяются исходные источники subversion (или mercurial) ,

Пока у меня есть:

  • установлен и получил CruiseControl.net версии 1.6.7981 и работает.
  • Нет действительных проектов в моем ccnet.config

Вот мой ccnet.config, изначально у меня был <exec> и он был изменен, как предложено ниже, на <msbuild>:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
        <!-- CRUISECONTROL.NET Server configuration -->
        <project name="Project1">
            <tasks>
                <msbuild>
                    <projectFile>project1.dproj</projectFile>
                </msbuild>
            </tasks>
        </project>
</cruisecontrol>

Обновление: Изначально мне не удалось заставить его читать c:\builds\ccnet.config из ccnet.exe, но я обнаружил, что могу запустить ccnet.exe (не сервисный режим) с параметром командной строки, и это помогло мне решить проблему с нахождением моего ccnet.config.

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

Вот пример блока конфигурации для проекта, который перестраивается в 05:00, если есть изменения:

<!-- DelphiCodeToDoc Project -->
<project name="DelphiCodeToDoc" queue="Q1" queuePriority="1">
  <category>Delphi</category>
  <artifactDirectory>$(ArtifactBaseDir)\DelphiCodeToDoc</artifactDirectory>
  <workingDirectory>$(WorkingBaseDir)\DelphiCodeToDoc</workingDirectory>
  <triggers>
    <scheduleTrigger time="05:00" buildCondition="IfModificationExists" name="Scheduled" />
  </triggers>

  <!-- SVN implementation -->
  <sourcecontrol type="svn">
    <trunkUrl>http://dephicodetodoc.svn.sourceforge.net/svnroot/dephicodetodoc/trunk/DelphiCodeToDoc/</trunkUrl>
    <workingDirectory>$(WorkingBaseDir)\DelphiCodeToDoc</workingDirectory>
  </sourcecontrol>

  <!-- Build tasks to implement -->
  <tasks>

    <!-- Compile command-line application -->
    <msbuild>
      <executable>$(MSBuildPath)\MSBuild.exe</executable>
      <workingDirectory>$(WorkingBaseDir)\DelphiCodeToDoc\Source</workingDirectory>
      <projectFile>DCTD_cmd.dproj</projectFile>
      <buildArgs>/target:Build /p:Config=Debug</buildArgs>
      <timeout>900</timeout>
      <logger>$(MSBuildLogger)</logger>
    </msbuild>

  <!-- Publishing compiled results -->
  <publishers>
    <merge>
      <files>
        <file>$(ArtifactBaseDir)\DelphiCodeToDoc\buildlogs*.xml</file>
      </files>
    </merge>

  <!-- Statistics -->
    <xmllogger />
    <rss/>
    <statistics>
    </statistics>

  </publishers>
</project>

Вы можете определить переменные $(MSBuildPath) следующим образом:

  <cb:define MSBuildPath="C:\WINDOWS\Microsoft.NET\Framework\v3.5" />

Или замените его непосредственно на реальный путь.

3 голосов
/ 16 марта 2012

Вместо <exec> используйте это:

<msbuild>
  <projectFile>project1.dproj</projectFile>
</msbuild>

Добавьте триггер к вашему проекту:

<triggers>
  <intervalTrigger name="continuous" seconds="30"
    buildCondition="IfModificationExists" initialSeconds="30" />
</triggers>

Остальное должно работать.

1 голос
/ 16 марта 2012

По поводу вашего сообщения об ошибке

[Сервер CCNet: ОШИБКА] ВНУТРЕННЯЯ ОШИБКА: доступ к пути 'C: \ Program Файлы (x86) \ CruiseControl.NET \ server \ Project1 \ WorkingDirectory ' отказано.

вы должны определить рабочий каталог и каталог артефактов вне установки CC.NET , что-то вроде c:\builds.

...