【问题标题】:How to handle Jenkin's "Abort build" gracefully?如何优雅地处理詹金斯“中止构建”?
【发布时间】:2016-08-31 12:07:31
【问题描述】:

我正在尝试从中止的 Jenkins 构建中挽救测试数据。文档 (https://wiki.jenkins-ci.org/display/JENKINS/Aborting+a+build) 似乎引发了中断,因此我尝试使用自定义处理程序来捕获它:

signal.signal(signal.SIGINT, signal_handler)

通过 CMD 运行我的程序并发送 crtl-c 会刺激 signal_handler 函数。但是,当通过 Jenkins 运行时,不会捕获中断信号。是否有任何插件可以改变 Jenkins 中止信号,或者有没有办法优雅地处理它?

【问题讨论】:

    标签: python jenkins


    【解决方案1】:

    好吧,我知道这有点晚了,但是 jenkins 在中止时会发送一个TERM 信号。基本上你只需要注册那个信号

    signal.signal(signal.SIGTERM, signal_handler)
    

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

    上面写着:

    詹金斯

    当 Jenkins 作业被取消时,它会将TERM 发送到 进程组 它产生的过程,并立即断开连接,报告“完成: ABORTED”,无论作业的状态如何。

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

    这与在终端中运行作业并按 CTRL+C,除了后一种情况,发送INT,而不是TERM

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

    • 它可能会误导地认为信号处理程序没有被 调用。 (其中has mislead many 认为 Jenkins 已经 KILLed 进程。)

    • 可能会误导性地认为衍生进程已完成或 退出,而他们继续运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 2016-07-16
      • 2014-07-18
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多