Git+Maven+Jenkins的增量发布

项目结构大致如下:

platform-server
├─doc
├─platform-base
├─platform-bom-dependencies
├─platform-commons
│  ├─platform-commons-core
│  ├─platform-commons-dubbo
│  ├─platform-commons-geo
│  ├─platform-commons-lang
│  ├─platform-commons-locker-default
│  ├─platform-commons-locker-redis
│  ├─platform-commons-messaging-rabbitmq
│  ├─platform-commons-proto
│  ├─platform-commons-swagger
│  └─platform-commons-web
├─platform-coupon
│  ├─platfrom-coupon-api
│  ├─platfrom-coupon-core
│  ├─platfrom-coupon-web
├─platform-order
│  ├─platfrom-order-api
│  ├─platfrom-order-core
│  ├─platfrom-order-web
├─platform-starter
│  └─platform-starter-chu-admin
│  └─platform-starter-chu-app
├─platform-system
│  ├─platform-system-api
│  ├─platform-system-core
│  └─platform-system-web
│─platfrom-member
│  ├─platfrom-member-api
│  ├─platfrom-member-core
│  ├─platfrom-member-web
└─......

platform-starter下的是最终制品,打包制品应用时,它的依赖会从maven本地仓库拉取。
开发过程中,修改了若干模块,希望能只重新编译和install有改动的模块,而不是整个项目(因为费时)。
但一个个记忆和发布改动的模块不仅繁琐而且容易遗漏, 所以希望能借助git的文件差异记录以及mvn命令自动完成这一过程.

使用Jenkins环境变量
在构建步骤中的"执行 shell"里新增以下脚本:

#!/bin/sh -e

# $GIT_PREVIOUS_COMMIT是Jenkins的环境变量,表示上次构建时的git提交id
# 只筛选platform开头的以排除类似doc这样的非模块改动
# 排除platform-starter,制品模块会单独构建,不参与增量发布
# 处理/src和/pom.xml以兼容一级模块
MODULES=`git diff --name-only $GIT_PREVIOUS_COMMIT|grep '^platform'|grep -v '^platform-starter'|awk -F "/" '{print $1"/"$2}'|sort|uniq|sed 's/\/src//g'|sed 's/\/pom.xml//g'|tr "\n" ","`

if [ "x$MODULES" != "x" ]
then
    echo 'module that be install:'
    echo $MODULES|tr ',' '\n'
    # -pl指定构建模块,多个用逗号隔开;如果多个模块间存在依赖关系,会自动先构建被依赖的模块
    mvn clean install -Dmaven.test.skip=true -pl $MODULES
else
    echo 'nothing to install.'
fi

如果不使用Jenkins, 可以使用分支或文件来记录commitid, 其它是一样的:

#!/bin/sh -e

# 这里使用分支来记录上次构建的commitid, 或者也可以把commitid记录到文件里, 需要的时候再读出来
# git rev-parse HEAD>GIT_PREVIOUS_SUCCESSFUL_COMMIT.TXT
if [ "x`git branch -a|grep build`" = "x" ];then
    git branch build
fi

MODULES=`git diff --name-only build|grep '^platform'|grep -v '^platform-starter'|awk -F "/" '{print $1"/"$2}'|sort|uniq|sed 's/\/src//g'|sed 's/\/pom.xml//g'|tr "\n" ","`

if [ "x$MODULES" != "x" ]
then
    echo 'module that be install:'
    echo $MODULES|tr ',' '\n'
    mvn clean install -Dmaven.test.skip=true -pl $MODULES
    git branch -D build
    git branch build 
else
    echo 'nothing to install.'
fi

以下情况无法兼容:

  • 删除模块, mvn install不存在的模块会报错.
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值