Jenkins Android 构建失败 - 无法构建 libwebviewchromium.so

Jenkins Android build fails - can't build libwebviewchromium.so

需要一些建议或想法。

我正在尝试使用 Jenkins 构建 Android 5.1.1 Lollipop。但它无法构建 libwebviewchromium.so:

...
out/target/product/generic/obj/GYP/shared_intermediates/blink/bindings/core/v8/V8SVGNumber.cpp:55: error: undefined reference to 'blink::SVGNumberTearOff::setValue(float, blink::ExceptionState&)'
out/target/product/generic/obj/STATIC_LIBRARIES/third_party_WebKit_Source_core_webcore_generated_gyp_intermediates/SVGElementFactory.cpp:383: error: undefined reference to 'blink::SVGMetadataElement::create(blink::Document&)'
external/chromium_org/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h:45: error: undefined reference to 'blink::SVGNumberTearOff::SVGNumberTearOff(WTF::PassRefPtr<blink::SVGNumber>, blink::SVGElement*, blink::PropertyIsAnimValType, blink::QualifiedName const&)'
collect2: error: ld returned 1 exit status
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] Error 1

同时,当我尝试手动构建它时,它成功了:

. build/envsetup.sh
set_stuff_for_environment
lunch zh2_qemu_eng
make clean
make -j24

我想知道为什么同样的操作在使用控制台时可以成功,而使用 Jenkins 时却失败了。能否请您与我分享您的想法?

P.S。构建机器有 24GB RAM 和 15GB 交换文件,以及一个 512GB SSD 闪存盘(62% 可用)。 OS 是 Ubuntu 14.04LTS,64 位。

$ free -m
             total       used       free     shared    buffers     cached
Mem:         24021      22079       1942         75       4778       8768
-/+ buffers/cache:       8532      15488
Swap:        16036        345      15691

I wonder how it comes that the same operation can be successful when using a console and fail when using Jenkins.

因为 Jenkins 可能不会 运行 与同一用户(或在同一工作站上,如果执行作业的代理是单独的机器)

仔细检查以下环境变量是否存在差异:

  • 你的命令行,在那里你可以成功运行你的命令(在你的命令后输入env
  • 你的(失败的)工作environment variables you can see associated

例如,LD_LIBRARY_PATH 差异可以解释两个构建之间的差异。

用户 jenkins 有自己的 ~/.bashrc,可能缺少环境变量。

暂时为 jenkins 启用登录 shell,设置环境,然后再次禁用它。

当能够以用户 jenkins 的身份手动构建时,它也应该在自动构建时构建。

确保编译时包含所有头文件库链接Undefined Reference 错误主要是由于这两个原因造成的。

问题已解决。 我们从另一台服务器复制了 Jenkins/AOSP 设置,但复制有问题。 ccache 的清理解决了这个问题。执行 "ccache -c" 命令后,一切正常。