当svn指向url时,CruiseControl modificationSet无法执行

时间:2010-05-13 19:55:06

标签: svn cruisecontrol svnant

在我目前的CruiseControl设置中,我运行以下目标:

<modificationset quietperiod="30">
       <svn RepositoryLocation="http://my/url/repo/trunk" />
</modificationset>

我对一个空白文本文件进行了简单的检查,随后我在CruiseControl日志中收到的消息如下:

[cc]May-13 15:53:56 Project       - Project mine:  bootstrapping
[cc]May-13 15:53:56 jectController- mine Controller: build progress event: bootstrapping
[cc]May-13 15:53:56 Project       - Project mine:  checking for modifications
[cc]May-13 15:53:56 jectController- mine Controller: build progress event: checking for modifications
[cc]May-13 15:53:59 Project       - Project mine:  No modifications found, build not necessary.
[cc]May-13 15:53:59 Project       - Project mine:  idle
[cc]May-13 15:53:59 jectController- connectfour Controller: build progress event: idle
[cc]May-13 15:53:59 Project       - Project mine:  next build in 1 minutes
[cc]May-13 15:53:59 Project       - Project mine:  waiting for next time to build
[cc]May-13 15:53:59 jectController- mine Controller: build progress event: waiting for next time to build

乌龟:TortoiseSVN 1.6.8,Build 19260 - 32 Bit,2010/04/16 20:20:11
CruiseControl:2.8.3

3 个答案:

答案 0 :(得分:2)

也许你需要一个本地检出版本的存储库,以便CruiseControl可以比较,所以它可以检测到变化?

我们在CruiseControl设置中执行此操作的方式:

我们有一个初始结帐例程,可以检查构建所需的所有项目。我们使用脚本/批处理文件来执行此操作,该文件直接从命令行对svn进行操作。

然后我们在CruiseControl设置文件中使用以下内容:

<modificationset quietperiod="60">        
  <svn username="${svn.user}" 
       password="${svn.password}" 
       localWorkingCopy="${dir.checkout}/db4oj" />
</modificationset>

对于我们签出的每个项目,我们在修改集中都有一个像上面这样的svn条目。

dir.checkout属性将指向文件系统中的具体路径。

答案 1 :(得分:1)

我没有完整的答案,但这是你可以尝试的:

  1. 打开CruiseControl的调试输出,它将打印出CruiseControl引擎发出的实际命令。
  2. 然后您将能够手动重新运行命令并检查它们的输出。
  3. 编辑:

    添加简单的log4j配置:

    log4j.logger.net.sourceforge.cruisecontrol.sourcecontrols=DEBUG
    

    导致CruiseControl日志中没有添加太多消息。但足以了解执行svn命令的内容。在我的日志中,我看到了:

    2010-05-17 20:57:16,808 [BuildQueueThread] INFO  BuildQueue    - now adding to the thread queue: test1
    2010-05-17 20:57:16,821 [Thread-22] INFO  Project       - Project test1:  bootstrapping
    2010-05-17 20:57:16,821 [Thread-22] INFO  jectController- test1 Controller: build progress event: bootstrapping
    2010-05-17 20:57:16,821 [Thread-22] INFO  Project       - Project test1:  checking for modifications
    2010-05-17 20:57:16,821 [Thread-22] INFO  jectController- test1 Controller: build progress event: checking for modifications
    2010-05-17 20:57:16,828 [Thread-22] DEBUG SVN           - Executing command: svn log --non-interactive --xml -v -r {2010-05-16T22:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
    

    现在,如果我手动发出相同的命令,我会得到'空'XML:

    $  svn log --non-interactive --xml -v -r {2010-05-16T22:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
    <?xml version="1.0"?>
    <log>
    </log>
    

    ...而不是更广泛的时间范围,例如:

    $  svn log --non-interactive --xml -v -r {2001-01-01T01:00:00Z}:{2010-05-17T18:57:16Z} http://localhost/svn/SomeProject/
    [...]
    

答案 2 :(得分:1)

为了给你另一个数据点,我尝试使用我的(相当旧的)CruiseControl设置,并且它有效。

  • CruiseControl v2.5
  • Subversion服务器v1.5.5(r34862)
  • Apache 2.0

我使用的是svn:// url,因此我更改为http url以匹配您的测试,重新启动巡航控件。等了一会儿(我分心了一个小时)然后在svn中提交了我的一个文件的更改。不久之后,由svn中的修改触发了新的构建。

编辑:为了澄清,我的巡航控制系统正在监视svn,例如svn://buildserver/svnrepo/project。您的OP使用http URL提及。为了更接近您的测试场景,我还想使用http网址。我通过apache映射了svn,所以我只是将我正在使用的URL更改为apache呈现svn repo的地方,例如http://devserver/svn/svnrepo/project更接近您的测试场景。

我的观点是要表明你想要做的事情确实有效。

这是我的CruiseControl config.xml文件中的一个已清理的片段。我正在使用maven(1.1beta3!)来构建。 Crikey,这个东西很旧,但它正在工作。

<project buildafterfailed="false" name="someproject-int">
        <plugin name="svn" classname="net.sourceforge.cruisecontrol.sourcecontrols.SVN">
        </plugin>
        <plugin name="svnbootstrapper" classname="net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper">
        </plugin>    
    <labelincrementer separator="_" defaultLabel="rev_1"/>
    <bootstrappers>
      <currentbuildstatusbootstrapper file="p:/build/cc-logs/someproject-int/status.txt">
      </currentbuildstatusbootstrapper>
    </bootstrappers>
    <modificationset>
      <svn repositoryLocation="http://dev/svn/project/trunk" 
      localWorkingCopy="p:/build/checkout/int/project"
      username="build" password="****">
      </svn>      
    </modificationset>
    <schedule interval="300">
      <maven goal="scm:svn-update-project|compile" 
        projectfile="p:/build/checkout/int/project/project.xml" 
        mavenscript="d:/Programs/build/Maven-1.1b3/bin/maven.bat">
      </maven>
    </schedule>
    <log dir="p:/build/cc-logs/project" encoding="ISO-8859-1">
    </log>
    <publishers>
    [...]
    </publishers>
  </project>