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

目录
  • 背景
  • maven配置
  • gitlabci配置

背景

多模块的 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配置的资料请关注我们其它相关文章!

(0)

相关推荐

  • Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

    目录 一.概述 二.前期准备 三.总体架构图 四.环境搭建 1.环境准备(可选) 2.Gitlab安装 3.安装 Runner 4.安装应用服务器环境 五.创建 SpringBoot 项目 1.使用Gitlab Spring 模板快速创建一个 SpringBoot 项目: 2.添加环境变量(登录应用服务器密码) 六.总结 一.概述 本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包. 二.前期准备 准备三台 CentOS7服务器,分别部署以下服务: 序号 系统

  • Maven deploy配置方法详解

    作用 在本地的pom文件配置好之后,执行deploy命令,可以将maven所打的jar包上传到远程的repository,便于其他开发者和工程共享. pom.xml配置 首选,在pom文件中project标签下添加如下代码: <distributionManagement> <repository> <id>releases</id> <name>Internal Releases</name> <url>http://l

  • 如何利用Gitlab-ci持续部署到远程机器(详细教程)

    长话短说,今天聊一聊使用Gitlab-CI 自动部署到远程服务器. 看过这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占). SSH免密登陆 还是那句话,CI/CD实质是将我们手动集成.拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控. 要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账户. 先执行su gitlab-runner切换到git

  • GitLab+Jenkins+Maven+Tomcat 实现自动集成、打包、部署

    目录 一.安装 Tomcat 服务 二.在 Jenkins 上安装 Maven 1.安装 Maven 2.创建 Jenkins 任务 3.验证 一.安装 Tomcat 服务 1.安装 JDK JDK 下载地址:传送门(需要创建 Oracle 账号) [root@Tomcat ~]# ls anaconda-ks.cfg jdk-8u181-linux-x64.tar.gz [root@Tomcat ~]# tar zxf jdk-8u181-linux-x64.tar.gz [root@Tomc

  • Maven 打包项目到私服 (deploy)的配置方法

    一.配置maven 在maven安装目录 /conf/setting.xml 中的servers下添加: <servers> <server> <id>nexus-snapshots</id> <username>admin</username> <password>123456</password> </server> <server> <id>nexus-releases

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

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

  • Terraform集成简单Gitlab CI方案详解

    目录 一 背景 二 流程架构 2.1 架构图 2.2 流程 三 预置条件 四 配置 4.1 Gitlab CI配置 4.1.1 .gitlab.yaml 4.1.2 环境配置 4.2 Terraform资源 五 测试 六 注意事项 一 背景 利用Gitlab CI实现基础设施编排自动化,用户后续针对基础设施的管理使用Gitlab完成,提交基础设施变更后,会出发pr进行Gitlab CI流水线执行,从而实现基础设施DevOPS流程. 二 流程架构 2.1 架构图 2.2 流程 运维研发编写目标云的

  • Idea创建多模块maven聚合项目的实现

    1.怎么理解maven的继承和聚合 maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块)相互关联.多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理. 继承:和java中的继承有点类似,就是父pom.xml声明的版本和引用的jar,子模块可以不用再引用直接调用. 聚合:父模块包含多个子模块就是聚合,多个子模块之间可以调用,但是要注意关系,不要两个互相依赖,这样做的好处就是可以通过一条命令进

  • Intellij Idea 多模块Maven工程中模块之间无法相互引用问题

    一.问题背景 在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败 二.问题原因 模块间无法相互引用为IDEA的一个BUG 三.问题解决 1.点击项目右上角 [Project Struct](Mac快捷键: ⌘;) 2.选中modules->Dependencis-> + -> add Modules Dependency,选择你需要增加的依赖 3.如果 点击Apply无法确认,报错:删除source标签中已经有的依赖,点'x'即可删除 到此

  • Maven 命令行打包 和 pom.xml的常用配置详解

    maven 命令行打包 mvn -v, --show-version 现在最新的maven版本是 3.6,我这里用的还是 2017 年下载的 3.1.1 版本(虽然有点过时,但是大版本不变,指令基本一样) mvn -h, --help 使用 help 命令可以看到 maven 命令的帮助文档,下面主要介绍两个常用的指令 -- D 和 P. mvn -D, --define <arg> mvn -DpropertyName=propertyValue clean package 可以用来临时定义

  • maven如何在tomcat8中实现自动部署

    本文介绍了maven如何在tomcat8中实现自动部署,分享给大家,具体如下: 1.首先需要有tomcat,并且配置好用户. 配置的地方在tomcat的config文件中的tomcat-users.xml文件中 <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename=

  • springboot集成mybatis-maven插件自动生成pojo的详细教程

    1.生成springboot项目,选择mybatis.mysql(略过) 2.搭建mysql环境,打开服务,记录用户名及密码,新建业务表. 3.在resources文件夹下新建如图所示文件夹: 4.包路径配置(记住自己存放的路径,后面用): 5.在generator中新建文件generatorConfig.properties(统一存放需要的变量).generatorMapper.xml 6.generatorConfig.properties内容如下,(mysql的jdbc.url一定要加时区

  • angular8.5集成TinyMce5的使用和详细配置(推荐)

    编写人:mkl 日期:2020.11.16 本篇主要讲解的是TinyMce的配置,原理不做讲解,请自行查阅文档TinyM TinyMCE是什么? TinyMCE是一款易用.且功能强大的所见即所得的富文本编辑器.同类程序有:UEditor.Kindeditor.Simditor.CKEditor.wangEditor.Suneditor.froala等等. TinyMCE的优势: 开源可商用,基于LGPL2.1 插件丰富,自带插件基本涵盖日常所需功能(示例看下面的Demo-2) 接口丰富,可扩展性

  • SpringBoot集成Nacos实现注册中心与配置中心流程详解

    目录 SpringBoot整合Nacos 引入Maven依赖 增加配置 示例代码 SpringBoot整合Nacos 引入Maven依赖 首先,我们还是要引入 Maven 依赖 <!--注册中心的依赖--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <v

  • 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式,将整个系统划分为显示层.Controller层.Service层.Dao层四层,使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理, MyBatis作为数据对象持久化引擎. 一. 框架详情 Spring是一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的.Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何J

随机推荐