小豆子的笔记QAQ

导航

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中执行即可

遇到问题:权限问题

当前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

 

posted on 2021-10-19 10:19  小豆子的笔记QAQ  阅读(1252)  评论(0编辑  收藏  举报