jenkins,编写shell脚本⾃动运⾏发布的jar
⽬前项⽬:jenkins部署后,会将所有的git上的项⽬打包到本地,然后会⼿动去执⾏linux语句去复制jar包到测试项⽬路径下⾯,然后再启动jar
想要实现状态:jenkins部署后,执⾏shell脚本,⾃动实现查看当前测试项⽬路径下jar的运⾏状态,若在运⾏则kill当前进⾏,再进⾏复制jar,再启动jar
步骤⼀ 在windows环境下打开⼀个load.sh的⽂件。在⾥⾯编写以下内容
#!/bin/bash
#jenkins-maven-job,构建完成会在⾃动关闭进程及其⼦进程,造成nohub java -jar your.jar & ⽆效解决办法加上BUILD_ID=DONTKILLME BUILD_ID=DONTKILLME
#部署jar包名称
pas_origin_package=xquant-application-manager-app-1.0.0.0-SNAPSHOT.jar
#jenkins部署该项⽬的地址
pas_project_path=/home/admin/jenkins/workspace/Xquant-Application-Manager
#jenkins拉取发布路径下的jar
pas_deploy_path_jar=$pas_project_path/xquant-application-manager-app/target/$pas_origin_package
#部署该项⽬的测试路径下和jar
pas_test_path=$pas_project_path/Pro_back
pas_test_path_jar=$pas_test_path/$pas_origin_package
#杀死当前正在运⾏的程序1
PID=$(ps -ef | grep $pas_origin_package | grep -v grep | awk '{print $2}')
echo "ps -p $PID"
if [ "$PID" != "" ]
then
echo "结束进程$PID"
kill -9 $PID
else
echo "没有进程在运⾏"
fi
#删除资源包
rm -rf $pas_origin_package;
#移动要安装的程序(此处最后有⼀个. 表⽰当前路径)
cp $pas_deploy_path_jar .
#执⾏程序(这个start.sh⽂件是开发提供的启动⽂件,主要内容是启动jar包和配置⽂件部分)
sh start.sh
#判断线程是否启动
newPid=$(pgrep -f $pas_origin_package)
echo "线程正常启动pid:$newPid"
步骤⼆ 复制全部内容,在lunix下⾯⼿动执⾏⼀下
可以正常执⾏
步骤三 使⽤指令去执⾏⼀下
cd 项⽬路径
sh load.sh
需要可以执⾏成功,但是在执⾏过程中出现:bash: $'\r': command not found的问题
原因:从windows下⾯上传到unix编译的问题,需要重新转化⼀下
⽅法:
# 使⽤vim打开⽂件 vim load.sh
# 转换格式 :set ff=unix
# 保存⽂件 :wq
步骤四 通过jenkins去绑定项⽬
1、⼀种是直接放在构建项⽬后⾯,新建⼀个shell脚本,执⾏以上内容。但是这种会有⼀个问题,就是在现实操作中,不需要去下载源码。只需要去重启接⼝
2、若只需要执⾏重启操作时,去SSH中执⾏即可maven打包本地jar包
遇到问题:权限问题
当前jenkins是使⽤jenkins账号的。但是SSH时使⽤root账号去操作,故若由于某些原因⼿动起来的jar,后使⽤jenkins构建时,会出现没有权限杀死这个
问题解决:
在部署前⼿动去kill当前线程
还有⼀种⽅式是,将jenkins的账号权限修改为root权限,⽬前未采⽤该⽅式
⽅法:
# vim /etc/sysconfig/jenkins
# i
# 修改为JENKINS_USER = "root"
# :wq
按照配置说明需要将$JENKINS_HOME和var/log/jenkins的权限同时进⾏修改
chown -R jenkins:jenkins /var/lib/jenkins
chown -R jenkins:jenkins /var/cache/jenkins
chown -R jenkins:jenkins /var/log/jenkins
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论