jenkins部署jar包应用起不来的情况

jenkins部署jar包应用起不来的情况

今天在用jenkins部署jar包发布的时候,发现没有任何报错,但是应用死活起不来,google了半天依旧没有解决,并不是网上的设置BUILD_ID=dontKillMe的方法解决的,因为此类方法的各种姿势都试验了遍毫无作用。具体情况如下:
为了测试方便,取消了jar包的替换那个步骤,单纯的执行一个指令
这里写图片描述

cat publish.sh
#!/bin/bash  
#这里可替换为你自己的执行程序,其他代码无需更改  
APP_NAME=xxxxxxxx.jar  

#使用说明,用来提示输入参数  
usage() {  
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"  
    exit 1  
}  

#检查程序是否在运行  
is_exist(){  
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `  
  #如果不存在返回1,存在返回0       
  if [ -z "${pid}" ]; then  
   return 1  
  else  
    return 0  
  fi  
}  

#启动方法  
start(){  
  is_exist  
  if [ $? -eq "0" ]; then  
    echo "${APP_NAME} is already running. pid=${pid} ."  
  else  
    nohup /app/jdk1.8.0_45/bin/java -server -jar $APP_NAME --spring.profiles.active=test > ./console 2>&1 &  
    echo "${APP_NAME} started"
  fi  
}  

#停止方法  
stop(){  
  is_exist  
  if [ $? -eq "0" ]; then  
    kill -9 $pid  
    echo "${APP_NAME} stoped"
  else  
    echo "${APP_NAME} is not running"  
  fi    
}  

#输出运行状态  
status(){  
  is_exist  
  if [ $? -eq "0" ]; then  
    echo "${APP_NAME} is running. Pid is ${pid}"  
  else  
    echo "${APP_NAME} is NOT running."  
  fi  
}  

#重启  
restart(){  
  stop  
  start  
}  

#根据输入参数,选择执行对应方法,不输入则执行使用说明  
case "$1" in  
  "start")  
    start  
    ;;  
  "stop")  
    stop  
    ;;  
  "status")  
    status  
    ;;  
  "restart")  
    restart  
    ;;  
  *)  
    usage  
    ;;  
esac 

就是如上情况,构建的时候日志没有任何异常输出,但是就是ps查看应用的时候一直没起来,后来谷歌各种情况说是跑完会杀掉这个情况要设置BUILD_ID,然后全局变量,放入脚本,全用网上的发布方式依旧没有解决问题,于是写了一个纯远程的python的demo去测试是不是远程连接会自动关闭有后台运行的程序,如下:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# auther : xiaojinsong(61627515@qq.com)


import paramiko


def ssh_execmd(**kwargs):
    paramiko.util.log_to_file("sshcmd.log")

    s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    s.connect(kwargs['hostname'], kwargs['port'], kwargs['username'], kwargs['password'])
    stdin, stdout, stderr = s.exec_command(kwargs['execmd'])
    stdin.write("Y")
    print(stdout.read())


def main():
    host_info = {
        'hostname': '192.168.66.66',
        'port': 22,
        'username': 'root',
        'password': 'xxxx',
        'execmd': '/app/demo-service/publish.sh restart',
    }
    ssh_execmd(**host_info)


if __name__ == '__main__':
    main()

这里写图片描述

然后发现依旧是一样的效果,然后和研发沟通的时候偶然用一个组合指令缺把问题解决了,如下

/app/demo-service/publish.sh restart
替换为
cd /app/demo-service && ./publish.sh restart

这时候无论是用demo跑还是jenkins跑都能正常运行,舍弃了用supervisor去解决的复杂。。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值