我们正在使用Jenkins来构建我们的项目,但是有时在构建脚本运行后作业会挂起(恰好3个小时)。
我们正在使用声明性管道,并且詹金斯脚本看起来像这样:
steps {
powershell """
"cd '${WORKSPACE}'"
& ./build.ps1
write-host after script
Start-Sleep -s 5
write-host after sleep
exit \$LastExitCode
"""
echo "after build"
powershell """
write-host second powershell
"""
}
build powershell脚本使用MSBuild和Gradle来构建项目,然后将结果添加到zip文件中。
当作业挂起时,我在作业的控制台输出中看到“休眠后”输出,然后3个小时什么都没输出。在整个3个小时中,我可以看到“处理中”标志旋转,这意味着詹金斯的工作正在进行中。 3小时后,将输出“ after build”行。
当作业挂起时,我仍然可以在Jenkin的服务器上看到powershell进程(实际上,我可以看到2个powershell进程,不知道这是否正常)。这意味着exit \ $ LastExitCode命令没有终止Powershell进程。在调用build脚本后,我试图将这些行放入try-catch块中,但是没有捕获到异常,并且'after sleep'仅输出一次,因此在调用exit时卡住了工作。
我不知道这是否与https://issues.jenkins-ci.org/browse/JENKINS-48175有关,因为我的脚本运行良好。我的脚本的最后一行是写主机构建成功,我确实看到了消息。
如果作业挂起并且尝试取消它,我会在控制台输出中看到Sending interrupt signal to process After 10s process did not stop
消息。
我还尝试将“持久任务”插件降级到1.15,但是由于我使用的是依赖于更高版本的其他插件,因此构建失败。
总体而言,我认为问题在于Jenkins作业无法终止Powershell进程。 Jenkins服务器是Windows Server 2012 R2,Jenkins版本是2.147。
提前感谢大家:)