这前的两篇每日构建,写的简单了点,这里在之前的基础上做些改进,使得更加容易管理和配置。
每日构建改进一:build文件的共享。
在进行每日构建时,对于复制文件这部分功能我采用的是nant,nant最核心的部分是build文件,一般一个大型网站有时分好多个解决方案,例如酒店项目,机票项目等等,所以对应不同的解决方案会有不同的部署规则。而网站的部署往往不是一部到位,随着业务需求的变化,会产生不同的网站版本。但nant用的build文件应该是一样的,这里就需要build文件能够在不同的版本中共享。
解决方案:nant的build文件支持外部属性。先贴一个build文件:先看看copy节点,它需要两个重要的参数:源文件夹目录,目的文件夹目录,build文件中如果copy节点过多,我们需要写相当多的路径,这里可以在build文件中定义一个property节点,它相当于C#中的属性。一方面可以在copy命令中用这个属性来代替实际路径,另一方面是为了在外部调用build文件时动态给属性值。
<project name="Deploy" default="run">
<property name="basename" value="WebSite"/>
<property name="debug" value="true"/>
<property name="base.dir" value="http://www.cnblogs.com/../版本一/src" />
<property name="deploy.dir" value="http://www.cnblogs.com/../deploy/web" />
<property name="FxCop.dir" value="http://www.cnblogs.com/../deploy" />
<target name="clean">
</target>
<target name="deploy" depends="clean">
<copy todir="${deploy.dir}/new/member">
<fileset basedir="${base.dir}/member/">
<include name="**/*.js" />
</fileset>
</copy>
</target>
<target name="run" depends="fxcop">
</target>
<target name="fxcop" depends="deploy">
</target>
</project>
svn与nant是如何合作的:同样贴出代码。和我上篇文章有区别的就在于增加了buildArgs参数,通过"-D"来连接想要重写的属性内容。多个属性中间用空格区分。当版本二进行每日构建时,只需要修改ccnet的project配置即可,原来的build文件不需要改动。
<executable>C:\min.jiang\bin\nant.exe</executable>
<baseDirectory>C:\min.jiang\proj\EL_Online_V36_11.02_1215</baseDirectory>
<nologo>false</nologo>
<buildFile>C:\min.jiang\bin\DeployScripts\Hotels\default.build</buildFile>
<targetList>
<target>run</target>
</targetList>
<buildArgs>-D:deploy.dir=C:\min.jiang\deploy\版本一\package\web -
D:base.dir=C:\min.jiang\proj\版本一\src</buildArgs>
<buildTimeoutSeconds>1200</buildTimeoutSeconds>
</nant>
每日构建改进二:部署包自动提交SVN。
ccnet在部署包生成后,会存放在ccnet服务器上,其它的同事想要获取这个部署包,只能登录服务器,或者是从共享文件夹中获取,既然有了SVN,我们就可以把生成的部署后放进SVN。修改的deploy.bat如下:
shift
if exist "C:\min.jiang\deploy\%0\package\Web_auto.rar" del /F C:\min.jiang\deploy\%0
\package\Web_auto.rar
说明:这里先检测本地部署文件目录中是否有部署包,如果有先删除。
"C:\Program Files\WinRAR\rar.exe" A -r -ep1 -ed -ta%1 C:\min.jiang\deploy\%0
\package\Web_auto.rar -AD C:\min.jiang\deploy\%0\package\web
说明:按时间来实现增量压缩(压缩包中只包含指定时间之后修改的文件)。
if not exist "C:\min.jiang\deploy\%0\Web_auto.rar" svn checkout http://svn/路径/web3.5/%0/
"C:\min.jiang\deploy\%0" --username aaa --password aaa
说明:如果SVN部署目录中没有部署包,先从SVN上下载。
if exist "C:\min.jiang\deploy\%0\Web_auto.rar" svn revert "C:\min.jiang\deploy\%0\Web_auto.rar"
说明:保证本地版本和SVN版本内容相同。
xcopy C:\min.jiang\deploy\%0\package\Web_auto.rar C:\min.jiang\deploy\%0\ /y
说明:把本地的部署包复制到SVN部署目录下。
svn commit -m "update new package" C:\min.jiang\deploy\%0\Web_auto.rar
说明:提交最终的部署包。
上面的代码目前有一个缺陷,就是事先需要手动在SVN部署目录下面创建一个Web_auto.rar,然后提交SVN,我在调用svn add C:\min.jiang\deploy\%0\Web_auto.rar后,执行svn commit时,会提示文件不在SVN控制下。大家如果原因,请指教。
每日构建改进三:设置ccnet网站。
默认情况下,ccnet安装后会在默认网站下生成一个虚似目录,为了方便访问,我们可以建立一个站点,例如主机头定义为http://www.ccnetsite.com/,这样同事只需要把自己本机的host指向到ccnet服务器IP,以后生成部署包只需要打开http://www.ccnetsite.com/就可以进行管理。