持续集成-能否从build.xml文件调用svn存储库?

持续集成-能否从build.xml文件调用svn存储库?,svn,maven,ant,jenkins,continuous-integration,Svn,Maven,Ant,Jenkins,Continuous Integration,我目前正在为我参与的项目构建一个持续集成框架,我想知道是否能够从脚本调用svn存储库,例如: <target name="test" depends="clean"> <jmeter jmeterhome="${jmeter-home}" resultlog="results/jtl/JMeterTesting.jtl"> <testplans dir="http://example/svn/repository

我目前正在为我参与的项目构建一个持续集成框架,我想知道是否能够从脚本调用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

根据:

testplans:当您想要指定多个测试计划文件时,使用而不是testplan属性。此元素是标准的Ant文件集元素

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

我建议您在运行jmeter任务之前编写另一个ant任务来执行svn签出。看看你是如何做到这一点的。

根据:

testplans:当您想要指定多个测试计划文件时,使用而不是testplan属性。此元素是标准的Ant文件集元素

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


我建议您在运行jmeter任务之前编写另一个ant任务来执行svn签出。看看您是如何做到这一点的。

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

  • 如何获取build.xml脚本?这不是已经在存储库中了吗?您不需要签出来获取构建脚本吗
  • 如果您进行了更新,而构建脚本本身也被更新了,该怎么办
  • 您的版本使用了什么版本?詹金斯追踪的那个,还是你咀嚼并更新的那个?Jenkins sill说这个版本是用123456版本完成的,但是由于这些变化,它可能是123457版本,甚至可能是123458版本
在访问build.xml文件之前,最好先调用版本控制系统。幸运的是,詹金斯让这变得非常简单

如果构建过程需要Subversion版本号,可以从Jenkins的
$SVN\u REVISION
环境变量中获得

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

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

那你是做什么的?您可以将构建结果存储在Jenkins的内部。创建一个名为archive或artifacts的目录,并将构建结果复制到那里。然后,将Jenkins作业配置为将所有结果保存在此目录中

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


现在你的问题的实际答案是。。。 有一种方法,但大多数人发现效果不太好。它取决于JavaHL和svncapi。相反,他们只是使用
任务直接调用Subversion客户端


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

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

  • 如何获取build.xml脚本?这不是已经在存储库中了吗?您不需要签出来获取构建脚本吗
  • 如果您进行了更新,而构建脚本本身也被更新了,该怎么办
  • 您的版本使用了什么版本?詹金斯追踪的那个,还是你咀嚼并更新的那个?Jenkins sill说这个版本是用123456版本完成的,但是由于这些变化,它可能是123457版本,甚至可能是123458版本
在访问build.xml文件之前,最好先调用版本控制系统。幸运的是,詹金斯让这变得非常简单

如果构建过程需要Subversion版本号,可以从Jenkins的
$SVN\u REVISION
环境变量中获得

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

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

那你是做什么的?您可以将构建结果存储在Jenkins的内部。创建一个名为archive或artifacts的目录,并将构建结果复制到那里。然后,将Jenkins作业配置为将所有结果保存在此目录中

如果您使用的是Java构建(我认为这是因为您谈论的是build.xml文件),那么可以使用Maven