Skip to content

部署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包,此时我们来配置一下

image-20220903215814609

image-20220903215835099

当然,您可以使用绝对路径

shell
 sh /root/x.sh jenkins-demo