我刚刚开始使用CruiseControl.NET和nAnt,并且对整个过程的工作原理并不十分了解。我们目前在Visual Source“Safe”中拥有大部分解决方案,并使用AssemblyInfo文件自动为每个版本生成构建服务器标签。
我们正在将我们的VSS项目迁移到SVN,并相应地修改了项目构建文件以检出并更新SVN存储库。我们想要实现的是在源代码控制中获得源代码的副本,该副本与正在部署的项目的版本完全匹配。
我们的SVN如此设置:
svn://solution/
TRUNK/
RELEASES/
1.0.0/
1.2.0/
BRANCHES/
因此,当我们强制构建我们的解决方案时,其assemblyinfo版本设置为1.3.0,我们希望构建服务器将TRUNK目录复制到RELEASES / 1.3.0 /目录中。
SVN命令相当简单。 svn copy src / directory dst / directory。但是我会在哪里放置此命令,以及如何获取目标的版本号?
在构建服务器上,这是.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文件,然后从那里运行。或者,我们需要将.URML中的trunkURL传递给.build,并从.build文件运行svn命令。
请帮忙!
答案 0 :(得分:5)
一个选项是在每次成功构建时标记(也称为svn copy)。实际上有内置的功能。
我看到你启用了<tagOnSuccess>
真
您还应该设置<tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl>
或<tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>
您可能遇到的问题是每次成功构建,无论是强制还是连续都会标记。我猜你不想复制发布每个版本。
你能做的是
%CCNetRequestSource%
环境变量CCNetWorkingDirectory
将作为环境变量使用,您可能必须将版本号作为参数传递)还可以结帐nantcontrib,似乎有svn task
修改强>
您可能希望通过labeller查看CC.Net管理您的版本#,并通过CCNetLabel
环境变量将其传递给nAnt。根据我的阅读,你很可能想要File Labeller,因为其他人会自动为你生成一个标签,我个人使用迭代贴标机。
使用CC.Net标签符进行版本控制的好处是构建电子邮件将显示正确的发行版本,我相信<tagOnSuccess>
使用目录名称的标签。