Docker image for React Native, Android and Fastlane
March 3, 2021
Ziel
Ein reproduzierbares Docker Image, das Android Builds fuer React Native Projekte erstellt. Typische Einsaetze:
- CI/CD (Bitbucket, GitHub Actions, GitLab)
- lokale Builds in einer sauberen, wiederholbaren Umgebung
- gleiche Toolchain fuer alle Team-Mitglieder
Wichtige Hinweise
- Expo Turtle ist weitgehend legacy. Heute ist
eas build(EAS Build) der Standard. Wenn du Turtle nutzt, pinne Versionen bewusst. - Android Builds sind empfindlich gegen Versionen von Java, Node, Gradle und SDK. Halte diese stabil und dokumentiert.
- Docker Images veralten schnell. Plane regelmaessige Updates (monatlich).
Mindest-Bausteine
- Linux Basis (z.B.
ubuntu:20.04) - Node.js (z.B. LTS 16/18)
- Java (JDK 11 oder 17 fuer aktuelle RN/Gradle)
- Android SDK + Build Tools + Platform Tools
git,curl,wget,zip,unzip- optional:
ruby+fastlane
Beispiel: Dockerfile (vereinfachtes Geruest)
code
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools"
RUN apt-get update -qq && \
apt-get install -qq --no-install-recommends \
ca-certificates curl git unzip zip \
openjdk-11-jdk && \
rm -rf /var/lib/apt/lists/*
# Node.js LTS
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
apt-get install -qq nodejs && \
npm i -g yarn
# Android SDK cmdline-tools
RUN mkdir -p $ANDROID_SDK_ROOT/cmdline-tools && \
curl -fsSL -o /tmp/cmdline.zip \
https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \
unzip -q /tmp/cmdline.zip -d $ANDROID_SDK_ROOT/cmdline-tools && \
mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools \
$ANDROID_SDK_ROOT/cmdline-tools/latest && \
rm /tmp/cmdline.zip
# Lizenzen akzeptieren + SDKs installieren
RUN yes | sdkmanager --licenses && \
sdkmanager \
"platform-tools" \
"platforms;android-34" \
"build-tools;34.0.0"
Build und Nutzung
code
docker build -t rn-android-build .
docker run --rm -it -v "$PWD:/app" -w /app rn-android-build bash
Fastlane in Docker
- Fastlane kann ueber Ruby installiert werden (
gem install fastlane). - Alternativ: ein eigenes Image bauen, das Fastlane schon enthaelt.
- Wichtig: Keystore und Secrets als
ENVoder per CI Secret Store injizieren.
Beispiel: CI Schritt (Bitbucket, vereinfacht)
code
- step:
name: Build Android App Bundle
image: rn-android-build:latest
caches:
- npm
script:
- npm ci
- bundle install
- fastlane android release
Versionen bewusst pinnen
Halte Versionen im Dockerfile fest (Node, Java, SDK), damit Builds reproduzierbar bleiben. Ein Update ist dann eine bewusste, testbare Aenderung.