【问题标题】:Jenkins build fails when user logs off node用户注销节点时 Jenkins 构建失败
【发布时间】:2012-05-10 16:30:30
【问题描述】:

有时,由 Jenkins (1.461) 完成的构建会在中间某处的随机位置停止。这些构建是对 Visual Studio 2008 SP1 的 devenv.com 的手动脚本调用,主要用于 C++ 代码。 Visual Studio 不会发出错误消息; devenv 日志中的最后一条消息是正在构建的一些随机文件。由于依赖于某些构建输出的构建后 Windows 批处理命令,Jenkins 构建失败。这种情况很少发生(大约 15 个构建中的 1 个)。 Jenkins 的错误日志在构建失败时没有显示任何异常。令人惊讶的是,它说构建成功,尽管它在其他任何地方都显示它失败。

这个问题被 Jenkins 孤立了。在开发人员的办公桌上运行的相同构建脚本从未以这种方式失败。

Jenkins 节点是 32 位 Windows XP 机器。它们都有充足的可用磁盘空间。 Jenkins 被配置为每个节点一次只运行一项作业。事件日志显示在构建停止时没有发生明显的坏事(例如,Visual Studio 崩溃)。

有没有人有什么想法可以解决这个问题?

【问题讨论】:

  • Jenkins 日志说什么? (http://[jenkins_server]/log)。

标签: c++ windows visual-studio-2008 jenkins


【解决方案1】:

我不记得自己曾经遇到过 jenkins 的这个问题,但我在 MSVC 2008 中经常遇到链接器崩溃。这对我来说几乎每天都会发生。如果是链接器崩溃,那么这可能是一种解释。(也许没有记录链接器崩溃?)

编辑: 我们在 32 位 Win7 上使用 MSVC2008 SP1。 我们在构建 c++ 解决方案时使用 MSBuild 3.5。

【讨论】:

    【解决方案2】:

    我们最终将随机构建失败与 Jenkins 节点上的注销事件相关联。这导致了JVM bug/feature(Oracle Java 错误 ID 6871190),其中 Windows 中的注销事件导致信号处理程序终止 JVM。您可以通过将 -Xrs 选项传递给 JVM 来禁用此行为(可能还有其他缺点),但该选项不会自动传播到子 Java 进程。

    我们通过 -Xrs 来启动 Jenkins 本身,并且 Jenkins 服务本身通过注销而存在。当前的假设是 Jenkins 的构建过程的某些部分是通过另一个未使用 -Xrs 调用的 Java 子进程启动的。

    【讨论】:

    • 我在使用 Matlab 时遇到了同样的问题,这是一个 java 应用程序,我发现我可以在它的 'java.opts' 文件中设置 '-Xrs'。值得检查您的下游进程是否有一个看起来很常见的 java.opts 文件。
    • 我在 Ubuntu 中遇到了同样的问题:-“有时,Jenkins (1.461) 完成的构建会在中间的某个随机点停止。这个问题与 Jenkins 隔离。相同的构建脚本在开发人员的办公桌上运行从未以这种方式失败”
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多