不久前,我曾请求帮助在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:buildsccnet.config
,但我发现我可以使用命令行参数运行ccnet.exe(非服务模式),这让我解决了查找ccnet.config的问题。
以下是一个项目的示例配置块,如果存在修改,该项目将在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)DelphiCodeToDocSource</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)DelphiCodeToDocbuildlogs*.xml</file>
</files>
</merge>
<!-- Statistics -->
<xmllogger />
<rss/>
<statistics>
</statistics>
</publishers>
</project>
您可以通过以下方式定义变量$(MSBuildPath)
:
<cb:define MSBuildPath="C:WINDOWSMicrosoft.NETFrameworkv3.5" />
或者直接用真实路径替换它。
使用以下内容代替<exec>
:
<msbuild>
<projectFile>project1.dproj</projectFile>
</msbuild>
为您的项目添加触发器:
<triggers>
<intervalTrigger name="continuous" seconds="30"
buildCondition="IfModificationExists" initialSeconds="30" />
</triggers>
剩下的应该行得通。
关于您的错误消息
[CCNet服务器:错误]内部错误:访问路径"C:\Program"Files(x86)\CruiseControl.NET\server\Project1\WorkingDirectory否认。
您应该在CC.NET安装之外定义工作目录和工件目录,类似于c:builds
。