MDXDave.de

IT-Freelancer // Android + Coding

Laden...

GitLab-Runner mit Android unter Debian Buster (10)

veröffentlicht vor 4 Jahren, am 3. Januar 2020  |  aktualisiert vor 4 Jahren  |  Android    GitLab    CI    Debian    Buster      |  0 Kommentare

Seit einigen Jahren nutze ich bereits GitLab inkl. dessen GitLab-Runner um meine Android-Builds automatisiert zu kompilieren.

Ich hatte dafür auch vor über 3 Jahren mal einen Beitrag geschrieben , der aber mittlerweile nicht mehr aktuell ist, vielleicht überarbeite ich den die Tage mal... 🤔

Aber zurück zum eigentlichen Problem:

Seit dem Update auf Debian Buster (10) liefen die Builds nicht mehr, sondern wurden zunächst instant mit

ERROR: Job failed: exit status 1

beendet. Eine kleine Recherche brachte zu Tage, dass das Problem wohl am .bashrc_logout Skript des Gitlab-Runners lag.

Also schnell die folgenden Zeilen aus /home/gitlab-runner/.bashrc_logout entfernt und der Fehler tratt nicht mehr auf:

if [ "$SHLVL" = 1 ]; then [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -qfi

Die Builds funktionierten allerdings nach wie vor nicht. Nun begegnete mir ein neuer Fehler:

> Task :app:kaptNightlyKotlin FAILED
e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Auch hier half eine kurze Recherche:

Debian 10 nutzt standardmäßig OpenJDK 11, JAXB (Java Architecture for XML Binding) ist allerdings seit Java 10 als deprecated markiert und wurde in Java 11 komplett entfernt.

Was tun? Nun, das einfachste ist zurück auf Java 8 zu wechseln, dort funktionieren die Builds nämlich definitiv.

Hierfür bearbeiten wir zunächst unsere APT sources.list:

sudo nano /etc/apt/sources.list

und fügen dort folgende Paketquelle hinzu (sofern noch nicht vorhanden):

deb http://ftp.de.debian.org/debian sid main

Anschließend aktualisieren wir die Pakete mittels

sudo apt-get update

und installieren dann OpenJDK8:

sudo apt-get install openjdk-8-jdk

Als nächstes wechseln wir die Standard-Version von java und javac:

sudo update-alternatives --config javasudo update-alternatives --config javac

Hier sollte dann jeweils folgende (ähnliche) Ansicht erscheinen:

There are 2 choices for the alternative java (providing /usr/bin/javac). Selection Path Priority Status------------------------------------------------------------* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual modePress <enter> to keep the current choice[*], or type selection number: 

Tippt dort die Zahl ein die vor Java 8 steht und bestätigt das ganze mit Enter.

Anschließen starten wir GitLab-Runner neu und die Builds sollten wieder funktionieren:

sudo gitlab-runner restart