【问题标题】:Hudson Perforce plugin - how can I automatically update versions without repeatedly triggering a buildHudson Perforce 插件 - 如何在不重复触发构建的情况下自动更新版本
【发布时间】:2011-05-09 15:48:53
【问题描述】:

我正在尝试使用 Hudson、Maven 和 Perforce 进行持续集成(使用 scm poll 来触发每个构建)

其中一项要求是在每次成功构建后自动更新 POM 快照版本号。

使用 Maven 发布插件这很简单,但签入新版本 POM 的行为会触发另一个构建 - 无限继续。

有没有办法在不触发另一个构建的情况下签入版本更新?当 scm 轮询决定重建时,似乎没有任何方法可以排除特定用户签入、特定更改列表或特定文件。

这似乎是一项基本要求 - 多年来一直使用 Cruise Control / Ant / Perforce,

干杯,

标记

【问题讨论】:

  • +1。作为记录,我相信这个问题也适用于 Subversion :-)。
  • @Matt Solint - Subversion 插件允许区域排除模式启用此功能,但 Perforce 插件不允许。 @Mark - 我建议联系 Perforce 插件作者,看看他们是否会添加此功能。
  • 啊哈。我没有意识到这些模式也适用于轮询。

标签: version-control hudson maven perforce


【解决方案1】:

我一直在考虑搬到 Hudson,但无法从 scm 投票中排除特定文件会破坏交易。您是否也在 Hudson 邮件列表上问过这个问题?

用户<at>hudson<dot>dev<dot>java <dot>net

通过阅读文档,我可以看到的唯一解决方法似乎是触发基于 p4 触发器的构建,然后您可以在其中以编程方式做任何您想做的事情,但这似乎不是一个非常简单的方法。

【讨论】:

  • 您可以轻松地从 SCM 轮询构建触发器中排除文件模式。它只是依赖于 SCM 插件。
【解决方案2】:

可以在提交后更新更改列表的描述,因此如果您构建到某个更改列表编号,则可以更新该更改列表的描述以包含您的内部版本号。这不应触发新的构建。

【讨论】:

    【解决方案3】:

    什么是“POM”?

    您可以让 Hudson “在 Perforce 中创建或更新标签”(请参阅​​项目配置的底部附近。)您可以将它与 Hudson 提供的 BUILD_NUMBER 环境变量一起使用,为您提供唯一的内部版本号和标记的 P4 标签说构建。

    【讨论】:

      【解决方案4】:

      我已经通过我们签入的构建代码完成了所有标记、ChangeLog 更新和打包。这使我们能够:

      • 无需启动另一个构建即可创建 RC 和适当的标签
      • 允许我们在任何开发机器上调试我们构建的所有方面,而不仅仅是使用 Hudson 的机器。
      • 使我们能够准确地重新创建包、标签等在过去任何时候是如何完成的。

      【讨论】:

      • 那么在开始构建之前你会更改 maven pom 文件吗?
      • 如果我真的使用 Maven,我会的。相反,我检查了 Makefile 和用于将源代码转换为可部署包的各种构建工具/脚本。
      【解决方案5】:

      我不相信有任何方法可以将 Hudson 配置为在轮询时省略部分 Perforce 工作区。通过设置两个不同的工作区,您可能会获得更好的运气——一个用于使用默认 POM 进行构建测试,另一个用于使用自动更新的发布 POM 进行发布。这两个工作区可能仅在这一个文件上有所不同,并且修改发布 POM 不会触发新的构建。

      查看如何在P4Guide 的工作区中进行单个文件映射。

      【讨论】:

      • 对于有很多项目的网站来说,这听起来像是一场维护噩梦,但它可以工作。据我所知,真正的解决方案是在 SCM 插件中添加一个功能。
      【解决方案6】:

      我在检查已编译的 src 时遇到了类似的问题。我能够找到替代方案,但我确实考虑了以下内容。

      1. 在 hudson 中指定要轮询的项目的子文件夹。 IE。实际上并没有让 hudson 检查你的项目,只是一个附带的文件夹。

      2. 添加一个 shell 脚本以正确检查您的项目。

      3. 运行普通脚本。
      4. 检查您的 pom。这里的诀窍是被轮询的文件夹不会[此时已更改。

      不理想,但有效。

      【讨论】:

        【解决方案7】:

        perforce 插件已经有一段时间了。它位于“查看蒙版”下的“高级”部分。

        基本上,您列出要轮询以检查更改的文件子集。不幸的是,没有简单的方法来排除文件,因此您必须创建一个文件规范列表,指定除您要排除的文件之外的所有内容。所以如果版本包含在 pom.xml 中,我需要指定不包含它的文件和目录。

        例如,如果您的目录结构如下所示:

        ./pom.xml
        ./lib/
        ./src/
        

        你会指定,

        //depot/project/lib/...
        //depot/project/src/...
        

        作为视图掩码,并选中复选框以仅将其用于轮询。此功能有一些限制,例如无法使用“-”来排除文件规范,但目前它仍然是一个可行的解决方案。

        【讨论】:

          猜你喜欢
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 2018-09-10
          • 2011-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          相关资源
          最近更新 更多