• jenkins 解决构建成功后进程消失的问题


    最近模块拆分,独立出了几个服务。上线流程并不复杂,只需要在指定目录执行bash deploy.sh master即可上线master分支。但是架不住模块太多,每天在上线流程上也花费了不少时间,所以尝试搭了个jenkins来自动化上线。上线时遇到了一个小坑,jenkins已经输出了启动成功的日志,但是实际上服务并没有跑起来,也就是说服务启动以后又被kill掉了。上网找了找资料,得出结论是jenkins杀掉了刚启动的服务。

    服务被杀的原因是:jenkins默认会在构建完成后杀死构建过程中由jenkins中的shell命令触发的衍生进程。

    我在jenkins中调用bash deploy.sh master,虽然有supervisord保护我的服务,但是jenkins将supervisord和服务一同杀掉了。在网上找到了两种解决办法,亲测有效,两种方法中我个人更推荐第二种,方法三是我自己想到的,亲测也有效哟~:

    方法一:

    修改配置,启动jenkins时禁止其杀死衍生进程

    在/etc/sysconfig/jenkins中加入参数-Dhudson.util.ProcessTree.disable=true

    即java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

    方法二:

    修改构建号,使jenkins找不到衍生进程

    OLD_BUILD_ID=$BUILD_ID

    BUILD_ID=dontKillMe

    bash deploy.sh master

    BUILD_ID=$OLD_BUILD_ID

    方法三:

    这是我自己想到的方法,也确实生效了。我们访问生产环境需要先登录跳板机器,然后从跳板机器跳到线上服务器,所以我把jenkins部署到跳板机上,在jenkins的shell脚本中使用ssh脚本访问线上机器。

    sh online.sh

    cd webserver/server/***

    bash deploy.sh master

    这样启动之后jenkins杀死的是跳板机上衍生出的ssh进程而不会影响真正线上服务器的进程

    希望对大家有所帮助~

  • 相关阅读:
    数据提交方式:post和get
    什么是SQL注入式攻击和如何防范?
    CSS3 @keyframes 规则
    php数据库连接及简单操作
    深入理解CSS过渡transition
    css 选择器
    利用border制作三角形原理
    iOS 8 自适应 Cell
    dSYM 文件分析工具
    iOS开发使用半透明模糊效果方法整理
  • 原文地址:https://www.cnblogs.com/baiyb/p/9080485.html
Copyright © 2020-2023  润新知