当Jenkins和需要发布的服务在同一台服务器时,想要把Jar包拷贝到指定的文件夹并发布。配置与Jenkins与GitLab集成自动化测试与部署详细教程——构建Maven项目(一)稍微不同。
- 停止原来的服务
- 将Jenkins的打包结果拷贝到指定目录下,替换原来的jar包
- 运行新的jar包
在前面Jenkins构建Maven项目的基础上,修改项目配置,添加构建前后操作
操作
添加构建前操作
Jenkins中修改项目配置,Pre Steps中点添加然后选择execute shell,
然后添加下面代码
# 跳转到指定文件夹
cd /root/insurance/geosign/
# 执行文件夹下的停止服务的脚本(需要提前开发并放置在文件夹下)
sh startup.sh -stop
添加构建后操作
在Post Steps中中点添加然后选择execute shell,勾选Run only if build succeeds,
输入下面代码
# 等待1分钟
sleep 1m
# 将jar包拷贝到指定目录下
cp -Rf target/*.jar /root/insurance/geosign/
# 跳转到文件夹下执行启动脚本
cd /root/insurance/geosign/
BUILD_ID=DONTKILLME
sh startup.sh -start
需要注意的是等待1分钟是为了避免文件不存在报错
配置正确的话,此时进行代码推送,自动会运行jar包
启动和停止服务的代码如下,可供其他项目参考
#!/bin/bash -ilex
CMD=$1
DIRNAME=$0
if [ "${DIRNAME:0:1}" = "/" ];then
CURDIR=`dirname $DIRNAME`
else
CURDIR="`pwd`"/"`dirname $DIRNAME`"
fi
echo "----------开始运行"
jarpath=test
jarport=8061
#source /etc/profile
#source ~/.bash_profile
echo "----------刷新变量"
case $CMD in
-start)
echo "----------启动服务"
nohup java -jar /root/insurance/geosign/geosign.jar > nohup.out 2>&1 &
;;
-stop)
echo "----------停止运行"
pid=$(netstat -tnlp | grep -w ':'$jarport |awk '{print $nf}' | sed -r 's#.* (.*)/.*#\1#')
if [ -n "$pid" ]; then
kill $pid;
fi
;;
-restart)
pid=$(netstat -tnlp | grep -w ':'$jarport |awk '{print $nf}' | sed -r 's#.* (.*)/.*#\1#')
if [ -n "$pid" ]; then
kill $pid;
fi
nohup java -jar /root/insurance/geosign/geosign.jar > nohup.out 2>&1 &
;;
esac