gitlab-ci部署springboot

记录一下一个gitlab-ci部署springboot碰到的问题

部署前需要先关闭原来跑的jar进程,用pkill(虽然说有一些问题,但可以根据进程名粗暴全杀,毕竟方便,只要进程在运行时加入全路径,这样也可以做到精准kill),另外网络上有优雅结束springboot进程的方法,暂不是很适用。

  • 杀死进程命令(不杀死原进程就运行新进程,显然会因为端口占用报错):
 sshpass -p 'password' ssh root@ip "pkill -f /www/wwwroot/kola.designer/kolaboot-0.0.1-SNAPSHOT.jar"

如果进程不存在(没有运行或上一次运行失败自动退出),那么这句ssh pkill 会在gitlab-ci里出错:ERROR: Job failed: exit status 1,实际上在其他shell里运行这句是没问题,这个gitlab-ci script会因某些内部错误退出。
这里就需要在ssh + if 去远端机子判断是否存在进程,如果本身就不存在,就跳过pkill。

    - echo "生产环境:运行服务器端命令"
    - RESULT=$(sshpass -p 'password' ssh root@ip "ps -ef | grep /www/wwwroot/kola.designer/kolaboot-0.0.1-SNAPSHOT.jar | wc -l")
    - echo 判断是否由kolaboot-0.0.1-SNAPSHOT.jar进程
    - |
      if [ ${RESULT} -le 2 ]; then
        echo "含bash,grep进程数只有2个,真正进程不存在,跳过pkill"
      else
        echo 先杀死原有kolaboot-0.0.1-SNAPSHOT.jar进程,含grep命令行进程数${RESULT}
        sshpass -p 'password' ssh root@ip "pkill -f /www/wwwroot/kola.designer/kolaboot-0.0.1-SNAPSHOT.jar"
      fi
    - echo "指定生产环境 prod,在后台运行colaboot-0.0.1-SNAPSHOT.jar进程(运行前暂停30秒)"
    - sshpass -p 'password' ssh root@ip "cd /www/wwwroot/kola.designer;sleep 30;nohup java -jar  /www/wwwroot/kola.designer/kolaboot-0.0.1-SNAPSHOT.jar   >  /www/wwwroot/kola.designer/log/nohup_${DATETIME}.log 2>&1 & "
    - echo "运行成功,稍后请测试..."

本来也想用 grep -v grep |awk ‘{print $2}’ 来排除grep命令本身,并用awk 第二列 获得精准的pid,但是在gitlab-ci script里面有太多限制,当然可以把以下脚本存成一个文件,在gitlab-ci里执行这个脚本。不过我只想一个gitlab-ci.yml就搞定一切,就没去试验。

#!/bin/bash
pid=`ps -ef | grep summer-admin | grep -v grep |awk '{print $2}'`
if [ $pid ]; then 
    echo :App  is  running pid=$pid
    kill -9 $pid
fi
java -jar /home/roo/summer-admin.jar &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值