公司用了六年的 SpringBoot 项目部署方案,稳得一批!( 二 )
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsdhttp://maven.apache.org/ASSEMBLY/2.0.0 "><id>${activeProfile}</id><!--打包成一个用于发布的zip文件--><formats><format>zip</format></formats><!--true:zip中生成一级目录(此处屏蔽 , 配合脚本需要profiles后缀)--><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><!--打包进zip文件的lib目录--><useProjectArtifact>false</useProjectArtifact><outputDirectory>${package-name}-${activeProfile}/lib</outputDirectory><unpack>false</unpack></dependencySet></dependencySets><fileSets><!-- 配置文件打包进zip文件的conf目录 --><fileSet><directory>${project.basedir}/src/main/profiles/${activeProfile}</directory><outputDirectory>${package-name}-${activeProfile}/conf</outputDirectory><includes><include>**/*</include><!--<include>*.xml</include>--><!--<include>*.properties</include>--><!--<include>*.yml</include>--></includes></fileSet><!--启动脚本打包进zip文件--><fileSet><directory>${project.basedir}/src/main/scripts</directory><outputDirectory></outputDirectory><includes><include>**/*</include></includes><!-- 文件文件权限为777 --><fileMode>777</fileMode><!-- 目录权限为777--><directoryMode>777</directoryMode><!--脚本中参数变量为pom中的值 关键--><filtered>true</filtered></fileSet><!-- 项目编译出来的jar打包进zip文件 --><fileSet><directory>${project.build.directory}</directory><outputDirectory>${package-name}-${activeProfile}/</outputDirectory><includes><include>*.jar</include></includes></fileSet></fileSets></assembly>
重点节点介绍:- formats节点: 把配置文件和jar包等压缩成什么文件格式,这里可以有:zip,tar等
- fileMode节点: 指定scripts目录下脚本文件(这里是:shenniu_publish.sh)在linux上文件权限为777
- filtered节点: 脚本中参数变量为pom的profiles中properties的值(该配置,是把mvn中属性值映射生成到sh文件中,如:${package-name})

文章插图
分享shenniu_publish.sh程序启动工具上面步骤完成了zip格式的发布包,我们再分享下启动程序的shell脚本 , 该脚本具有的功能如:
- 解压zip+启动jar包
- 启动jar包
- 停止对应jar运行
- 重启jar程序
- JAVA -cp
- java -jar

文章插图
来看全部的shell代码:
#!/usr/bin/env bash#可变参数变量languageType="javac" #支持 java,javac.NETcore 发布#参数值由pom文件传递baseZipName="${package-name}-${activeProfile}" #压缩包名称publish-test.zip的publishpackageName="${package-name}" #命令启动包名 xx.jar的xxmainclass="${boot-main}" #java -cp启动时,指定main入口类;命令:java -cp conf;lib*.jar;${packageName}.jar ${mainclass}#例子# baseZipName="publish-test" #压缩包名称publish-test.zip的publish# packageName="publish" #命令启动包名 publish.jar的xx#固定变量basePath=$(cd `dirname $0`/; pwd)baseZipPath="${basePath}/${baseZipName}.zip"#压缩包路径baseDirPath="${basePath}" #解压部署磁盘路径pid= #进程pid#解压function shenniu_unzip(){echo "解压---------------------------------------------"echo "压缩包路径:${baseZipPath}"if [ ! `find ${baseZipPath}` ]thenecho "不存在压缩包:${baseZipPath}"elseecho "解压磁盘路径:${baseDirPath}/${baseZipName}"echo "开始解压..."#解压命令unzip -od ${baseDirPath}/${baseZipName} ${baseZipPath}#设置执行权限chmod +x ${baseDirPath}/${baseZipName}/${packageName}echo "解压完成 。"fi}#检测pidfunction getPid(){echo "检测状态---------------------------------------------"pid=`ps -ef | grep -n ${packageName} | grep -v grep | awk '{print $2}'`if [ ${pid} ]thenecho "运行pid:${pid}"elseecho "未运行"fi}#启动程序function start(){#启动前,先停止之前的stopif [ ${pid} ]thenecho "停止程序失败,无法启动"elseecho "启动程序---------------------------------------------"#选择语言类型read -p "输入程序类型(java,javac,netcore) , 下一步按回车键(默认:${languageType}):" read_languageTypeif [ ${read_languageType} ]thenlanguageType=${read_languageType}fiecho "选择程序类型:${languageType}"#进入运行包目录cd ${baseDirPath}/${baseZipName}#分类启动if [ "${languageType}" == "javac" ]thenif [ ${mainclass} ]thennohup java -cp conf:lib*.jar:${packageName}.jar ${mainclass} >${baseDirPath}/${packageName}.out 2>&1 &#nohup java -cp conf:lib*.jar:${packageName}.jar ${mainclass} >/dev/null 2>&1 &fielif [ "${languageType}" == "java" ]thennohup java -jar ${baseDirPath}/${baseZipName}/${packageName}.jar >/dev/null 2>&1 &# java -jar ${baseDirPath}/${baseZipName}/${packageName}.jarelif [ "${languageType}" == "netcore" ]then#nohup dotnet run ${baseDirPath}/${baseZipName}/${packageName} >/dev/null 2>&1 &nohup ${baseDirPath}/${baseZipName}/${packageName} >/dev/null 2>&1 &fi#查询是否有启动进程getPidif [ ${pid} ]thenecho "已启动"#nohup日志tail -n 50 -f ${baseDirPath}/${packageName}.outelseecho "启动失败"fifi}#停止程序function stop(){getPidif [ ${pid} ]thenecho "停止程序---------------------------------------------"kill -9 ${pid}getPidif [ ${pid} ]then#stopecho "停止失败"elseecho "停止成功"fifi}#启动时带参数,根据参数执行if [ ${#} -ge 1 ]thencase ${1} in"start")start;;"restart")start;;"stop")stop;;"unzip")#执行解压shenniu_unzip#执行启动start;;*)echo "${1}无任何操作";;esacelseecho "command如下命令:unzip:解压并启动start:启动stop:停止进程restart:重启示例命令如:./shenniu_publish start"fi
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 六旬山口百惠近照!穿黑色羽绒服仍眉眼清秀,老公三浦友陪伴在侧
- 《狂飙》中的六大恶人,高启强差点上不了榜,第一名非他莫属
- 网站流量异常下降,六大方面排查原因及解决方案
- 2024 年 Linux 和开源的六大趋势预测
- 毁掉汪峰,刀郎用了19年,而东山再起,汪峰只用了两天
- 蚕丝被内胆脏了怎么清洗 蚕丝被一般用几年就不能用了
- 六位香港艺人落魄转行,卖保险,卖鱼蛋,最佳女配成了按摩技师!
- 龙芯中科是国企,哪个上市公司的控股股东是中科院
- 小杨哥签约重量级网红!一年销售10几亿,还将厦门分公司交给对方
- 亚航航空科技 中国第一家低成本航空公司