詹金斯永远不会完成

时间:2014-01-14 11:40:10

标签: oracle bash jenkins

我有一个Jenkins主/从设置,它一直很愉快,在某些Linux机器上运行Oracle导入。

我刚刚添加了一个新的从属节点,并试图在这个新节点上运行我们现有的数据库导入作业。这项工作包括三个子项目;第一个运行一些执行shell,复制文件和更改权限,这当前成功完成,第二个运行一个以Oracle impdp结尾的执行shell。 impdp完成(db存在且ps -ef不再显示impdp正在运行)但Jenkins子项目永远不会完成。用户界面就坐在那里,时钟响起。

我尝试在impdp之后添加一个echo,这也正确执行,但子项目仍然没有完成。

如果我添加Post-Build电子邮件通知,则不会发送。

永远不会到达第三个子项目。

可能是什么原因以及如何调试正在发生的事情?

3 个答案:

答案 0 :(得分:5)

在我们的案例中,工作将宣布"完成:成功",然后继续与一些未知的Jenkins业务再持续10或20分钟。在进行更详细的日志记录后,我们发现它与名不副实的LogRotator有关。

我们有数千个旧版本,并且正在删除超过特定天数的文件。由于处理旧构建的方式,Jenkins会搜索旧构建的整个列表,即使它们已经删除了它们的工件。

现在修复了与此相关的问题:https://issues.jenkins-ci.org/browse/JENKINS-22607

截至目前,我没有在发布中看到它,但如果您遇到此问题,则临时解决方法是关闭删除。

答案 1 :(得分:3)

这结果是可怕的: - )

完成工作后,Jenkins试图杀死它产生的所有进程。为了识别它们,它会遍历操作系统中的所有进程,从/proc/<pid>/environ(这是一个Linux框)读取,其中包含进程的环境变量,并将它们与它为Jenkins进程设置的环境进行比较。

问题是我们的数据库服务器上运行了一个特定的Oracle进程,如果你试图从/proc/pid/environ读取它,它就会永远挂起 - 这就是Jenkins代码卡住的地方。

我不知道为什么它会像这样被卡住,我的DBA也没有。我们重新启动它,现在它可以工作。

答案 2 :(得分:0)

您可以将set +x添加到shell脚本的顶部,以查看实际执行的命令。这样你就可以从输出中轻松看到哪个命令阻塞了。