我们在内部使用Maven和Subversion。我们也使用Maven的Release插件。我们在执行以下步骤时注意到下面描述的问题(我认为是正确的)。
**1.**我们运行release:prepare
:
- Maven将 Backbone.js 版本更新为
1.0.0
。 - Maven运行
svn copy trunk/myproject tags/myproject-1.0.0
,从而创建标记myproject-1.0.0
。 - Maven将 Backbone.js 版本更新为
1.0.1-SNAPSHOT
。
**2.**我们运行release:rollback
: - Maven将中继版本重置为
1.0.0-SNAPSHOT
。 - Maven不删除标签,因为Maven不做这种事情。
**3.**我们向trunk提交了更多的更改,显然是针对1.0.0-SNAPSHOT
版本。
**4.**我们再次运行release:prepare
: - Maven将 Backbone.js 版本更新为
1.0.0
。 - Maven运行
svn copy trunk/myproject tags/myproject-1.0.0
,以为它从最新的 Backbone.js 创建了标签myproject-1.0.0
,但是Subversion(1.6和1.7版本)会代Maven创建tags/myproject-1.0.0/myproject
.
**5.**我们运行release:perform
: - Maven检查标记
myproject-1.0.0
的内容。 - Maven构建内容并将结果部署到Nexus。
问题很明显:第3步中的更改没有进入标记。我们现在发布的1.0.0
没有更改。
问题是:我们如何解决这个问题?Maven的发布回滚特性是不是天生就被破坏了?
3条答案
按热度按时间yr9zkbsy1#
公平地说,
rollback
应该将项目和SCM重置为允许第二个prepare
发生的状态。* 这包括删除标签。* 答案现在很明显(谷歌搜索“maven release rollback remove tag”):http://maven.apache.org/maven-release/maven-release-plugin/examples/rollback-release.html:
在SCM中为该版本创建的分支/标记将被删除。注意:这尚未实现,因此您需要从SCM中手动删除分支/标记。有关详细信息,请参阅MRELEASE-229。
解决方案是强制
release:rollback
包含一个命令,使用类似org.codehaus.mojo:exec-maven-plugin
的东西删除SCM标记。除此之外,将rollback
Package 在一个脚本中,在外部执行此操作。83qze16e2#
自Maven Release Plugin版本3.0.0-M1
release:rollback
包含scm标记删除。参见https://issues.apache.org/jira/browse/MRELEASE-229mmvthczy3#
正如你所发现的,release:rollback在不清理SCM时没有太多的实用性。我们的商店所做的是设置我们的Jenkins自动化来运行“mvn release:prepare release:perform”与Jenkins M2 Release Plugin结合使用。
如果失败了,我们需要在Subversion中删除这个标签,但是,同样,我们必须使用rollback来执行这个操作.