记一次Jenkins构建项目成功后服务并未正常启动的问题
一、问题描述
最近在尝试使用jenkins自动化部署,但是遇到了一点问题,jenkins构建成功,并且已经输出了启动成功的日志,但是实际上服务并没有跑起来
二、问题定位
- 首先查看服务启动日志
通过服务启动日志发现服务是启动成功过的,但启动成功后立马就被shutdown。 - 分析关闭原因
2.1 首先定位是否是注册中心的配置问题,服务无法正确注册到注册中心(虽然大概率不是,但万一呢)
通过检查配置,确认配置没有问题
2.2 那么是否跟网络波动有关系呢
ping一下网络,正常;手动重启一下,再看看日志,发现正常了;再观察一段时间,服务正常运行,没有异常,难道只是因为网络波动?
2.3 继续使用jenkins构建其他服务
发现问题仍然存在,并且手动重启后都是正常的 - 问题确认
通过排查,确认了不是业务系统的原因,那问题只能出在jenkins,在搜索引擎逛了一圈,发现相同的问题不在少数,并且jenkins官方也有相应的解释
三、问题原因
jenkins默认会在构建完成后杀死构建过程中由jenkins中的shell命令触发的衍生进程。
相关官方说明:
https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller
https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build
四、解决办法
-
方法一:将jenkins和业务服务器分开
这样jenkins即使杀死衍生进程也只会是自己服务器的,而不会影响业务服务器。
(因为条件限制,并没有多余的服务器给我使用,所以这个方案没有试过,只是一个想法) -
方法二:修改jenkins配置,禁止其杀死衍生进程
根据jenkins的启动方式,在/etc/sysconfig/jenkins,或者其他启动命令中中加入参数java运行参数-Dhudson.util.ProcessTree.disable=true
(本文章是修改/etc/sysconfig/jenkins文件),然后重启jenkins -
方法三:修改shell脚本,重置BUILD_ID,使jenkins找不到衍生进程
BUILD_ID=DONTKILLME
分类:
kettle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」