web-dev-qa-db-fra.com

Jenkins Android build échoue - impossible de construire libwebviewchromium.so

Un conseil ou une idée est nécessaire.

J'essaie de construire Android 5.1.1 Lollipop avec Jenkins. Mais il ne parvient pas à construire 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

En même temps, lorsque j'essaye de le construire manuellement, cela réussit:

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

Je me demande comment il peut arriver que la même opération puisse réussir avec une console et échouer avec Jenkins. Pourriez-vous s'il vous plaît partager vos idées avec moi?

P.S. La machine de construction dispose de 24 Go de RAM et de 15 Go, ainsi que d'un fichier d'échange, et d'un disque flash SSD de 512 Go (62% disponible). Le système d'exploitation est Ubuntu 14.04LTS, 64 bit.

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

Le problème est résolu . Nous avons copié la configuration Jenkins/AOSP à partir d'un autre serveur et quelque chose n'allait pas avec la copie .Le nettoyage de ccache a résolu le problème. Après avoir exécuté la commande "ccache -c", tout a bien fonctionné.

1
Vladimir Lindemann

Je me demande comment il peut arriver que la même opération puisse réussir avec une console et échouer avec Jenkins.

Jenkins pouvant ne pas s'exécuter avec le même utilisateur (ou sur le même poste de travail, si l'agent qui exécute le travail est un ordinateur distinct)

Vérifiez s'il y a des différences de variables d'environnement entre:

  • votre ligne de commande, où vous pouvez exécuter votre commande avec succès (tapez env après vos commandes)
  • les variables d'environnement que vous pouvez voir associées avec votre travail (ayant échoué)

Par exemple, une différence LD_LIBRARY_PATH pourrait expliquer la différence entre les deux versions.

5
VonC

Assurez-vous que tous les fichiers d'en-tête sont inclus et bibliothèques liées au moment de la compilation. Les erreurs Undefined Reference résultent principalement de ces deux raisons.

3
borngeek

l'utilisateur jenkins a son propre ~/.bashrc, qui peut ne pas contenir de variables d'environnement.

activer temporairement le login Shell pour jenkins, configurer l'environnement, puis le désactiver à nouveau.

lorsqu’il est possible de construire manuellement en tant qu’utilisateur jenkins, il devrait également être construit lorsqu’il est automatisé.

2
Martin Zeitler