How to handle Jenkin's "Abort build" gracefully?

时间:2016-08-31 12:07:31

标签: python jenkins

I am trying to salvage test data from an aborted Jenkins build. The documentation (https://wiki.jenkins-ci.org/display/JENKINS/Aborting+a+build) appears to throw an interrupt and so I attempted to catch it with a custom handler:

signal.signal(signal.SIGINT, signal_handler)

Running my program through CMD and sending crtl-c stimulates the signal_handler function. However, when running this through Jenkins, the interrupt signal is not captured. Are there any plugins that alter Jenkins abort signal, or is there a way to handle it gracefully?

1 个答案:

答案 0 :(得分:0)

好吧,我有点晚了,但是詹金斯在中止时发送了TERM信号。基本上,您只需要注册该信号

signal.signal(signal.SIGTERM, signal_handler)

信息来自: https://gist.github.com/datagrok/dfe9604cb907523f4a2f

它说:

  

Jenkins取消Jenkins作业后,它将TERM发送到流程   产生的一组过程,并立即断开连接,进行报告   不论作业状态如何,“完成:已终止”。

     

这将导致生成的进程及其所有子进程(除非它们   在新的流程组中生成)以接收TERM。

     

与在终端中运行作业的效果相同,   按CTRL + C,但在后一种情况下发送的是INT,而不是TERM。

     

由于Jenkins立即与子进程断开连接,并且   报告没有进一步的输出:

     

可能会误导您未调用信号处理程序。   (这使许多人误以为詹金斯已经扼杀了这一进程。)

     

可能会误导派生进程已完成或   退出,而他们继续运行。