持续集成 - 您可以从构建.xml文件调用 svn 存储库吗?



我目前正在为我正在的项目构建一个持续集成框架,我想知道我是否能够从脚本调用 svn 存储库,例如:

   <target name="test" depends="clean">
    <jmeter
       jmeterhome="${jmeter-home}"
       resultlog="results/jtl/JMeterTesting.jtl">
      <testplans dir="http://example/svn/repository" includes="/**/jmxFiles/*.jmx"/>
      <!--<testplans dir="${jtesting-home}" includes="/**/jmxFiles/*.jmx"/>-->
      <property name="jmeter.save.saveservice.output_format" value="xml"/>
      <property name="jmeter.save.saveservice.assertion_results" value="all"/>
      <property name="jmeter.save.saveservice.bytes" value="true"/>
      <property name="file_format.testlog" value="${format}"/>
      <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
      <property name="testData.fullPath" value="C:/TestData"/>
    </jmeter>
  </target>

所以它在 http://exmaple/svn/repository 中查找 .jmx 文件。

为什么,是的,你可以从构建脚本调用 Subversion 存储库.xml。这有几个问题:

  • 你如何获得你的构建.xml脚本?这不是已经在存储库中了吗?您不必签即可获取构建脚本吗?
  • 如果您执行更新,并且构建脚本本身已更新,该怎么办?
  • 您在构建中使用了什么修订版?詹金斯跟踪的那个,还是你修改和更新的那个?Jenkins sill 说这个构建是在修订版123456完成的,但由于这些变化,它可能是修订版123457甚至可能是123458。

最好在访问 build.xml 文件之前调用版本控制系统。幸运的是,Jenkins 让这一切变得非常非常简单。

如果你的构建过程需要 Subversion 版本号,可以在 Jenkins 的 $SVN_REVISION 环境变量中找到它。

你可能会说,但是我想存储在我的版本控制系统中的是我的构建结果!答案是:你不应该在 Subversion 中存储构建结果。

一个问题是构建结果在版本控制系统中占用了大量空间。文件以增量格式存储。也就是说,仅存储版本之间的差异。文本文件中可以有数千个更改,并且存储所有这些修订所需的空间量很小。二进制文件不同。它们占用了大量的空间。更糟糕的是,它们的使用寿命很短。一两年后,您的版本控制存储可以增长千兆字节,其中 90% 的存储专用于没有人需要的文件的二进制版本。

那你怎么办?你可以将构建结果存储在 Jenkins 中。创建一个名为 archive 或 artifacts_ 的目录,并将生成结果复制到该目录。然后,配置 Jenkins 作业以将所有结果保存在此目录中。

如果你使用的是Java构建(我假设是因为你在谈论构建.xml文件),你可以使用Maven或Ant与Ivy将你构建的jar文件存储到本地Maven存储库中。这样,这些罐子就可以用于您的其他项目。同样,您不必将它们存储在版本控制系统中。


现在您的问题的实际答案...

有一个<svn/>任务,但大多数人发现它工作得不太好。它依赖于JavaHL和SVN C API。相反,他们只是使用 <exec/> 任务直接调用他们的 Subversion 客户端。

这里唯一的问题是 Jenkins 使用 SVNKit 而不使用命令行客户端。确保 Jenkins SVNKit 构建工作目录与 SVN 命令行客户端的客户端版本相同。您可以在 Jenkins 系统配置中调整 SVNKit 客户端目录版本。

根据文档:

测试计划 :如果要指定多个测试计划文件,请使用 testplan 属性代替。此元素是标准的 Ant 文件集元素。

因此,您可以为此参数使用标准 ant 文件集,但肯定不能使用 url。

我建议你在运行jmeter任务之前编写另一个ant任务来执行svn检出。看看这里,看看你怎么能做到这一点。

相关内容

  • 没有找到相关文章

最新更新