IT-Freelancer // Android + Coding
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