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?
答案 0 :(得分:0)
好吧,我有点晚了,但是詹金斯在中止时发送了TERM
信号。基本上,您只需要注册该信号
signal.signal(signal.SIGTERM, signal_handler)
信息来自: https://gist.github.com/datagrok/dfe9604cb907523f4a2f
它说:
Jenkins取消Jenkins作业后,它将TERM发送到流程 产生的一组过程,并立即断开连接,进行报告 不论作业状态如何,“完成:已终止”。
这将导致生成的进程及其所有子进程(除非它们 在新的流程组中生成)以接收TERM。
与在终端中运行作业的效果相同, 按CTRL + C,但在后一种情况下发送的是INT,而不是TERM。
由于Jenkins立即与子进程断开连接,并且 报告没有进一步的输出:
可能会误导您未调用信号处理程序。 (这使许多人误以为詹金斯已经扼杀了这一进程。)
可能会误导派生进程已完成或 退出,而他们继续运行。