jenkins部署阻塞

Administrator
发布于 2025-09-25 / 4 阅读
0

jenkins部署阻塞

阻塞背景

最近一段时间起,项目每次提交后自动部署 jenkins都有概率 超时,但是我看服务器.log日志 其实已经运行了,之前有点忙我就没管了。

问题排查

部署超时,一定是监听项目是否运行的脚本有问题。 因为jenkins本身不具备监听项目部署是否成功,而是通过我们编写的启动脚本 -> *.sh,

正常项目成功 应该返回 exit 0,如果失败 返回 exit 1。

不知道你有没有发现问题,其实直接看 循环监听 这部分就差不多了

  1. while [ -f $LOG_FILE] 如果存在日志文件 则死循环,相当于监听器

  2. if[[ "$success" != "" ]] 如果变量不为空 则进入 ps:这里监听了 Started.....日志关键词 来判断是否启动成功

  3. then 成功走的条件, 直接break,跳出循环结束

  4. else sleep 1s 如果没有找到 成功标识,就等待1秒继续遍历,确保不会太消耗性能

  5. 下面的fail 判断也是同理:但是仔细看会发现 echo "项目可能启动失败" 后面竟然 跟了一个 tail -f $LOG_FILE

  6. tail -f *.log 用于实时查看日志,和cat的区别在于 cat只能之前打印出来的,tail -f 是只要日志更新就会一直打印(动态),直到手动ctrl +c 退出

  7. 既然知道这里有问题 那就看为什么会进入失败,按道理 正常项目启动时 fail这种关键词 是不应该出现的,通过日志查看发现

原来是之前我看见flowable流程没有用到这几张表就删除了,但是flowable框架 在项目启动前会检查数据库表完整性,因为缺少这张表,他就抛了个异常。

  1. 到这里其实就明白为什么部署 像抽奖一样,因为先进入 success时没有立马检查到,休眠1秒后 进入fail的判断,这个时候误打误撞匹配上了,tail -f 一直打印日志 导致进入不到 break,死循环!!!!!!!!!!!!!!!!!!!!!!

总结

项目能运行起来 你就别管为什么能运行 认真😒。其实在这期间 我也学到了.sh的一些语法,比如 java的if else if else 在sh中 就是 if then elif else,而且if 后面要以fi 结尾...... 还有对于.sh退出时 规划应该是 exit 0|1 但是项目中没有这么做, echo 后面随便跟字符串其实 隐式表示 exit 0 所以为什么后面没有写这个 但是jenkins还是会成功