(JENKINS-48300: if on an extremely laggy filesystem, consider -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=86400)
这个问题发生在执行sh 时由于执行时间过长,jenkins 中的外部任务,例如shell 命令,被一个Durable Task 的插件通过heartbeat管理着。当Jenkins agent上发生OOM,100% CPU或者IO阻塞 等问题的时候, heartbeat会偶发性的中断,导致jenkins 的sh 任务异常。
解决方法1:
重构pipeline,使其
1,尽量避免大量并行的复杂step,特别是IO/计算密集型任务
2,尽量避免使用sh 来执行通用型的,IO密集,外部依赖型,复杂型和高耗时的操作. 如可以,尽量使用jenkins plugin来拆解和构建, 如 Artifactory, tee
解决方法2 :
通过增大HEARTBEAT_CHECK_INTERVAL 来提高healthcheck的容错率,可通过下面的代码在pipeline 上下文中来设置
System.setProperty("org.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL", "86400"); # any interval you wish