Jenkins自动构建部署——Shell部署

在Jenkins自动构建部署——热部署中,我们利用了动态部署插件Deploy to container来完成了热部署,然后我们是在linux上部署Tomcat的,这里还需要使用 /manger访问,一般需要开放访问限制,所以需求修改Tomcat目录/webapps/manager/META-INF/context.xml文件,还需要在/conf/tomcat-users.xml文件中添加相关的用户信息。


上述方式进行热部署的方式虽然比较方便,但是不够灵活,并且有时候可能项目不支持热部署,那么我们还可以采用shell脚本的方式来部署。这里我们还是以之前的项目配置为例,这里就可以将之前配置的构建后操作删除。


删除动态部署插件Deploy to container提供了构建后操作配置后,我们就需要在Build构建之后,进行相关的配置,这里就是执行shell脚本,如下:
Jenkins自动构建部署——Shell部署_第1张图片


然后我们在上述执行shell的输入框中,输入下列的shell脚本,内容如下:

#!/bin/sh
# kill tomcat pid
# 这句尤为重要
export BUILD_ID=tomcat_build_id

# 1.关闭tomcat
pidlist=`ps -ef|grep tomcat|grep -v "tomcat_jenkins"|grep -v "grep"|awk '{print $2}'`
function stop(){
     
    if [ "$pidlist" == "" ]; then
        echo "----tomcat已经关闭----"
    else
        echo "tomcat进程号:$pidlist"
        kill -9 $pidlist
        echo "KILL $pidlist."
    fi
}

stop
pidlist2=`ps -ef|grep tomcat|grep -v "tomcat_jenkins"|grep -v "grep"|awk '{print $2}'`
if [ "$pidlist2" == "" ]; then 
    echo "----关闭tomcat成功----"
else
    echo "----关闭tomcat失败----"
fi

# 2.移除原来tomcat中webapps中的项目文件夹
rm -rf /usr/local/tomcat/webapps/ROOT*

# 3.复制jenkins生成的war包到tomcat中webapps中
cp -r /root/.jenkins/workspace/demo/target/demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps

sleep 5s

# 4.修改war包的名称
mv /usr/local/tomcat/webapps/demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

# 5.启动tomcat
cd /usr/local/tomcat/bin
./startup.sh

将上述内容copy至上述所说的Jenkins上Post Steps出,然后就可以点击立即构建了,构建完成后即可访问/hello,如下:
在这里插入图片描述



下面我们就来稍微解释一下上述shell脚本的命令,首先是 export BUILD_ID=tomcat_build_id ,我们说到这句比较重要,因为jenkins执行脚本结束后,就认为任务结束了,但是启动的相关子程序依然在运行(由于Jenkins认为任务已经结束了,就结束该构建相关的子进程),所以这里需要配置一个环境变量,不然启动的Tomcat会被关掉。



然后是 ps -ef|grep tomcat|grep -v "tomcat_jenkins"|grep -v "grep"|awk '{print $2}' ,该命令是用来查找Tomcat的PID的,因为重新构建后,我们重新打了war包,所以我们需要重新启动Tomcat,就需要把这之前启动的Tomcat进程杀死。


然后我们来看看`ps -ef`命令,该命令就是用来显示所有的进程,其中后面的e是显示结果的意思,f是显示完整格式,具体可见`ps --help all`

Jenkins自动构建部署——Shell部署_第2张图片

接下来我们在其后面加上了grep tomcat,用于查找tomcat相关的进程,如下:
Jenkins自动构建部署——Shell部署_第3张图片

但是我们一共启动了两台Tomcat——tomcat_jenkins和tomcat,其中tomcat_jenkins是用来部署Jenkins服务的,,tomcat用于我们项目的部署,所以我们需要将tomcat_jenkins过滤掉,所以在后面又加上了grep -v "tomcat_jenkins" ,其中 -v 表示排除,就不查找该相关。
Jenkins自动构建部署——Shell部署_第4张图片

然后我们还加了grep -v "grep" ,因为我们执行该命令也是一个进程呀,所以我们又要将查找的这个进程过滤。
Jenkins自动构建部署——Shell部署_第5张图片

最后我们将需要将上述查找到的进程的PID进行打印出来的,也就是上述的第二列,如下:
在这里插入图片描述


执行完上述命令我们就得到了Tomcat的PID的,然后我们定义了一个函数,其中就是用刚刚得到的PID去查看Tomcat是否启动,若启动的则kill强制杀死,然后我们就执行该函数,执行完成后,我们再执行 ps -ef|grep tomcat|grep -v "tomcat_jenkins"|grep -v "grep"|awk '{print $2}' ,然后去判断下Tomcat是否成功关闭,这样为了避免异常情况,Tomcat关闭失败,所以多做了一步判断。
Jenkins自动构建部署——Shell部署_第6张图片

然后就是一些常规的Linux命令,这里我们将Jenkins构建的war包复制到Tomcat的webapps目录下进行启动,这里我们将其重命名为ROOT,这样我们在访问时就需要加了 /demo ,当然不进行这一步操作也是可以了。
Jenkins自动构建部署——Shell部署_第7张图片

当然上述我们只是也war包的方式来介绍,jar包其实也是一模一样的,其区别就是shell脚本的不同而已,可自行进行测试。

你可能感兴趣的:(Jenkins)