记一次Jenkins构建项目成功后服务并未正常启动的问题

一、问题描述

 最近在尝试使用jenkins自动化部署,但是遇到了一点问题,jenkins构建成功,并且已经输出了启动成功的日志,但是实际上服务并没有跑起来

二、问题定位

  1. 首先查看服务启动日志
    image
    通过服务启动日志发现服务是启动成功过的,但启动成功后立马就被shutdown。
  2. 分析关闭原因
    2.1 首先定位是否是注册中心的配置问题,服务无法正确注册到注册中心(虽然大概率不是,但万一呢)
      通过检查配置,确认配置没有问题
    2.2 那么是否跟网络波动有关系呢
      ping一下网络,正常;手动重启一下,再看看日志,发现正常了;再观察一段时间,服务正常运行,没有异常,难道只是因为网络波动?
    2.3 继续使用jenkins构建其他服务
      发现问题仍然存在,并且手动重启后都是正常的
  3. 问题确认
    通过排查,确认了不是业务系统的原因,那问题只能出在jenkins,在搜索引擎逛了一圈,发现相同的问题不在少数,并且jenkins官方也有相应的解释

三、问题原因

 jenkins默认会在构建完成后杀死构建过程中由jenkins中的shell命令触发的衍生进程。
 相关官方说明:
  https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller
  https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build

四、解决办法

  1. 方法一:将jenkins和业务服务器分开
    这样jenkins即使杀死衍生进程也只会是自己服务器的,而不会影响业务服务器。
    (因为条件限制,并没有多余的服务器给我使用,所以这个方案没有试过,只是一个想法)

  2. 方法二:修改jenkins配置,禁止其杀死衍生进程
    image
    根据jenkins的启动方式,在/etc/sysconfig/jenkins,或者其他启动命令中中加入参数java运行参数 -Dhudson.util.ProcessTree.disable=true(本文章是修改/etc/sysconfig/jenkins文件),然后重启jenkins

  3. 方法三:修改shell脚本,重置BUILD_ID,使jenkins找不到衍生进程
    BUILD_ID=DONTKILLME
    image

posted @ 2022-10-11 14:47  爱做梦的陈先森  阅读(2564)  评论(0编辑  收藏  举报