.net - 使用 CruiseControl 将 SVN 头文件夹复制到 Release 文件夹

标签 .net svn cruisecontrol.net nant

我刚刚开始使用 CruiseControl.NET 和 nAnt,并且不太了解整个过程的工作原理。目前,我们的大多数解决方案都位于“安全”的 Visual Source 中,并让构建服务器使用 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 复制 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 文件,然后从那里运行。或者,我们需要将 trunkURL 从 .XML 传递到 .build,并从 .build 文件运行 svn 命令。

请帮忙!

最佳答案

一种选择是在每个成功的构建上标记(又名 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 将作为环境变量提供,您可能需要传入 release # 作为参数)

还可以查看nantcontrib,似乎有svn task

编辑

您可能想通过 labeller 查看 CC.Net 管理您的版本 #并通过 CCNetLabel 将其传递给 nAnt环境变量。从我读到的内容来看,您很可能想要 File Labeller因为其他人会自动为您生成标签,所以我个人使用迭代贴标器。

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

关于.net - 使用 CruiseControl 将 SVN 头文件夹复制到 Release 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535177/

相关文章:

build-process - 是否有针对 .NET 应用程序的预制持续集成解决方案?

.net - 实体数据模型向导中没有Oracle DataSource

Maven 和快照?

python - pySVN - 获取给定 url 的标签列表

cruisecontrol.net - 共享代码库和巡航控制测试

cruisecontrol.net - Windows 2003 的 Robocopy 不支持/DST 选项

.net - 以下正则表达式模式如何工作?

.net - 如何避免 XML 注入(inject)

javascript - 从 wcf 服务返回的 json 日期不一致

svn - 如何让某些使用 SVN 的开发人员只显示某些文件夹