Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 有没有一种自动增加maven版本的好方法_Git_Maven_Continuous Integration - Fatal编程技术网

Git 有没有一种自动增加maven版本的好方法

Git 有没有一种自动增加maven版本的好方法,git,maven,continuous-integration,Git,Maven,Continuous Integration,我已经做了一段时间了,现在的情况是: 我有一个开发分支,每次推送之后,我都希望将当前的maven库发布为快照。目前,我通过使用exec插件和echo来检索我的maven版本(例如:--Dexec.executable=echo-Dexec.args='${project.version}'org.codehaus.mojo:exec maven插件:1.6.0:exec)) 然后,我使用updateversions命令将“-SNAPSHOT”注入到它并发布(我不会将它发布回分支,因为我真的不想

我已经做了一段时间了,现在的情况是:

  • 我有一个开发分支,每次推送之后,我都希望将当前的maven库发布为快照。目前,我通过使用exec插件和echo来检索我的maven版本(例如:--Dexec.executable=echo-Dexec.args='${project.version}'org.codehaus.mojo:exec maven插件:1.6.0:exec))
  • 然后,我使用updateversions命令将“-SNAPSHOT”注入到它并发布(我不会将它发布回分支,因为我真的不想保留“-SNAPSHOT”)
对于发行版,我想我可以做一些类似的事情,检索版本,然后找到一种方法来增加它->发布回当前活动的分支->然后最终进行部署。现在,我使用了一种稍微简单但容易出错的方法:我尝试获取我们使用的工件中设置的当前版本,如果它存在,我会通过一条消息使管道失败,说明该版本已经存在。现在不是很好,因为我实际上在这里反转一个错误条件,所以如果maven由于任何其他原因失败,它实际上假设版本不存在,并继续进行下一步。啊

现在,我在这里寻找的要点实际上是关于处理maven项目和版本控制的最佳方法。理想情况下,我的目标是:

  • 是否能够正确地将某些内容发布为快照(可能不必求助于maven exec)
  • 能够增量更新我的版本,这样用户就不必不断更新他们的版本了?当然,这个过程必须确保我不会将可能有错误版本的东西推给master(这将导致部署失败)。编辑:换言之,这里的意图不仅仅是将版本增加到“下一个”,而是增加到“下一个可用版本”,确保我不会尝试合并以前发布过的版本
我有一个限制:我们使用的工具不允许我们有合并挂钩(Azure DevOps和Azure Git)。这意味着我们仅限于拉(和PRs)上的管道,以及PR合并后的管道

我很高兴在这里采取任何其他现实的方法,我觉得我正在不遗余力地做一些事情,现在应该有一个明确的道路,所以我希望有人在这里有一些指导

然后使用updateversions命令向其注入“-SNAPSHOT” 和发布(我不会将其发布回分支,因为我没有 真的想保留“-快照”

不是判断,但在pom中对快照和发布使用无快照版本容易出错。快照表示“在开发人员中,小心”。发布表示“非常稳定,开始”。 如果有疑问或要返回到特定版本,开发人员必须确定提交指的是什么

理想情况下,我的目标>是:

能够正确地将某些内容发布为快照(可能没有快照) 不得不求助于maven exec

两种方式:

  • 在pom.xml中保持您的工件版本为
    -SNAPSHOT
    ,并通过剥离 <代码> -快照和标记/部署它,当您想将其视为发布时。
  • 将您的工件版本保留为no
    -SNAPSHOT
    (我不建议这样做),并使用 动态设置版本
您的pom属性可能看起来像定义为以下内容的版本:

 <version>${revision}${sha1}${changelist}</version>

 <properties>
    <revision>1.0.0</revision>
    <changelist></changelist>
    <sha1/>
 </properties>
能够以增量方式更新我的版本,因此用户不必 不断更新他们的版本?这个过程当然会 我必须确保我不会把可能有问题的东西推给大师 错误的版本(部署时会失败)

您可以依靠maven插件和脚本来实现这一点。
例如,要自动增加没有快照作为前缀的版本的第二位数字,如在linux系统上,您可以执行以下操作:

// get the current pom version and store it into a variable
version=$(mvn -q -U -Dexpression=project.version -DforceStdout maven-help-plugin:evaluate)
// increment the second digit of the version and overwrite the variable
version=$(echo ${version} |  awk -F'.' '{print $1"."$2+1"."$3}' |  sed s/[.]$//)
// update the pom with the new version
mvn -U versions:set -DnewVersion=${version}

由于sed,它既适用于3位数字版本,也适用于2位数字版本。

是对@davidxxx答案的补充。 使用build helper maven plugin可以改进这一点:

mvn build-helper:parse-version versions:set \
    -DnewVersion=\${parsedVersion.nextMajorVersion}.0.0 \
    versions:commit
或者像这样:

mvn build-helper:parse-version versions:set \
   - DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0 \
   versions:commit
没有任何sed等。更多详细信息:

我们构建了一个工具(注意:我正在使用它)来跟踪每个分支的不同版本、模式和增量

您可以定义每个分支的模式和PIN。此外,您不受SemVer的约束,也可以使用CalVer

也就是说,对于SemVer,您可以将项目版本设置为SemVer,而将dev branch的branch pin设置为Major.Minor.Patch SNAPSHOT。然后,它将使用普通SemVer增加主分支,dev branch将具有-SNAPSHOT后缀

这里有开源版本,也有SaaS版本(有很多额外的功能)。SaaS版本可以跟踪以前的版本,并允许您通过API进行干净的分支拆分

以下是我对上述所有细节的总结:

注意:最后还需要一个命令来将版本注入pom,为此,可以通过(在其他答案的建议之上)使用以下命令:


我不知道解析版本的目标。那太棒了。我将在下一次尝试:)啊,这对我帮助很大。这可能确实帮助我实现了我们的预期,非常感谢。我看了一下,但对我的案例没有帮助,因为它实际上并不寻找最新的部署版本。在重新阅读我的问题时,这不是很清楚,我将更新这些信息。我在想也许更新版本可以用来做这件事,或者至少可以检索最新发布的版本。你在版本控制中创建标签了吗?如果是这样,您可以假设来自版本控制的最新版本与部署的最新版本相同(如果不是)。你必须找到另一种方法。这是一个非常好的评论,但大多数都不能
mvn build-helper:parse-version versions:set \
   - DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0 \
   versions:commit
mvn versions:set -DnewVersion="$versionFromReliza"