TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

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 ENV oder 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.