4

我前一段时间询问了以前获得continuous integration working in Delphi的帮助。对于使用巡航控制系统,一方的答案部分不完整(不适用于我)信息[这里] [2]。示例cruisecontrol.net与msbuild和delphi XE一起使用的ccnet.config?

我已经得到了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。

+0

我不认为CC.NET配置困难得多,如果您知道** right **命令行执行,那么区别在于创建XML文件(CC.NET)或单击网页(詹金斯)。在这里看到我的答案:http://stackoverflow.com/questions/9685102/cruisecontrol-or-cruisecontrol-net/9729765#9729765 – TridenT 2012-03-16 15:15:31

回答

5

这里是一个项目,是在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" /> 

或更换直接与真正的道路。

+0

@WarrenP它由CC.NET内部定义 – TridenT 2012-03-16 15:17:15

+0

@WarrenP oops,我犯了一个错误!你可以定义和使用$(MSBuildPath)(编辑回复)。关于$(WorkingBaseDir),这是一个内部定义。对困惑感到抱歉。 – TridenT 2012-03-16 16:06:52

+0

好吧现在有道理! – 2012-03-16 16:48:07

3

相反的<exec>,使用此:

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

添加一个触发器到您的项目:

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

其余的应该工作。

1

关于您的错误信息

[CCNet Server:ERROR] INTERNAL ERROR: Access to the path 'C:\Program Files (x86)\CruiseControl.NET\server\Project1\WorkingDirectory' is denied.

你应该定义工作目录和神器目录外CC.NET安装,像c:\builds

+0

这将作为评论更好。 – 2012-03-16 17:24:33

+0

你改变了这么快的问题:) – TridenT 2012-03-16 17:29:19

+0

对不起。我试图在历史问题上保持足够的理解,但有时候我编辑的东西太多了。 – 2012-03-16 17:42:37