您现在的位置是:首页 > cms教程 > discuz教程discuz教程

Discuz的NT持续集成实战

以山2025-06-24 22:57:48discuz教程已有5人查阅

导读从SVN中取出源代码到e:\source,编译后发布项目到e:\publish,可直接在IIS中运行。编译状态发送email通知相关人员。软件环境:(以下软件的安装过程非常简单,基本上一路Next就可以了。)

CruiseControl.net持续集成(ContinuousIntegration)每日构建(DailyBuild)Discuz!NTSVN
操作系统:win2003
版本控制:Subversion
程序编译:MSBuild
代码规范检查:Fxcop
目标:从SVN中取出源代码到e:\source,编译后发布项目到e:\publish,可直接在IIS中运行。编译状态发送email通知相关人员。软件环境:(以下软件的安装过程非常简单,基本上一路Next就可以了。)
CruiseControl.net
下载:ccnet.thoughtworks.com
安装目录:c:\C:\ProgramFiles\
Fxcop
下载:http://.microsoft.com/downloads/details.aspx?FamilyID=3389f7e4-0e55-4a4d-bc74-4aeabb17997b&DisplayLang=en
安装目录:c:\ProgramFiles\MicrosoftFxCop1.36
Subversion(SVN)下载:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
安装目录:c:\ProgramFiles\
环境配置主要的配置文件有三个分别是:配置文件说明文件位置生成方式
ccnet.config配置CruiseControl.net已经存在
DailyBuild.msbuild配置MSBuild编译目标项目手动生成
DiscuzNT.DailyBuild.FxCop配置Fxcop的检查目标E:\DailyBuild\DiscuzNT.DailyBuild.FxCopFxcop工具生成
publish.bat用户发布的批处理手动生成
filelist.txt对publish.bat的配置手动生成
配置CruiseControl.net(编辑CruiseControl.net的配置文件ccnet.config,其内容如下)
<cruisecontrol>
<project name="Discuz!NT3" webURL="http://10.0.3.4/ccnet/server/local/project/Discuz!NT3/ViewLatestBuildReport.aspx">
<workingDirectory >e:\source</workingDirectory>
<artifactDirectory>E:\DailyBuild\Log\3</artifactDirectory> <!-- 编译日志生成路径 -->
<labeller type="dateLabeller"></labeller>
<sourcecontrol type="svn"> <!-- 版本控制系统的类型 -->
<trunkUrl>https://code.comsenz.com/</trunkUrl> <!-- SVN的地址 -->
<workingDirectory>e:\source</workingDirectory> <!-- 把源代码检出到该目录 -->
<executable>c:\Program Files\Subversion\bin\svn.exe</executable> <!-- svn.exe所在路径 -->
<username>svnuser</username> <!-- 登录svn的用户名和密码 -->
<password>123</password>
</sourcecontrol>
<tasks>
<exec>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> <!-- MSBuild.exe 文件所在路径 -->
<baseDirectory>e:\source</baseDirectory> <!-- 对 e:\source 目录下的内容进行编译,实际上是解决方案文件或者msbuild文件所在目录-->
<buildArgs>DailyBuild.msbuild /p:Configuration=Debug /v:q</buildArgs> <!-- 编译参数 不懂的查MSBuild的帮助 -->
<buildTimeoutSeconds>1200</buildTimeoutSeconds> <!-- 编译超时时间 -->
</exec >
<exec executable="E:\DailyBuild\publish.bat"/> <!-- 编译后执行的批处理文件路径,该批处理文件用于项目发布 -->
<merge> <!-- 此节用于合并Fxcop生成的日志 到 编译日志里,最终作为Build Report -->
<files>
<file>E:\DailyBuild\log\3\DailyBuild.FxCop.xml</file> <!-- 该文件的名字是在 publish.bat 中 FxCopCmd命令的参数中指定的 -->
</files>
</merge>
</tasks>
<publishers>
<xmllogger logDir="E:\DailyBuild\Log\3\buildlogs" /> <!-- 编译日志存放路径 -->
<!-- 下面设置编译报告通过email通知相关人员 详细信息参考cc.net的帮助-->
<email from="admin@163.com" mailhost="smtp.163.com" mailhostUsername="admin" mailhostPassword="123" includeDetails="true">
<users>
<user name="dachuan" group="buildmaster" address="dachuan@163.com"/>
</users>
<groups>
<group name="buildmaster" notification="always"/>
</groups>
</email>
</publishers>
<triggers> <!-- 该触发器控制周一到周五的23点到0点的时间段内进行编译,每900秒检查一次svn有无更新 ,如果有就取出并编译-->
<filterTrigger startTime="08:00" endTime="23:00">
<trigger type="filterTrigger" startTime="23:00:00" endTime="23:59:59">
<trigger type="intervalTrigger" name="continuous" seconds="900" />
<weekDays>
<weekDay>Saturday</weekDay>
<weekDay>Sunday</weekDay>
</weekDays>
</trigger>
</filterTrigger>
</triggers>
</project>
</cruisecontrol>
配置MSBuild(将MSBuild的配置文件DailyBuild.msbuild放到和VS解决方案文件同级目录中,其内容如下)
<!-- 该文件与VS解决方案文件在同一目录 --> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="Build"> <MSBuild Projects="Discuz_vs08.sln" Targets="Clean;Rebuild"/> </Target> </Project>
配置DiscuzNT.DailyBuild.FxCop
FxCop的配置文件DiscuzNT.DailyBuild.FxCop可以通过FxCop的GUI工具生成,保存到E:\DailyBuild目录下。主要是选择检查目标然后选择配置文件保存位置,这个在此不详述。
编写发布批处理publish.bat内容如下:
xcopy e:\source e:\publish /E /y /D /EXCLUDE:E:\DailyBuild\filelist.txt
cd c:\Program Files\Microsoft FxCop 1.36
c:
FxCopCmd /project:E:\DailyBuild\DiscuzNT.DailyBuild.FxCop /out:E:\DailyBuild\log\3\DailyBuild.FxCop.xml
其中xcopy的参数/D指定了不复制修改日期相同的文件,这样就只把原时间比目标文件新的文件复制过来,减少了复制压力。/EXCLUDE参数中指定的filelist.txt文件中记录的是不需要复制的目录或文件,具体用法网上有很多资料。其内容如下:
.cs\
\_svn
\.svn
.csproj\
.sln\
.pdb\
.bat\
filelist.txt
.bak\
.user\
obj\
dnt.config\
其中有个技巧,例如.cs\这个包含一个"\",如果不写这个"\",那么所要文件名中包含"cs"的文件都不会被复制,
因此,本来我只是想不复制.cs文件,可是却连.css文件也不复制了。为了解决这个问题.cs后面需要一个"\"。
常见问题
编译成功能收到email通知,可是编译失败时却没有email通知
答:这个常见问题是因为把<email>配置节写在了<tasks>配置节里面,这样当编译失败时,流程从<tasks>中跳出,导致后面的<email>根本没有执行,解决方法就是把<email>放到<publishers>下。
生成的日志文件过大,在浏览器中查看buildreport的时候,浏览器就死掉了
答:注意MSBuild的编译参数<buildArgs>DailyBuild.msbuild/p:Configuration=Debug/v:q</buildArgs>其中/v:q指定了输出日志的级别,自己查看一下MSBuild的/v参数的说明就明白了。
后记:有了DailyBuild,我们可以在开发人员提交修改后,立刻生成一个可测试版本发布到IIS中,然后展示给用户看也好,开展黑盒测试也好,都非常方便,而且使用CruiseControl.net可以把单元测试也加入进来,这样每次编译后,自动生成单元测试报告,编码规范报告,真的是非常的方便。

本文标签:

很赞哦! (0)

暂无内容
暂无内容
暂无内容
暂无内容
留言与评论 (共有 0 条评论)
昵称:
匿名发表 登录账号
         
验证码: