Linux环境利用Git+Maven自动发布项目工程并启动

本说明是以Git为托管工具发布SpringBoot的Jar包,SVN的请参考Linux环境利用SVN+Maven+Tomcat自动发布项目工程

直接上代码

start.sh 文件

#!/bin/bash

# ################################### #
#                                     #
#         定义变量                    #
#                                     #
# ################################### #
# 日期变量
date=$(date "+%Y%m%d")
datetime=$(date "+%Y%m%d%H%M%S")

# Git用户名/登录密码 @符号填写为 %40
git_user_name="yqn%40126.com"
git_password="1234"

# 工程Git地址  请注意格式 
git_url='http://'${git_user_name}':'${git_password}'@172.0.0.1/li/server.git'

# Jar 包名称
jar_name="comp.jar"

# 工程包名称
project_name="server"

# 基础路径
base_path="/usr/local/comp"

# 日志路径
log_file=${base_path}/"logs"/${project_name}_${date}.log

mkdir -p ${base_path}/"logs"

echo '# ############################################################################################## #' >> ${log_file}
echo '#        ------------------------------- 开始 ------------------------------------------         #' >> ${log_file}

echo '[日志|准备('${datetime}')]日志文件路径:'${log_file}
echo '[日志|准备('${datetime}')]日志文件路径:'${log_file} >> ${log_file}

echo '[日志|准备('${datetime}')]Git地址:'${git_url}
echo '[日志|准备('${datetime}')]Git地址:'${git_url} >> ${log_file}

echo '[日志|准备('${datetime}')]本地基础路径:'${base_path}
echo '[日志|准备('${datetime}')]本地基础路径:'${base_path} >> ${log_file}

# 环境 dev/sit/uat/prd
profile='sit'

# ############################################################ #
#                                                              #
# 除非必要 请只修改该参数即可 为Git Tag编号                    #
#                                                              #
# ############################################################ #
git_tag='develop-20190819-v1.0'


echo '[日志|开始('${datetime}')]sh auto_publish.sh' ${git_url} ${jar_name} ${project_name} ${base_path} ${log_file} ${git_tag} ${profile}
echo '[日志|开始('${datetime}')]sh auto_publish.sh' ${git_url} ${jar_name} ${project_name} ${base_path} ${log_file} ${git_tag} ${profile} >> ${log_file}

# 启动自动部署程序  说明  ComPayRoll-rights-20190408  为Git分支名称
sh auto_publish.sh ${git_url} ${jar_name} ${project_name} ${base_path} ${log_file} ${git_tag} ${profile}

auto_publish.sh 文件

#!/bin/sh

#定义变量
date=$(date "+%Y%m%d")
datetime=$(date "+%Y%m%d%H%M%S")

# 工程Git地址
git_url=$1

# Jar 包名称
jar_name=$2

# 工程包名称
project_name=$3

# 基础路径
base_path=$4

# 日志路径
log_file=$5

git_tag=$6

profile=$7


echo '[日志|开始('${datetime}')] >>>>>>>>>>>>>>>>> 开始 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
echo '[日志|开始('${datetime}')] >>>>>>>>>>>>>>>>> 开始 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> ${log_file}

# 当前工程路径
source_code_path=${base_path}"/sourcecode"
echo '[日志|开始('${datetime}')]下载源码本地路径:'${source_code_path}
echo '[日志|开始('${datetime}')]下载源码本地路径:'${source_code_path} >> ${log_file}


echo '[日志|开始|下载源代码('${datetime}')]从GIT服务器提取最新代码 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> ${log_file}

# 先删除上次已经下载的源代码
echo '[日志|开始|删除上次下载的源代码('${datetime}')] rm -rf '${source_code_path}/${project_name}
echo '[日志|开始|删除上次下载的源代码('${datetime}')] rm -rf '${source_code_path}/${project_name} >> ${log_file}
rm -rf ${source_code_path}/${project_name}

echo '[日志|下载中|下载源代码('${datetime}')] git clone '${git_url} '-b' ${git_tag} ${source_code_path}/${project_name}
echo '[日志|下载中|下载源代码('${datetime}')] git clone '${git_url} '-b' ${git_tag} ${source_code_path}/${project_name} >> ${log_file}
git clone ${git_url} -b ${git_tag} ${source_code_path}/${project_name}

#开始编译打包
echo '[日志|下载完成|Maven开始编译工程('${datetime}')] mvn clean install -Dmaven.test.skip=true -P'${profile}' -f '${source_code_path}'/'${project_name}'/pom.xml'
echo '[日志|下载完成|Maven开始编译工程('${datetime}')] mvn clean install -Dmaven.test.skip=true -P'${profile}' -f '${source_code_path}'/'${project_name}'/pom.xml' >> ${log_file}
#mvn clean install -Dmaven.test.skip=true -P'${profile}' -f ${source_code_path}/${project_name}/pom.xml
mvn clean install -Dmaven.test.skip=true -f ${source_code_path}/${project_name}/pom.xml

echo '[日志|下载完成|编译完成|停止上次启动的服务进程('${datetime}')] ps aux |grep '${jar_name}' |grep -v grep |awk '"'"{print '$(NF-11)'}"'"' |xargs kill -9'
echo '[日志|下载完成|编译完成|停止上次启动的服务进程('${datetime}')] ps aux |grep '${jar_name}' |grep -v grep |awk '"'"{print '$(NF-11)'}"'"' |xargs kill -9' >> ${log_file}
# 说明:原本使用 ps aux |grep ${jar_name} |grep -v grep |awk '{print $(2)}' |xargs kill -9 来杀死进程  但 $2与传入的参数 重复了,会导致无效
ps aux |grep ${jar_name} |grep -v grep |awk '{print $(NF-11)}' |xargs kill -9

mv -f ${base_path}/servers/${jar_name} ${base_path}/servers/history/${jar_name}${datetime}
echo '[日志|下载完成|编译完成|将上次工程包移到历史目录('${datetime}')] mv -f '${base_path}'/servers/'${jar_name} ${base_path}'/servers/history/'${jar_name}${datetime}
echo '[日志|下载完成|编译完成|将上次工程包移到历史目录('${datetime}')] mv -f '${base_path}'/servers/'${jar_name} ${base_path}'/servers/history/'${jar_name}${datetime} >> ${log_file}

echo '[日志|下载完成|编译完成|获取最新工程包('${datetime}')] cp '${source_code_path}/${project_name}/target/${jar_name} ${base_path}/servers/${jar_name}
echo '[日志|下载完成|编译完成|获取最新工程包('${datetime}')] cp '${source_code_path}/${project_name}/target/${jar_name} ${base_path}/servers/${jar_name} >> ${log_file}
cp ${source_code_path}/${project_name}/target/${jar_name} ${base_path}/servers/${jar_name}

echo '[日志|下载完成|编译完成|获取最新工程包('${datetime}')] java -jar' ${base_path}/servers/${jar_name} '&'
echo '[日志|下载完成|编译完成|获取最新工程包('${datetime}')] java -jar' ${base_path}/servers/${jar_name} '&' >> ${log_file}
java -jar ${base_path}/servers/${jar_name} &

echo '#        ------------------------------- 结束 ------------------------------------------         #' >> ${log_file}
echo '# ############################################################################################## #' >> ${log_file}

执行: sh start.sh

里面注释比较详细,在此不在赘述!

至此结束,闪出 ... ...

你可能感兴趣的:(Maven,Git,Jar,SpringBoot,Maven,SpringBoot,Git)