zoukankan      html  css  js  c++  java
  • 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进程而不会影响真正线上服务器的进程

    希望对大家有所帮助~

  • 相关阅读:
    WebGoat之Injection Flaws
    WebGoat之Web Services
    XPath语法
    用Maven在Eclipse中配置Selenium WebDriver——方法1
    用Maven在Eclipse中配置Selenium WebDriver——方法2
    Enum与enum名字相互转换
    数据库数据类型varchar(n)与nvarchar(n)比较
    网页切图工具
    Html标签
    在VS的Solution Explorer中高亮当前编辑的文件
  • 原文地址:https://www.cnblogs.com/baiyb/p/9080485.html
Copyright © 2011-2022 走看看