记一次jenkins自动构建python程序遇到的坑

事出有因:

  • 后台写的python程序要发布到服务器上
  • 需要自动发布
  • 然后如往常般一顿配置下来
  • jenkins的控制台也输出了’SUCCESS’
  • 然后开心的前往服务器查看进程运行状态时
  • 神奇的事情就发生了。。。

如图:
记一次jenkins自动构建python程序遇到的坑_第1张图片
可以看到jenkins的结果是成功的,并且启动程序的命令也执行了,但是服务器上并没有见到该进程。

接下来就是各种排查+试错,都依然无果
只能冷静下来,寻找命令参数,把debug日志调出来进行查看

# 输出debug日志
gunicorn -w 2 -b 0.0.0.0:9999 --log-level=debug --error-logfile /var/log/g_error.log run:app -D

刚开始查看日志没多细心,加上也比较烦心。
开关几遍日志后发现了个小小的线索,如图:
记一次jenkins自动构建python程序遇到的坑_第2张图片
这里可以看到python程序接收到了一个信息,然后worker就退出,master进程最后关闭。
然后就是思考时间:
谁给python程序发送的消息 ----> jenkins
怎么让jenkins不发消息到python进程

然后就有了如图的参数:
记一次jenkins自动构建python程序遇到的坑_第3张图片
在jenkins的这里面找到:
在这里插入图片描述
然后豁然大悟的在脚本里添加这样的字段:

# 在启动python程序前加入 BUILD_ID=DONTKILLME,翻译过来就是don't kill me
BUILD_ID=DONTKILLME
gunicorn -w 2 -b 0.0.0.0:9999 run:app -D

然后构建一次项目,完美!

总结:

  • jenkins默认会在构建完成后杀掉构建过程中用jenkins中shell命令触发的衍生进程;
  • jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程;
  • 通过 'BUILD_ID=DONTKILLME ’ 参数告诉jenkins,别杀掉我;
  • jenkins就会避开这个进程完成任务

你可能感兴趣的:(jenkins)