Appearance
部署SpringBoot项目时,上次部署的jar包如果没有停止运行,会导致端口占用,使项目无法正常部署,我们可以使用shell脚本,停止正在运行的jar包。
Jenkins的设计有点类似于Spring中的面向切面编程 Pre Steps(构建前操作) ➡ Buid(构建操作) ➡ Post Steps(构建后操作)
我们之前配置 Post Steps 也就是构建后上传jar包到服务器并运行,那么构建前我们可以停止之前运行的jar包
我们在 /root
目录下创建shell脚本,脚本名称我们就叫 x.sh
shell
#!/bin/bash
#删除上一次上传的文件
cd usr/localhost/software/jenkins/
rm -rf first
#获取传入的参数,
appname=$1
echo "arg:$1"
#获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'` # awk '{printf $2}'打印第二个字符,对应的就是pid
echo $pid
kill -9 $pid
如何使用呢?
shell
sh x.sh jenkins-demo #jenkins-demo是jar包中包含是字符
Shell脚本优化
如果找不到pid呢?比如我们这个jar包根本没运行,此时我们执行 kill -9
就会报错了。
sh
#!/bin/bash
#删除上一次上传的文件
cd usr/localhost/software/jenkins/
rm -rf first
#获取传入的参数,
appname=$1
echo "arg:$1"
#获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'` # awk '{printf $2}'打印第二个字符,对应的就是pid
echo $pid
#如果pid为空,提示一下,否则,执行kill命令
if [ -z $pid ];
#使用-z 做空值判断
then
echo "$appname not started"
else
kill -9 $pid
echo "$appname stoping...."
#我们来检查一下程序是否已经被杀死了
check=`ps -ef | grep -w $pid | grep java`
if [ -z $check ];
then
echo "$appname pid:$pid is stop"
else
echo "$appname stop failed"
fi
fi
PreSteps设置项目构建前运行脚本
上文我们撰写了脚本 /root/x.sh 用来删除之前上传的文件,以及停止运行的jar包,此时我们来配置一下
当然,您可以使用绝对路径
shell
sh /root/x.sh jenkins-demo