Git 如何使哈德逊自动生成&;安装发布工件,而不仅仅是快照?
我正在我的笔记本电脑上开发几个mavenised项目,并定期向github推广。我已经在云中设置了一个私有的hudson服务器,它可以轮询git存储库的更新,从而执行构建—到目前为止还不错 不幸的是,当我在笔记本电脑上执行“mvn发布:准备”以执行发布(比如“1.5”)时,发生的两个提交(将1.5-SNAPSHOT更改为1.5,然后将1.5-1.6-SNAPSHOT)一起推到我的git repo中,Hudson显然构建了最新的版本,即1.6-SNAPSHOT,并且完全忽略了1.5版本 这没什么大不了的,但是这些项目相互依赖,我想在我的POM中声明非快照版本。然而,当项目B依赖于项目A的1.5版时,在哈德逊盒子上的哈德逊用户的本地maven存储库中找不到它——因为它从未构建过——因此项目B的构建失败 如果我能让Hudson变得更聪明一点,当它看到一个maven发布版本飞过时,在继续构建稍后的快照提交之前,强制构建并安装该特定版本,那就太好了 我一直在浏览Hudson插件,尤其是“M2发布插件”: -然而,这个插件似乎更倾向于手动选择一个你想要升级到更正式的Maven Repo的构建,而不是强迫Hudson自动构建并安装它遇到的每个版本构建 更新:我的一些基本要求让我重新思考我想在这里实现的目标-为没有提前表达道歉:Git 如何使哈德逊自动生成&;安装发布工件,而不仅仅是快照?,git,maven-2,hudson,maven-release-plugin,Git,Maven 2,Hudson,Maven Release Plugin,我正在我的笔记本电脑上开发几个mavenised项目,并定期向github推广。我已经在云中设置了一个私有的hudson服务器,它可以轮询git存储库的更新,从而执行构建—到目前为止还不错 不幸的是,当我在笔记本电脑上执行“mvn发布:准备”以执行发布(比如“1.5”)时,发生的两个提交(将1.5-SNAPSHOT更改为1.5,然后将1.5-1.6-SNAPSHOT)一起推到我的git repo中,Hudson显然构建了最新的版本,即1.6-SNAPSHOT,并且完全忽略了1.5版本 这没什么大
- 大多数项目都是开源的或最终打算开放的,我希望任何人都能够
任何单个项目,签出发布标签,并执行git克隆
,而不需要任何其他依赖项的repo,但maven central除外mvn安装
- 为了获得一致的结果(在我的笔记本电脑、hudson服务器和其他人的签出中),这显然表明我更倾向于在POM中声明非快照依赖项(至少对于发布版本)
- 这让我走上了让Hudson“mvn安装”发布工件的道路,因为它们呼啸而过,这样以后,Hudson building project B就不会在找不到project A的发布版本时失败(这就是这个问题的来源)
- 我使用sonotype出色的oss托管,这需要GPG签名——我不想把我的GPG密钥存储在任何我拿不到的硬件上:)——所以把它塞进云中的Hudson服务器是不可能的
- 从精神上讲,让Hudson服务器发布对我来说有点陌生——我真的只想让它用于CI
release:perform
目标将:
<project>
<profile>
<id>local-deploy</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<distributionManagement>
<repository>
<id>local-repo</id>
<name>My Local Repo</name>
<url>file://my/local/repo/dir</url>
</repository>
</distributionManagement>
</profile>
<profile>
<id>remote-deploy</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>remote.repo.url</name>
</property>
</activation>
<distributionManagement>
<repository>
<id>remote-repo</id>
<name>My Remote Repo</name>
<url>${remote.repo.url}</url>
</repository>
</distributionManagement>
</profile>
</project>
本地部署
真的
本地回购
我的本地回购协议
file://my/local/repo/dir
远程部署
假的
remote.repo.url
远程回购
我的远程回购
${remote.repo.url}
然后您可以安全地运行
发布:执行目标,通过为remote.repo.url传递一个值,您还可以选择远程部署。我更新了我的问题描述,提到了我在POM中声明非快照依赖项的偏好(至少对于发布版本),以获得一致的结果(通过我的笔记本电脑、hudson服务器和其他人的签出)-我真的希望其他人能够签出我的代码,并且不去寻找不可知的快照依赖项
正是想在我的依赖项中使用非快照版本导致了这个问题——Hudson的正常行为并没有使使用“发布”版本变得容易,至少在不等待依赖项的发布版本循环到maven central的情况下是如此
然而,我已经决定,如果我想忠实于我的基本需求——人们可以轻松地签出并构建我的代码——那么这就是我必须做的:即等待maven central同步
我只想在发布版本中坚持这一点(否则我永远不会完成任何事情!),因此我很乐意使用snapshot deps进行开发,直到我真正想发布一个版本,我希望所有的deps都能在maven central中正常使用
直到最近,我才意识到有任何方法可以强制执行,但更多的谷歌搜索发现了我的“enforcer”插件:
-当“onlyWhenRelease”标志设置为true时,它看起来应该完美地执行我想要做的事情
那么,在回答我最初的标题问题时('如何c