我刚刚建立了一个Maven多模块项目,其版本如中所述https://maven.apache.org/maven-ci-friendly.html
属性${revision}在父POM中设置,并在所有模块中用作版本号。
这对于快照构建很好,但当我运行Maven release插件时,版本会被类似于1.0.0的东西所取代,然后是1.0.1-SNAPSHOT。因此,cifriendly版本在一次发布后就消失了。
有没有一种方法可以配置Maven发布插件,以保证ci友好版本不被销毁?
CI友好版本方案旨在取代Maven发布插件,而不是补充它。在当今的开发世界中,大多数团队都依赖CI服务器进行集成测试、执行自动化测试以及通过持续交付或持续部署发布。当一切都可能是SNAPSHOT
时,SNAPSHOT
的概念确实是有限的。
值得注意的是,发布插件执行的进程是正确实现的CI友好配置的4到5倍。想象一下,使用发布插件的50分钟构建变成使用CI策略的15分钟构建。这就是现代化!
基本思想是版本中使用的值将在构建时从DVCS(Git
、SVN
等)和CIS(Jenkins
、Travis CI
、GitLab
等)中收集,并用于修改或设置POM/发布版本。这些值是构建号、缩短的Git哈希或其他任何东西。
实现CI友好Maven构建的过程:
中的少数属性
在CI管道中,您现在可以通过清除所有或部分这些值来检测提交分支并从主节点执行释放。例如,功能分支可以计算和添加Git哈希。语义版本如上所述——开发人员现在拥有并控制它。他们必须知道自己的代码才能进行更改,并且可以自由地增加语义版本。这是非常有价值的灵活性。
然而,这里合理的推理是加快速度,摆脱一个重量级的过程,这个过程实际上只添加很少或没有相关信息,将代码与其精确起源联系起来。通过使用CI友好的版本,您可以让部署人员、测试人员和系统管理员看到编译编号和代码提交哈希,从而使问题与实际的代码版本精确关联。
应该指出的是,这需要一点哲学上的灵活性来接受范式的转变。改变是好的,放弃发布插件将使您的发布管道更好。
所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该
我们在maven发行版和maven版本插件上有一个问题。在詹金斯,我们想做释放自动按下一个按钮。为了消除快照依赖关系,我们希望使用maven versions插件。假设我们有两个项目A(最新版本0.0.1,最新快照0.0.2-快照)和项目B,它们依赖于Projecta-0.0.2-快照,我们希望发布项目B,我们如何将项目Bs依赖项升级到最新可用的发布版本?maven versions插件目标“us
我使用的是maven release插件,出现以下错误: [错误]无法执行目标组织。阿帕奇。专家plugins:maven release plugin:2.5.3:prepare(默认cli)on project***:“******”的版本未映射- 我从詹金斯那里运行这个任务,源代码在perforce中。我错过了什么?谢谢
我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(
我试图使用目标 release:prepare 生成一个版本,但是当我在 Eclipse 上运行它时,我得到了错误: 无法执行目标org.apache.maven.plugins:maven-estes-plugin:2.0-beta-7:项目mwFramework上的准备(default-cli):无法运行目标清理验证:执行过程中出错。无法运行程序“mvn”(在目录“/home/gnng/Dev
我试图释放,但失败了 MVN发布:执行 错误是 部署失败:未在POM inside distributionManagement元素或-DaltDeploymentRepository=id::layout::url参数中指定repository元素 pom。xml 我不明白这个问题。通过部署插件部署到快照存储库工作正常