Jenkins总结3-shell脚本
我写shell脚本的功力还很初级,基本都是现学现卖,写得不是很健壮,只能提供个思路,请大家包涵。
我使用的系统只能发函数放到shell最前面。本人还是比较推崇函数式脚本的,方便复用,目前只简单的封装了两个。
1. 判断jar包是否运行,在项目停机前,启动后都可以用到。
# 判断jar包是否正在运行 is_exist(){ pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk ‘{print $2}‘` if [ -n "$pid" ]; then return 0 else return 1 fi }
2. 停止项目
# 停止程序 stop(){ pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk ‘{print $2}‘` if [ -n "$pid" ]; then echo ‘停止pid=‘$pid kill $pid > /dev/null 2>&1 count=`ps --no-heading -C java -f --width 2000 | grep $JAR_NAME | awk ‘{print $2}‘ | wc -l` if [ $count -gt 0 ]; then # 等5秒,尽量让程序优雅停机,之后再强制杀死进程 sleep 5 kill -9 $pid > /dev/null 2>&1 sleep 1 fi fi }
3. 判断参数数量,并接受参数。我这个脚本有2个参数,第二个参数在后面直接用$2使用。
# 接收参数, 项目名称 if [[ $# == 2 ]]; then PROJECT_NAME=$1 echo ‘接收到的项目名称参数=‘$PROJECT_NAME else echo ‘参数不全,无法执行!!!‘ exit 1 fi
4. 接下来可以提前名称项目目录,并拼接项目jar目录,日志目录等。
5. 启动项目。$2是脚本的第二个参数,内存数量,单位M,$JAR_PATH是拼接好的jar包全路径。 并使用nohup后台运行。因为前台运行jar命令会造成jenkins会一直打印部署日志,shell脚本不能退出,最终jenkins部署超时。
nohup /usr/local/java/bin/java -Xms$2m -Xmx$2m -jar $JAR_PATH > $OUT 2>&1 &
6. 打印项目启动日志
先sleep1秒,因为如果java程序响应比较慢,会造成日志信息判断失误的情况。
$LOG_FILE是拼接好的项目日志路径,使用tail -f打印日志,并循环读取到line变量。
echo $line 是把脚本输出到控制台。
grep ‘started successfully!‘ 用来判断是否出现项目启动成功的标识。“‘started successfully”是我在项目里写死的,每个项目启动时都有会这句话。
发现的话就改变变量flag的状态。并在每次循环是判断flag,符合条件就退出脚本。
注意:我本来也想在第一个if代码块里直接break,但经常失效,耽误了几天都没有解决,所以退一步使用了这个办法。
sleep 1 # 打印项目启动日志 flag=1 tail -f $LOG_FILE | while read line do echo $line echo $line | grep ‘started successfully!‘ >> /dev/null if [ $? -eq 0 ]; then echo $JAR_NAME‘发布成功 !‘ flag=0 fi if [ $flag -eq 0 ]; then echo ‘退出脚本‘ break; fi done
相关推荐
达观数据 2020-11-11
汪康 2020-10-30
ppppfly 2020-10-24
synshitou 2020-10-21
programmeryu 2020-09-24
Topbeyond 2020-08-21
lrcoop 2020-08-18
young依然 2020-08-17
oden 2020-08-16
lrcoop 2020-08-15
yserver 2020-08-15
王永迪 2020-08-15
pursuemylife 2020-08-14
pandaphinex 2020-08-09
leonranri 2020-07-26
CloasGao 2020-07-21
zccheu 2020-07-18