【问题标题】:Sample cruisecontrol.net ccnet.config that works with msbuild and delphi XE?与 msbuild 和 delphi XE 一起使用的示例 Cruisecontrol.net ccnet.config?
【发布时间】:2012-03-29 23:49:23
【问题描述】:

我前段时间曾请求帮助获得continuous integration working in Delphi。一个侧面答案包含部分不完整(不适合我)信息 [此处][2] 用于使用巡航控制。

我已经让 Jenkins/Hudson 工作了,它的简单部分是(使用 Delphi)配置完全通过 Web 浏览器完成。但是使用 CruiseControl.net 设置起来要困难得多。

我希望看到一个示例 ccnet.config,它将使用来自 CruiseControl 的 MSBUILD 构建一个 hello-world delphi 项目 (Project1.dproj),并在每次修改 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>

更新:我最初无法让它从 ccnet.exe 读取c:\builds\ccnet.config,但我发现我可以使用命令行参数运行 ccnet.exe(非服务模式),这让我解决了查找我的问题ccnet.config.

【问题讨论】:

  • 我觉得CC.NET的配置难度并不大,如果你知道正确命令行来执行,那么区别就在于创建一个XML文件(CC .NET)或单击网页(Jenkins)。在这里查看我的答案:stackoverflow.com/questions/9685102/…

标签: delphi continuous-integration cruisecontrol.net delphi-xe


【解决方案1】:

如果存在修改,以下是在 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" />

或者直接替换成真实路径。

【讨论】:

  • @WarrenP 它是由 CC.NET 内部定义的
  • @WarrenP 哎呀,我搞错了!您可以定义和使用 $(MSBuildPath) (编辑回复)。关于 $(WorkingBaseDir),它是一个内部定义。很抱歉造成混乱。
【解决方案2】:

用这个代替&lt;exec&gt;

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

为您的项目添加触发器:

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

其余的应该可以工作。

【讨论】:

    【解决方案3】:

    关于您的错误信息

    [CCNet 服务器:错误] 内部错误:访问路径 'C:\Program 文件 (x86)\CruiseControl.NET\server\Project1\WorkingDirectory' 是 拒绝。

    您应该定义工作目录和工件目录在 CC.NET 安装之外,例如 c:\builds

    【讨论】:

    • 这作为评论会更好。
    • 你这么快就改问题了:)
    • 对不起。我试图在问题中保留足够的历史以使其有意义,但有时我编辑的东西太多了。
    • 如何精确地“定义 [...] CC.NET 安装之外的工件目录”而不必为每个项目都这样做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多