java二方包Maven脚本
#!/bin/bash
# 发布的版本号
VERSION="$1"
# 发布的模块名,为null时,deploy整个工程,不为null时,deploy指定的模块及模块依赖的模块
MODULE_NAME="$2"
if [ -n "$VERSION" ]; then
echo "开始修改pom.xml中版本号为:"${VERSION}
mvn versions:set -DnewVersion=$VERSION -DprocessAllModules
if [ $? -ne 0 ];then
echo "[ERROR] 修改pom.xml版本号失败,详情请看上面日志"
exit 1
fi
mvn versions:commit
echo "修改pom.xml中版本号完成"
fi
echo "开始编译打包上传......"
if [ "$MODULE_NAME" = "src" ];then
mvn -U clean deploy -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true -s ../../settings/settings_isv_pro.xml -DaltDeploymentRepository=isv::default::https://xxx/nexus/repository/maven-releases/
elif [ -n "$MODULE_NAME" ];then
mvn -U clean deploy --also-make -pl ${MODULE_NAME} -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true -s ../../settings/settings_isv_pro.xml -DaltDeploymentRepository=isv::default::https://xxx/nexus/repository/maven-releases/
else
mvn -U clean deploy -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true -s ../../settings/settings_isv_pro.xml -DaltDeploymentRepository=isv::default::https://xxx/nexus/repository/maven-releases/
fi
if [ $? -ne 0 ];then
echo "[ERROR]编译打包上传失败,详情请看上面日志"
exit 1
fi
如何使用?
如下图,mvn-deploy.sh就是脚本文件,把脚本放到项目的目录下。
- 调整为脚本可执行文件
- 终端输入:./mvn-deploy.sh 1.0.28 access-boot-autoconfigure
其中: - 1.0.28是版本号,为null时使用项目中写的版本,不为null时,mvn会修改所有pom文件的版本号(注意,pom内容会变更)
- access-boot-autoconfigure是要deploy的模块,为null时,deploy整个工程,不为null时,deploy指定的模块及模块依赖的模块
解释说明
命令:mvn -U clean deploy -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true -s ../../settings/settings_isv_pro.xml -DaltDeploymentRepository=isv::default::https://xxx/nexus/repository/maven-releases/
-
-s:使用 -s 或 --settings 参数来指定要使用的 Maven settings.xml 文件
-
-DaltDeploymentRepository:指定deploy分发的仓库,其中:
- ‘isv’表示 distributionManagement 中 repository 元素的 id,如果deploy需要认证,需要与settings.xml文件server的id保持一致
- ‘default’表示使用默认的传输协议,例如 HTTP、HTTPS 或 SSH;
- ‘https://xxx/nexus/repository/maven-releases/’表示要将项目部署到的 URL。
- 这个配置会覆盖pom.xml中的配置,如果不指定,则使用项目的pom文件中配置的distributionManagement。
-
如果需要账号密码,并且配置在了settings.xml中,如下,确保id标签与-DaltDeploymentRepository第一个参数保持一致,本例中配置的isv。或者在mvn deploy后指定账号与密码
-Dmaven.deploy.username=<username> -Dmaven.deploy.password=<password>
<server> <id>isv</id> <username>admin</username> <password>nuq7tA4UC11yGtlD</password> </server>
k8s的应用
执行上面的脚本,需要把代码down下来,而且每次deploy都需要重复操作down代码。在实际的应用中,你可以这样:每次需要deploy时,部署一个镜像,镜像中执行两个脚本,第一个脚本是自动down代码,第二个就是上面的脚本,只不过脚本需要简单的改造。
我们以默认的maven配置、固定脚本的目录,将脚本变量注入到系统环境变量,这样可以简化变量的声明。
脚本位置
两个脚本放在同一目录:/home/docker/launcher
环境变量
export APP_NAME=
export GIT_URL=
export BRANCH=
export PACKAGE_VERSION=
export MODULE_NAME=
publish.sh
#!/bin/bash
# 二方包发布脚本
#---------环境变量-----------------------------
# 基础目录
BASE_HOME=/home/docker
# 脚本目录
SCRIPT=${BASE_HOME}/launcher
# 工作目录
WORK_HOME=${BASE_HOME}/workspace
# 编译工作目录
CODE_PATH=${WORK_HOME}/compile
#---------环境变量-----------------------------
#--------- 打印环境变量 ------------------------
# 开始时间
date '+%Y-%m-%d %H:%M:%S'
echo "===================环境变量============================="
echo "应用名: " ${APP_NAME}
echo "代码仓库: " ${GIT_URL}
echo "分支名: " ${BRANCH}
echo "打包版本号: " ${PACKAGE_VERSION}
echo "发布的模块名称: " ${MODULE_NAME}
echo "======================================================="
init() {
# 新建代码下载目录
if [ ! -d ${CODE_PATH} ]; then
mkdir -p ${CODE_PATH}
fi
}
download_code() {
cd ${CODE_PATH}
rm -rf ${APP_NAME}
echo "开始下载代码: ${GIT_URL}"
git clone -b ${BRANCH} ${GIT_URL} ${APP_NAME} --depth 1
if [ $? -ne 0 ]; then
echo "[ERROR] git clone 代码失败"
exit 1
fi
cd ${APP_NAME}
echo -n "下载代码 commit: "
git rev-parse HEAD
echo "代码下载完成......"
# cd ..
}
release() {
sh ${SCRIPT}/mvn-deploy.sh
if [ $? -ne 0 ]; then
echo "tips:上传返回状态码是400时,可能是 maven 仓库已经存在相同版本号的的依赖,不能重复上传 release 包"
exit 1
fi
}
echo "开始......"
# 初始化
init
# 下载代码
download_code
# 发布
release
if [ $? -ne 0 ]; then
echo "[ERROR] 发布失败, 请查看输出日志定位"
exit 1
else
echo "发布完成"
exit 0
fi
mvn-deploy.sh
#!/bin/bash
if [ -n "$PACKAGE_VERSION" ]; then
echo "开始修改pom.xml中版本号为:"${PACKAGE_VERSION}
mvn versions:set -DnewVersion=$PACKAGE_VERSION -DprocessAllModules
if [ $? -ne 0 ];then
echo "[ERROR] 修改pom.xml版本号失败,详情请看上面日志"
exit 1
fi
mvn versions:commit
echo "修改pom.xml中版本号完成"
fi
echo "开始编译打包上传......"
if [ "$MODULE_NAME" = "src" ];then
mvn -U clean deploy -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true
elif [ -n "$MODULE_NAME" ];then
mvn -U clean deploy --also-make -pl ${MODULE_NAME} -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true
else
mvn -U clean deploy -T 1C -Dmaven.compile.fork=true -Dmaven.test.skip=true -Dmaven.install.skip=true
fi
if [ $? -ne 0 ];then
echo "[ERROR] 编译打包上传失败,详情请看上面日志"
exit 1
fi