使用Hudson + Git + Maven Release Plugin无法自动发布

时间:2009-12-09 21:29:57

标签: git maven-2 hudson

正如标题所说,我正在尝试在Hudson上开展自动发布工作。这是一个Maven项目,所有代码都在Git中。手动,我在我的个人机器上发布如下:

git checkout master
mvn -B release:prepare release:perform

这完美无缺。 Maven发布插件正确地将发布标记推送到原始存储库以及将版本压缩到下一个SNAPSHOT的下一个提交。

然而,当我通过Hudson运行这个相同的Maven工作时(通过创建我自己的“发布”工作或使用M2 Release Plugin),它不能很好地工作。 release标记被推送到原始存储库,并且该版本被推送到我们的Nexus存储库,但随后的提交将版本颠覆到下一个SNAPSHOT并不会消失。此外,原始存储库中的“主”分支根本不会更改。不过,我已经查看了Hudson的工作区,并且版本已经更新。

在查看Hudson作业的输出后,看起来Git插件实际上并没有签出“master”,而是它的SHA1 id。也就是说,如果“master”分支标签指向提交“f6af76f541f1a1719e9835cdb46a183095af6861”,Hudson确实

git checkout -f f6af76f541f1a1719e9835cdb46a183095af6861

而不是

git checkout -f master

因此,Maven发布插件所做的更改实际上并不在任何分支上(当然不在“master”上),并且这些更改不会进入原始存储库。它运行在正确的代码上,但是在簿记方面,这些变化似乎会丢失,因为没有分支标签指向它们。

有没有人让Hudson + Git + Maven Release Plugin组合正常工作?我可以设置一些额外的配置来实现这一目标吗?或者这是Hudson Git插件中的错误吗?

提前致谢。

5 个答案:

答案 0 :(得分:5)

编辑以消除过时信息。

有关当前(非hacky)解决方案,请参阅this answer

答案 1 :(得分:3)

在摆弄了一些东西之后,我尝试将自动发布设置为一个独立的工作(即,不使用M2 Release Plugin)。我没有将工作设置为“构建maven2项目”,而是将其作为“构建自由式软件项目”的工作。它首先要做的是执行shell命令:

git checkout master

下一步是Maven调用,这样配置:

-e -B release:prepare release:perform

第一个shell命令是关键;既然我实际上在一个分支上,那么发布插件执行的所有更改都会被推送回原始存储库。

虽然这在技术上回答了我自己的问题,但我仍然对其他人使用Hudson + Git + Maven Release插件的组合体验感到好奇。

由于

答案 2 :(得分:2)

如果我理解正确,这种行为是故意的,因为Nigel不相信maven应该致力于SCM。有一个相对无痛的解决方法(虽然最好不要解决任何问题)。我使用Hudson M2 Extra Steps插件并执行预构建步骤:

git checkout master || git checkout -b master

git reset --hard origin/master

这是在git检出sha-1之后但在maven开始构建之前执行的。这样做可以让我将master设置为git插件检出的内容。然后我使用maven-release-plugin来执行发布,并且SCM更改和部署工作正常。

答案 3 :(得分:0)

@meowsqueak:我遇到了同样的问题并修补了插件,将一个名为“GIT_BRANCH”的变量添加到构建环境中。如果您想尝试一下,修改后的插件可以下载@github:http://github.com/jberkel/Hudson-GIT-plugin/downloads。我还联系了上游作者,将其合并到主线。当然这并不能解决分离的HEAD问题,但至少你的构建脚本知道你所在的分支。

答案 4 :(得分:0)

我知道这是一个古老的问题,但仍然需要很好的答案。 做这里建议的: https://blogs.adobe.com/jzitting/maven-release-builds-with-jenkins-and-git/ “解决方案是在Jenkins构建配置屏幕上的高级Git设置下设置”Checkout / merge to local branch(optional)“选项。” 我放在那里“HEAD”,知道发布作品。