我目前正在为我正在的项目构建一个持续集成框架,我想知道我是否能够从脚本调用 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检出。看看这里,看看你怎么能做到这一点。