多模块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本地仓库明明有对应的jar包但还是报找不到的问题

    解决Maven本地仓库明明有对应的jar包但还是报找不到的问题

    这篇文章主要介绍了解决Maven本地仓库明明有对应的jar包但还是报找不到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Spring注解之@Lazy注解使用解析

    Spring注解之@Lazy注解使用解析

    这篇文章主要介绍了Spring注解之@Lazy注解使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring Cloud Nacos 和 Eureka区别解析

    Spring Cloud Nacos 和 Eureka区别解析

    Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服务框架中的服务注册和发现组件,用于帮助开发者轻松地构建和管理微服务应用,这篇文章主要介绍了Spring Cloud Nacos 和 Eureka区别,需要的朋友可以参考下
    2023-08-08
  • idea报错之找不到符号:类的问题及解决

    idea报错之找不到符号:类的问题及解决

    这篇文章主要介绍了idea报错之找不到符号:类的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java中extends与implements的区别浅谈

    java中extends与implements的区别浅谈

    java中extends与implements的区别浅谈,需要的朋友可以参考一下
    2013-03-03
  • Java 的可变参数方法详述

    Java 的可变参数方法详述

    这篇文章主要介绍了Java 的可变参数方法,可变参数只能作为函数的最后一个参数,在其前面可以有也可以没有任何其他参数,由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参数,下面我们一起进入文章了解更多关于可变参数的内容吧
    2022-02-02
  • java编程实现国际象棋棋盘

    java编程实现国际象棋棋盘

    这篇文章主要为大家详细介绍了java编程实现国际象棋棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Java编程利用socket多线程访问服务器文件代码示例

    Java编程利用socket多线程访问服务器文件代码示例

    这篇文章主要介绍了Java编程利用socket多线程访问服务器文件代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • springboot简单实现单点登录的示例代码

    springboot简单实现单点登录的示例代码

    本文主要介绍了springboot简单实现单点登录的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • SpringBoot实现RAS+AES自动接口解密

    SpringBoot实现RAS+AES自动接口解密

    本文主要介绍了SpringBoot实现RAS+AES自动接口解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论