使用CruiseControl将头SVN文件夹复制到发布文件夹
我刚刚开始使用CruiseControl.NET和nAnt,并且对整个过程的工作方式没有很好的理解。我们目前在Visual Source'Safe'中拥有大部分解决方案,并且使用AssemblyInfo文件自动为每个版本标记构建服务器。使用CruiseControl将头SVN文件夹复制到发布文件夹
我们正在将我们的VSS项目迁移到SVN中,并相应地修改了项目构建文件以检出并更新SVN存储库。我们想要实现的目标是在源代码控制中拥有一个源代码副本,它与正在部署的项目版本完全匹配。
我们的SVN设置这样的:
svn://solution/
TRUNK/
RELEASES/
1.0.0/
1.2.0/
BRANCHES/
所以,当我们强迫建立我们的解决方案,设置为1.3.0的版本集信息,我们希望构建服务器复制TRUNK目录中,将释放/1.3.0/目录。
SVN命令非常简单。 svn copy src /目录dst /目录。但是我会在哪里放这个命令,以及如何获取目的地的版本号?
在构建服务器,这是一个.xml文件的一个例子:
<sourcecontrol type="svn">
<trunkUrl>svn://project/trunk</trunkUrl>
<workingDirectory>D:\Builds\project\Src</workingDirectory>
<executable>C:\Subversion\bin\svn.exe</executable>
<username>sf_service_dev</username>
<password>SFx4vi-r</password>
<tagOnSuccess>true</tagOnSuccess>
<cleanCopy>true</cleanCopy>
</sourcecontrol>
在我们这个项目.build文件(和很多课程更多):
<target name="Deploy_Release">
<property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/>
<echo message="fileandpathformyfile is ${fileandpathformyfile}."/>
<property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/>
<echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/>
<!--Use version as needed-->
<!--Create the release direcory-->
<mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/>
<!--Copy stuff to the release directory-->
<copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}">
<fileset basedir="${CCNetWorkingDirectory}\bin">
<include name="*.dll" />
<include name="*.exe" />
<include name="*.config" />
<include name="*.xml" />
<include name="*.stp" />
</fileset>
</copy>
</target>
现在,如果我想运行一个SVN命令将$ {trunkURL}复制到$ {trunkURL} /../ releases/$ {ReleaseNumber},那么我该如何执行此操作以及将以何种文件执行?我目前的理解是,我们需要从.build文件中获取ReleaseNumber,然后从.xml文件中运行。或者,我们需要将.XML中的trunkURL传递给.build,并从.build文件运行svn命令。
请帮忙!
一个选项是标记(又名svn副本)每个成功的构建。实际上内置了这个功能。
我看你有没有<tagOnSuccess>
启用 真正
你还应该设置<tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl>
或<tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>
你可能有,这是每一个成功的构建,无论是被迫还是连续打标签的问题。我猜你不想复制到发布每个版本。
你可以做的是
- 执行与nAnt exec task
- 写一个批处理文件if语句检查
%CCNetRequestSource%
环境变量ForceBuild - 执行命令行SVN操作(
CCNetWorkingDirectory
将作为环境变量,你可能必须通过释放#作为参数)
还可以结帐na ntcontrib,似乎有svn task
编辑
你可能想看看CC.Net通过labeller管理你的版本号,并通过CCNetLabel
环境变量将它传递给楠。从我读到的你最想要的File Labeller因为其他人自动为你生成一个标签,我个人使用迭代贴标机。
使用CC.Net labeller进行版本控制的优势是构建电子邮件将显示正确的发布版本,我相信<tagOnSuccess>
将标签用于目录名称。
大家知道,我们为构建服务器上的连续版本和发行版本分别配置了CC.NET配置文件。感谢您的帮助,这比我想象的要容易得多!干杯 – 2009-10-08 03:06:00
你可能想看看管理你的版本#的CC.Net,并将它传递给nAnt http://confluence.public.thoughtworks.org/display/CCNET/Labeller+Blocks你很可能想要文件标签器 – Ryu 2009-10-08 03:29:00
Can文件标签程序从AssemblyInfo文件中检索版本号?还是它只包含一个版本号?我们可以很容易地在.build脚本中通过ant生成一个version.file文件,但是如果工作已经完成,可以避免这种情况。 – 2009-10-08 23:44:00
你有没有使用nAnt一段时间,或者你是否同时开始使用CC.Net和nAnt。只是好奇你为什么不使用msbuild。 – Ryu 2009-10-08 02:27:51
我已经开始同时使用两者。对于我们较早的项目,我们进行本地编译,测试生产SOA,并从那里进行部署。 – 2009-10-11 20:43:50