如何在使用maven release-plugin和git进行发布时避免“更新被拒绝,因为远程包含工作内容”?

5

我们最近从SVN迁移到git。除了其他(意外的)在git上发布的问题之外,我想知道如何处理以下问题:

当我在Jenkins上启动发布运行时,如果一些开发人员(意外地)在发布的第一阶段推送代码,那么发布构建将失败,并显示以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project xyz: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] To ssh://[some-ip]/home/git/xyz
[ERROR] ! [rejected]        release/xyz-6.10 -> release/xyz-6.10 (fetch first)
[ERROR] error: failed to push some refs to 'ssh://[some-ip]/home/git/xyz'
[ERROR] hint: Updates were rejected because the remote contains work that you do
[ERROR] hint: not have locally. This is usually caused by another repository pushing
[ERROR] hint: to the same ref. You may want to first integrate the remote changes
[ERROR] hint: (e.g., 'git pull ...') before pushing again.
[ERROR] hint: See the 'Note about fast-forwards' in 'git push --help' for details.
[ERROR] -> [Help 1]

Jenkins用于启动发布构建的Maven命令是(我们在Windows上进行构建,因此不幸地需要激活-DautoVersionSubmodules,否则git add将包括所有修改的pom.xml,导致命令行过长):

mvn -B -DdevelopmentVersion=xyz-6.10.0-rc3-SNAPSHOT -DreleaseVersion=xyz-6.10.0-rc2 -Dtag=xyz-6.10.0-rc2 -Dresume=false -e -Dgoals=deploy -DautoVersionSubmodules=true -DcommitByProject=true -P[some-profiles] -T1C release:prepare release:perform -Darguments=-T1C

有没有一种简单的方法可以阻止其他用户推送(但允许Jenkins推送)?或者任何其他稳定的解决方法-或最佳实践?
使用的版本:
- Maven 3.3.9 - Maven Release-Plugin 2.5.3 - Git 2.8.1 - Jenkins 1.629 - Jenkins Maven Release插件0.14.0 - Windows 10
非常感谢您的帮助。

我可以请下投票者留言,告诉我在这个问题上应该改进什么或在新问题中做得更好吗?如果没有任何评论,仅仅是被踩,那么这并不鼓舞人心。谢谢! - Tom Fink
我遇到了同样的问题,只是在我执行发布操作时没有人推送到仓库。还有其他可能导致这个问题的原因吗? - Andrew
1个回答

2

希望您同意发布失败是正确的。在这种情况下,修复问题并进行另一个发布并不是什么大问题。 最简单的解决方法是:沟通 :) 简单地告知同事您计划进行此次发布。 我听说的另一种解决方案是:首先创建一个分支,然后从该分支进行发布。没有人会更改分支的内容,因此这应该是一个安全的解决方案,但需要额外的工作。由您决定是否值得这样做。大多数情况下不值得。


我希望我的问题已经尽可能清楚地表达了。我的问题不是构建失败,而是我正在寻找一种可靠的解决方案来避免这种情况发生。由于我认为有许多公司和组织在使用相同的设置,因此我期望有最佳实践来避免此错误。当然,沟通应该有所帮助。但正如我所表达的,我正在寻找一种始终有效的解决方案。 你的回答对我没有任何帮助,我认为负评并不合理! - Tom Fink
1
在发布之前,先进行分支处理(如所述)。 - Robert Scholte
分支可能是有道理的。但是你能否撤回你的反对票呢?我认为这是一个合理的问题,询问最好的解决方法。我从未抱怨错误是错误或失误。谢谢Robert。 - Tom Fink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接