【问题标题】:Using SVN with CruiseControl?将 SVN 与 CruiseControl 一起使用?
【发布时间】:2009-03-02 20:07:34
【问题描述】:

我正在尝试使用CruiseControl 2.7.3(原版)来构建一个位于 SVN 存储库中的 Java 项目。

我的巡航配置使用svn plugin 作为修改集。当检测到修改时,将使用 Ant 计划构建。然后,该 Ant 构建文件使用 svnant Ant Task 对项目进行完整的检查。有一段时间,我们将此设置为仅签出“HEAD”,但我们遇到过构建不会触发一两次签入的情况,因为签入发生在修改集检查之后,但在 ant 调用之前svn结账。因此,我们正在尝试更改 ant 构建文件以使用修改检查检索到的修订号。

CruiseControl 配置参考页面声称属性svnrevision 已设置并传递给构建器,就像标签属性是labelincrementers 一样。当我按下 force build 按钮时,它似乎没有设置。

我需要做些什么来完成这件事吗?

【问题讨论】:

  • 究竟是哪个日志? Cruisecontrol.log、项目日志还是构建日志?
  • 哦,也许在您的问题中添加标签“颠覆”会让您多看几眼?
  • 离题了,但是 Hudson 好多了我不明白为什么人们仍然使用 CruiseControl...

标签: java svn continuous-integration cruisecontrol


【解决方案1】:

查看 SVN 源代码控制的代码,似乎 svnrevision 应该传递给构建器,从而传递给您的 Ant 调用。您是否尝试过使用 Ant 脚本中的属性?

回应评论中的问题:

那是因为在强制构建的情况下没有修改,所以没有修改修订号。在这种情况下,svnlabelincrementer 将传递您在本地拥有的最新版本号,这也是最新的。

【讨论】:

  • 我有一个 echo 可以打印出 svnrevision 属性。我刚刚添加了有关强制构建按钮的花絮。我认为这是真正的问题。
  • 那是因为在强制构建的情况下没有修改,所以没有修改修订号。在这种情况下,svnlabelincrementer 将传递您在本地拥有的最新数据,这也是最新的。
  • 我必须围绕它编写代码,以便执行结帐的脚本。直到今天我才意识到这是个问题。
【解决方案2】:

cruisecontrol ant 调用与这样构造的 (svn)label 无关。 svn 标签用于注释构建名称,而 build.log 实际上只是 ant 的输出,因为它是通过 Cruisecontrol 传递的。

如果您想将修订号写入 ant 构建输出,基本上有两种方法:

一种方法是让 ant 以某种方式与 svn 交互。 ant 中的 Svn 只能通过来自 tigris 的 contrib ant task 获得,因此将其放入您的 ant 文件并非易事。但是在您的构建中使用这个,您可以执行svn info 并将修订号作为 ant 属性获取。

另一种方法是使用 svnlabelincrementer 将修订号分配给标签,然后使用从 Cruisecontrol 传递到构建脚本的 buildproperties 将其传递给 ant 脚本。正如 Jay 在 cmets 中提到的,标签仅包含最后一次成功的构建修订,这不是他想要的。在this blog 上提出了一个修复方案,但在 ant 构建文件中进行工作似乎更合适。

【讨论】:

  • svnlabelincrementer 已经自动发送了它的 ${label} 属性。不幸的是,不能保证它只是工作路径中的最新版本。所以你不能将它传递给更新命令。
【解决方案3】:

您可以使用静默期设置吗?提交后,CruiseControl 可以等待一段时间(比如 30 秒),然后再开始构建。

它不会为每个提交触发单独的构建。相反,大约在同一时间提交将启动单个构建。

【讨论】:

  • 设置静默期只会延迟构建以等待其他签入,这些签入可能会在签入之后触发构建。这对 CVS 来说非常好,但对 SVN 来说用处不大。但这对我的问题没有帮助。
猜你喜欢
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多