【问题标题】:Why does my gulp/teamcity build fail with "Assertion failed: 0, file src\uv-common.c, line 103"?为什么我的 gulp/teamcity 构建失败并显示“断言失败:0,文件 src\uv-common.c,第 103 行”?
【发布时间】:2015-02-02 17:25:38
【问题描述】:

我的 TeamCity 构建随机失败,并显示以下消息:

[16:25:45][Step 1/2] [16:25:45] Build complete!
[16:25:45][Step 1/2] [16:25:45] Finished 'build' after 3.32 min
[16:25:45][Step 1/2] [16:25:45] Starting 'test'...
[16:25:48][Step 1/2] Assertion failed: 0, file src\uv-common.c, line 103
[16:25:48][Step 1/2] Process exited with code 3
[16:25:48][Step 1/2] Step Gulp (Command Line) failed

一些细节:

  1. 我正在使用命令行运行器:调用 npm install;调用 gulp ci
  2. 有问题的步骤是在我编译的测试二进制文件上运行 NUnit。
  3. 我无法通过命令行重现该问题。

环境信息:

  • TeamCity v9.0.2(撰写本文时的最新版本)
  • 节点 v10.36(撰写本文时最新)
  • Gulp v3.8.10(撰写本文时最新)
  • NUnit.Runners nuget 包 2.6.4(撰写本文时最新)

【问题讨论】:

    标签: node.js teamcity gulp teamcity-9.0


    【解决方案1】:

    正如 Michael 指出的,这是由于 libuv 网络库。

    您的错误很可能来自未由 lib 处理的 EHOSTDOWN 代码并导致您的进程失败。

    joyent repolibuv one 实际上存在一些关于此的问题。

    this commit 似乎已经修复了它,现在可以使用 0.12.1 版本的 Node。

    【讨论】:

    • 哦,太好了!及时:)
    【解决方案2】:

    这说明了一切,对吧?

    Assertion failed: 0, file src\uv-common.c, line 103
    Process exited with code 3
    

    有人为了调试而设置了一个断言。事实上,第 103 行包含该断言。我猜这里的零是经过测试的值。

     98 #define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name; 
     99 const char* uv_err_name(int err) { 
    100   switch (err) { 
    101     UV_ERRNO_MAP(UV_ERR_NAME_GEN) 
    102     default: 
    103       assert(0); // <- Here's the assertion that failed
    104       return NULL; 
    105   } 
    106 } 
    107 #undef UV_ERR_NAME_GEN 
    

    有一条比你的断言高两行的有效行。它想捕获所见的错误,将其映射到已知的东西。 “默认:”意味着这是一个未知错误,作者不知道。断言就这样死了,因为他不知道如何最好地处理它。

    那么现在,什么是 libuv?这是一个网络图书馆。这完全取决于调用 uv_err_name(something) 时您在做什么。例如,可能是一个 getaddrinfo() 调用。底层 tcp 堆栈应该返回可识别的错误号。显然,您的版本无法识别从 tcp 堆栈返回的内容。

    所以,既然我们已经合理地理解了这个问题,我强烈建议更新与此相关的 libuv 库。重复测试。如果再次失败,请验证您是否已连接到以太网(如果您使用的是 Wi-Fi,则可以将其关闭)。

    【讨论】:

    • 在您的项目目录中,您可以看到现有模块中嵌入了哪些版本的 libuv:findstr /S /I /C:"\"libuv\":" package.json跨度>
    • 感谢您的详细回答,但我一直在寻找更高抽象级别的东西,例如“实际问题是什么?”在 gulp 级别或更高级别。
    • 问题实际上可能不在您的代码中。您依赖于构建良好的开源代码的基础。如果您阅读 libuv 区域中的 cmets,您会看到其他人抱怨此错误和类似错误。然后 libuv 的作者正在通过更新版本解决这些问题。例如,我的直觉告诉我,问题出在 DNS 查找步骤中,它试图从提供的主机名中获取 IP 地址。一种解决方法可能是在本地的 HOSTS 文件中创建一个条目以欺骗 DNS 步骤。想必宿主是github.com。
    猜你喜欢
    • 2020-09-18
    • 2021-05-08
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多