多模块maven的deploy集成gitlab ci自动发版配置

 更新时间:2022年02月21日 09:49:20   作者:kl  
这篇文章主要为大家介绍了多模块maven项目deploy集成gitlab ci自动发版的配置流程步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助

背景

多模块的 maven 项目,抽象了通用的代码逻辑作为单独的 maven 模块,这样,不仅自己项目可以用,也可以提供依赖给其他项目用,那么这个时候需要将这个模块上传到 maven 私服,发布 maven 私服时,release 版本不支持覆盖,所以需要集成 ci 工具,给 maven 模块自动加上版本号,并自动完成 deploy 操作。本文方案依赖 maven 打包插件 flatten-maven-plugin,maven 版本要求大于等于 3.5.0

maven 配置

1、将 root 模块的 version 变量化,如新增如下的版本号 properties 参数

<modelVersion>4.0.0</modelVersion>
<groupId>com.github.kl</groupId>
<artifactId>demo</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>${project.artifactId}</name>
<modules>
    <module>core</module>
    <module>common</module>
    <module>admin</module>
</modules>
<properties>
    <revision>1.0</revision>
</properties>

2、子模块依赖父模块,依然使用 {revision} 占位符代替,依赖子模块使用revision占位符代替,依赖子模块使用{project.version},如:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.github.kl</groupId>
    <artifactId>demo</artifactId>
    <version>${revision}</version>
</parent>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<dependencies>
    <dependency>
        <groupId>com.github.kl</groupId>
        <artifactId>common</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

3、不纳入自动版本号的模块,指定 version,同时,这种模块也不需要 deploy 到私服,配置提过,如:

<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.github.kl</groupId>
        <artifactId>demo</artifactId>
        <version>1.0</version>
    </parent>
    <artifactId>admin</artifactId>
    <packaging>jar</packaging>
    <name>${project.artifactId}</name>
 
    <properties>
        <maven.deploy.skip>true</maven.deploy.skip>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>com.github.kl</groupId>
            <artifactId>common</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

4、root 模块添加支持外部传入版本号参数的构建插件 flatten-maven-plugin,添加私服仓库地址

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.1.0</version>
            <configuration>
                <updatePomFile>true</updatePomFile>
                <flattenMode>resolveCiFriendliesOnly</flattenMode>
            </configuration>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
                <execution>
                    <id>flatten.clean</id>
                    <phase>clean</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<distributionManagement>
    <repository>
        <id>repo</id>
        <url>https://nexus.dev.com/repository/maven-releases/</url>
    </repository>
</distributionManagement>

完成如上步骤后,deploy 时,就可以通过传入系统参数的方式,动态指定版本号,如:mvn  deploy -Drevision=xxx

gitlab ci 配置

1、在项目根目录创建文件 .ci/settings.xml ,  内容如下:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>repo</id>
      <username>${env.NEXUS_REPO_USERNAME}</username>
      <password>${env.NEXUS_REPO_PASSWORD}</password>
    </server>
  </servers>
</settings>

这个文件配置了 repo 的 maven 私服仓库 server,因为这个配置跟随项目的 git 走的,为了防止用户名和密码泄露,从环境变量中获取(提前在 gitlab 里配置好)

2、在.gitlab-ci.yml 中新增 build-deploy 流程

build-deploy:
  stage: build-deploy
  image: maven:3.6.3-openjdk-8-slim
  only:
    - master
    - dev
  variables:
    MAVEN_OPTS: "-Xmx512m -Xms512m -Dmaven.repo.local=$CI_PROJECT_DIR/repository"
  script:
    - mvn -s .ci/settings.xml --batch-mode clean deploy -Drevision=1.0-${CI_PIPELINE_IID}
  artifacts:
    paths:
      - admin/target
    expire_in: 1 week
  cache:
    paths:
      - repository

以上就是多模块maven的deploy集成gitlab ci自动发版配置的详细内容,更多关于maven deploy集成gitlab ci配置的资料请关注脚本之家其它相关文章!

相关文章

  • maven中no main manifest attribute的问题解决

    maven中no main manifest attribute的问题解决

    本文主要介绍了maven中no main manifest attribute的问题解决,这个错误通常意味着Spring Boot应用在启动时遇到了问题,下面就来具体介绍一下,感兴趣的可以了解一下
    2024-08-08
  • Java JDBC自定义封装工具类的步骤和完整代码

    Java JDBC自定义封装工具类的步骤和完整代码

    这篇文章主要给大家介绍了关于Java JDBC自定义封装工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • idea SpringBoot+Gradle环境配置到项目打包

    idea SpringBoot+Gradle环境配置到项目打包

    Gradle是一个基于Java应用的项目自动化构建工具,本文介绍了在IDEA中创建Spring Boot Gradle项目,项目配置包括init.gradle和settings.gradle,感兴趣的可以了解一下
    2024-11-11
  • hbase访问方式之java api

    hbase访问方式之java api

    这篇文章主要介绍了hbase访问方式之java api,需要的朋友可以参考下
    2017-09-09
  • Java中数组的一些常见操作和技巧分析

    Java中数组的一些常见操作和技巧分析

    这篇文章主要给大家介绍了关于Java中数组的一些常见操作和技巧分析的相关资料,数组(Array)是Java中的一种引用数据类型,是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理,需要的朋友可以参考下
    2023-08-08
  • 聊聊Redis二进制数组Bitmap

    聊聊Redis二进制数组Bitmap

    这篇文章主要介绍了Redis二进制数组Bitmap,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Springboot根据配置文件动态注入接口实现类详解

    Springboot根据配置文件动态注入接口实现类详解

    这篇文章主要介绍了Springboot根据配置文件动态注入接口实现类详解,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • java反射之获取类的信息方法(推荐)

    java反射之获取类的信息方法(推荐)

    下面小编就为大家带来一篇java反射之获取类的信息方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • java ConcurrentHashMap分段加锁提高并发效率

    java ConcurrentHashMap分段加锁提高并发效率

    这篇文章主要为大家介绍了java ConcurrentHashMap分段加锁提高并发效率,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • idea注入mapper报错报红的几种解决方案

    idea注入mapper报错报红的几种解决方案

    相信大家在使用idea的时候一定会遇到这样的问题,就是在service里注入mapper的时候,明明代码没有问题,也可以运行,但是idea它就是给你报个错,有个红色的波浪线在下面,所以本文将给大家介绍了idea注入mapper报错报红的几种解决方案,需要的朋友可以参考下
    2023-12-12

最新评论