2016-06-13 19 views
1

Kürzlich begann ich Jenkins in einem Docker Container mit Oracle Java 8 zu verwenden. Beim Erstellen eines Projekts mit Gradle ich bekomme diese Fehlermeldung:Gradle Build schlägt fehl in jenkins: alpine Container: UnbefriedigterLinkError: linux-amd64/libnative-platform.so: libstdC++.so.6:

UnsatisfiedLinkError: linux-amd64/libnative-platform.so: libstdc++.so.6: cannot open shared object file: No such file or directory 

In Jenkins I "Force-GRADLE_USER_HOME Arbeitsbereich zu verwenden" ausgewählt ohne Glück überhaupt. Die Datei libnative-platform.so befindet sich im erwarteten Verzeichnis, aber Gradle wird nicht funktionieren. Ich habe versucht, Gradle im Container zu installieren und das gleiche Ergebnis. Mein letztes Setup ist mit Gradle Wrapper.

Ich schaute überall, aber ich hatte kein Glück auf meiner Suche. Ich weiß es zu schätzen, wenn jemand dies beleuchten kann.

Antwort

2

libstdc++.so.6: cannot open shared object file

libnative-platform.so des JRE/JDK verknüpft ist gegen gnu libc aber Alpine Bilder basieren auf musl libc.

Die einfache Lösung besteht darin, ein glibc-basiertes Docker-Image wie Debian zu verwenden. Wenn Sie bei Alpine bleiben möchten, finden Sie möglicherweise Hinweise in diesem github issue.

+0

Ich werde die Verbindung überprüfen, Ich weiß, dass es einen Trick gibt, um Oracle Java im Container zu installieren, ich werde es mir auch ansehen. Wird das Ergebnis veröffentlichen, vielen Dank @Erik. –

1

Das Problem ist, dass Oracle JDK gegen GNU C-Bibliothek (Glibc) verknüpft ist, die hier nicht verfügbar ist.

Alpine Linux verwendet glibc nicht als konventionelle Distributionen wie Debian, Fedora oder Gentoo. Stattdessen verwendet es musl libc, eine leichte, schnelle, einfache und standardkonforme C-Bibliothek (d. H. Alles, was glibc nicht ist).

Die Lösung ist sehr einfach, installieren Sie einfach OpenJDK aus dem Alpine-Repository (Paket openjdk8). Mach dir keine Sorgen über die Kompatibilität, Oracle JDK 8 ist nur Marken-Distribution von OpenJDK 8, die Codebasis ist nahezu identisch.

Wenn Sie auf Oracle JDK bestehen aus irgendeinem Grund und kümmern sich überhaupt nicht * um die Sicherheit, dann verwenden Sie keine Alpine Linux, aber einige konventionelle Verteilung ...

Mehr erfahren Sie in meinem Artikel lesen JRuby on Alpine Linux auf das JRuby-Wiki.

* Oracle JDK hat aufgrund der US-Richtlinien standardmäßig eine eingeschränkte Kryptografie. Es ist mit Ask.com Adware verteilt. Und weil es nur als BLOB verteilt ist, können Sie nicht wissen, was sonst schlecht innen ist ...

+1

Gute Info, wusste ich nicht über diese Kryptographie Sache. Ich musste den Job für ein paar Tage pausieren und werde darauf zurückkommen, wird euch auf dem Laufenden halten. –

+0

Die Installation unbegrenzter Kryptografie-Stärke ist kinderleicht und das Adware-Bit gilt nur für Windows/Mac-Installationen und optional für diese. –

+0

@ErikDannenberg Noch wissen die meisten Leute nicht einmal davon. Wie auch immer, der Punkt ist, dass es die Glaubwürdigkeit von Oracle stark reduziert, genug, dass Sie nichttransparentes BLOB von ihnen installieren wollen. Vor allem, wenn es keinen Grund dafür gibt. –

4

Sie diese Arbeit machen kann durch die Installation des libstdc++ Paket in Alpine

apk add --no-cache libstdc++