我正在我的笔记本电脑上开发几个 mavenised 项目,并定期推送到 github。我已经在云中建立了一个私有的 hudson 服务器,它轮询 git 存储库以获取更新,从而执行构建 - 到目前为止一切都很好。
不幸的是,当我在笔记本电脑上执行“mvn release:prepare”以执行发布(比如“1.5”)时,发生的两个提交(将 1.5-SNAPSHOT 更改为 1.5,然后将 1.5 更改为 1.6-SNAPSHOT)被推送到我的 git 存储库——Hudson 显然构建了最新版本,即 1.6-SNAPSHOT——并且完全忽略了 1.5 版本。
没关系,但是项目相互依赖,我想在我的 poms.xml 中声明非快照版本。但是,当项目 B 依赖于项目 A 的 1.5 版本时,在 Hudson 盒子上的 hudson 用户的本地 maven 存储库中找不到它——因为它从未被构建过——因此项目 B 的构建失败。
如果我能让 Hudson 更聪明一点,那就太好了,当它看到一个 maven 发布版本飞过时,会强制构建和安装该特定版本,然后再继续构建稍后的快照提交。
我一直在查看 Hudson 插件,尤其是“M2 Release Plugin”:
http://wiki.hudson-ci.org//display/HUDSON/M2+Release+Plugin
-但是,该插件似乎更倾向于手动选择要升级到一些更官方的 Maven 存储库的构建,而不是强制 Hudson 自动构建和安装它遇到的每个发布构建。
更新:我的一些基本要求让我重新思考我想要在这里实现的目标 - 很抱歉没有早点表达它们:
- 大多数项目都是开源的或打算最终开放,我希望任何人都能够对
git clone
任何单个项目,签出发布标签,并在mvn install
不需要任何其他 repo 的依赖项但 maven central 的情况下进行操作。 - 为了获得一致的结果(通过我的笔记本电脑、hudson 服务器和其他人的结帐),这显然表明我倾向于在我的 pom 中声明非快照依赖项(至少对于发布版本)。
- 这使我走上了尝试让 Hudson 在它们呼啸而过时“安装”发布工件的道路上,这样以后,当 Hudson 构建项目 B 找不到项目 A 的发布版本时,它就不会失败(这就是这个问题来自)
此外:
- 我使用 sonotype 出色的 oss 托管,它需要 GPG 签名——而且我不想将我的 GPG 密钥存储在我无法拿在手中的任何硬件上 :)——所以将它安装在云中的 Hudson 服务器上是不是一个选择。
- 在精神上,让 Hudson 服务器发布版本对我来说有点陌生——我真的只是想要它用于 CI。