使用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命令。

请帮忙!

+0

你有没有使用nAnt一段时间,或者你是否同时开始使用CC.Net和nAnt。只是好奇你为什么不使用msbuild。 – Ryu 2009-10-08 02:27:51

+0

我已经开始同时使用两者。对于我们较早的项目,我们进行本地编译,测试生产SOA,并从那里进行部署。 – 2009-10-11 20:43:50

一个选项是标记(又名svn副本)每个成功的构建。实际上内置了这个功能。

我看你有没有<tagOnSuccess>启用 真正

你还应该设置<tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl><tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>

你可能有,这是每一个成功的构建,无论是*还是连续打标签的问题。我猜你不想复制到发布每个版本。

你可以做的是

  1. 执行与nAnt exec task
  2. 写一个批处理文件if语句检查%CCNetRequestSource%环境变量ForceBuild
  3. 执行命令行SVN操作(CCNetWorkingDirectory将作为环境变量,你可能必须通过释放#作为参数)

还可以结帐na ntcontrib,似乎有svn task

编辑

你可能想看看CC.Net通过labeller管理你的版本号,并通过CCNetLabel环境变量将它传递给楠。从我读到的你最想要的File Labeller因为其他人自动为你生成一个标签,我个人使用迭代贴标机。

使用CC.Net labeller进行版本控制的优势是构建电子邮件将显示正确的发布版本,我相信<tagOnSuccess>将标签用于目录名称。

+0

大家知道,我们为构建服务器上的连续版本和发行版本分别配置了CC.NET配置文件。感谢您的帮助,这比我想象的要容易得多!干杯 – 2009-10-08 03:06:00

+0

你可能想看看管理你的版本#的CC.Net,并将它传递给nAnt http://confluence.public.thoughtworks.org/display/CCNET/Labeller+Blocks你很可能想要文件标签器 – Ryu 2009-10-08 03:29:00

+0

Can文件标签程序从AssemblyInfo文件中检索版本号?还是它只包含一个版本号?我们可以很容易地在.build脚本中通过ant生成一个version.file文件,但是如果工作已经完成,可以避免这种情况。 – 2009-10-08 23:44:00