【问题标题】:Maven versioning and release GIT repositoryMaven 版本控制和发布 GIT 存储库
【发布时间】:2018-01-15 17:29:45
【问题描述】:

我在一个 GIT 存储库中有多个 maven 项目。我想为 maven 项目执行单独的发布,将发布版本推送到 nexus,跳过标记并增加快照并提交。

使用的Maven发布目标

release:clean release:prepare release:perform

Maven 发布插件:

<plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${maven.releaseplugin.version}</version>
                    <configuration>
                        <tagNameFormat>v@{project.version}</tagNameFormat>
                        <autoVersionSubmodules>true</autoVersionSubmodules>
                        <releaseProfiles>releases</releaseProfiles>
                    </configuration>
                </plugin>

由于标记发生在存储库中,我想跳过 GIT 中的标记。我们将在代码冻结窗口期间手动进行标记。

我会避免为 Maven 项目创建单独的存储库。

您能告诉我如何以更好的方式实现它。

我也想了解其他公司是如何管理它的。

【问题讨论】:

  • 根据我的经验,在单个 git 存储库中管理多个相关项目是一场噩梦。如果可能的话,我建议你将项目分成几个 repos。
  • 在我们解决之前您好。我想详细了解您遇到的问题,以便我能清楚地理解..
  • 我了解像 google 和 Facebook 这样的公司维护单一存储库..
  • "我想详细了解您遇到的问题,以便我能清楚地理解。"评论不是进行此类讨论的最佳场所。来找我聊天,我有时间会回复的。

标签: git maven jenkins nexus maven-release-plugin


【解决方案1】:

我认为可用于 Maven 和 Nexus 的最佳(最简单和稳健)方式是:

  • 使用 SNAPSHOT 存储库。默认情况下,上传到 Nexus 时,SNAPSHOT 会替换为已解析的快照版本 - 它包含时间戳和增量编号。您可以自己构建和设置此版本:
VERSION=`mvn help:evaluate -Dexpression=project.version | grep -v "^\["| grep -v Download`
VERSION=${VERSION/%-SNAPSHOT/} #get rid of -SNAPSHOT if it's there
VERSION="$VERSION-"`date +"%Y%m%d.%H%M%S"`"-$BUILD_NUMBER"
mvn versions:set -DnewVersion=$VERSION
  • 将此版本放在某个可见的位置(例如 Jenkins Build 的描述)并在部署期间复制粘贴。
  • 因为您知道版本,所以您可以将其传递给下一个工作,使用自动化部署构建部署管道。

优点:

  • 没有标记,没有发布版本(它们与持续交付不兼容)
  • 非常简单,几乎不需要自定义脚本
  • 使用现有工具的功能。例如。您可以在 Nexus 中配置任务以删除非常旧的快照以释放空间。
  • 不取决于您管理 VCS 存储库的方式

【讨论】:

    最近更新 更多