Kontinuierliche Auslieferung für Android mit Fastlane und GitHub Actions
Voraussetzungen
Bevor Sie mit dem Tutorial fortfahren…
- Stellen Sie sicher, dass Sie GitHub verwenden
- Ihre App ist bereits im Google Play Store veröffentlicht
- Lust zum Lesen 😆…
Wichtiges zum Preis
https://githubcom/features/actions
Der Service ist bis zu einem Limit ‘kostenlos’, abhängig von der gewählten Maschine. Wir werden eine Linux-Maschine verwenden. In der Abbildung sehen Sie den Preis und die Limits (Preise zum Zeitpunkt der Erstellung des Tutorials, sie könnten sich in Zukunft ändern).
🔴 Nach dieser Warnung zu Anforderungen und Preisen fahren wir fort, wenn Sie möchten
📣 In diesem Beitrag gehen wir davon aus, dass wir die App im Google Play erstellt haben und über den Signierungsschlüssel des Google-Ökosystems verfügen
Jetzt geht’s los 🧑🏽💻
Schritte, die wir in diesem Beitrag befolgen werden
- Fastlane-Dateien kopieren
- Ihre Geheimnisse in GitHub verschlüsselten Geheimnissen speichern
- Erstellen und Speichern Ihres Google Play-Dienstkontos-Schlüssels
- Speichern Ihres Android-Signierungsschlüssels
- Einrichten Ihrer GitHub Actions Workflow yml-Datei
1. Fastlane-Dateien kopieren
Fastlane ist eine Ruby-Bibliothek, die zur Automatisierung häufiger Aufgaben in der mobilen Entwicklung erstellt wurde. Mit Fastlane können Sie benutzerdefinierte “Lanes” konfigurieren, die eine Reihe von “Actions” bündeln, die Aufgaben ausführen, die Sie normalerweise mit Android Studio durchführen würden. Sie können viel mit Fastlane machen, aber für die Zwecke dieses Tutorials werden wir nur eine Handvoll Kernaktionen verwenden.
Erstellen Sie einen Fastlane-Ordner im Stammverzeichnis Ihres Projekts und kopieren Sie die folgenden Dateien: Fastlane
Speichern Ihrer Geheimnisse in GitHub verschlüsselten Geheimnissen
Um sich bei der Google Play Developer API zu authentifizieren, benötigen wir einen Dienstkonto-Schlüssel. Die Dienstkonto-Schlüsseldatei gilt als sensibel, was bedeutet, dass wir sie sicher speichern müssen, aber an einem Ort, an dem sie von unseren GitHub Actions-Workflows und unserem Fastfile bei Bedarf aufgerufen werden kann. Hier kommen GitHubs verschlüsselte Geheimnisse ins Spiel: Wir werden alle unsere sensiblen Schlüssel in Repository-Geheimnissen speichern, um sie sicher aufzubewahren und gleichzeitig automatisch für die GitHub Actions-Workflows im Repository zugänglich zu machen.
Erstellen und Speichern Ihres Google Play-Dienstkontos-Schlüssels
Wenn Sie einen neuen Dienstkonto-Schlüssel erstellen müssen, folgen Sie den hier beschriebenen Schritten. Sobald Sie Ihre JSON-Datei mit dem Dienstkonto-Schlüssel haben, fügen wir sie zu den verschlüsselten Geheimnissen Ihres GitHub-Repositories hinzu.
Um ein neues Geheimnis zu GitHubs verschlüsselten Geheimnissen hinzuzufügen, navigieren Sie zunächst zum Android-Repository, dem Sie den GitHub Actions-Workflow hinzufügen möchten. Klicken Sie ganz rechts auf “Settings”.
Klicken Sie dann auf “Secrets”,
dann auf “Actions” aus der Liste im linken Menü.
Dies sind die verschlüsselten geheimen Umgebungsvariablen für das Repository. Alle Workflows, die im Repository eingerichtet sind, haben Zugriff auf diese Repository-Geheimnisse.
Klicken Sie hier auf “New repository secret”, um ein neues Geheimnis hinzuzufügen:
Wenn Sie auf “New repository secret” klicken, sehen Sie ein Formular, das Sie auffordert, einen Namen für Ihr neues Geheimnis und seinen Wert einzugeben.
GitHub-Geheimnisse akzeptieren nur Zeichenkettenwerte, daher müssen Sie für bestimmte Anmeldeinformationen (z.B. jks- oder json-Dateien) die Datei zuerst in eine base64-codierte Zeichenkette umwandeln, bevor Sie sie zu GitHub-Geheimnissen hinzufügen. Sie können dies von der Kommandozeile aus tun:
Dies kopiert die resultierende Zeichenkette in Ihre Zwischenablage, sodass Sie sie direkt in ein neues Repository-Geheimnis auf GitHub einfügen können.Hier ist die Übersetzung des Textes ins Deutsche:
Zum Beispiel:
Erstellen wir ein neues Repository-Geheimnis wie folgt:
- PLAY_CONFIG_JSON: der base64-kodierte Service-Account-Schlüssel JSON
Bitte beachten Sie, dass Sie eine Sicherungskopie Ihrer Geheimnisse an einem anderen Ort sicher aufbewahren sollten (irgendwo, das nicht GitHub verschlüsselte Geheimnisse sind), da Sie die Anmeldeinformationen nach dem Hinzufügen nicht mehr aus GitHub exportieren oder darauf zugreifen können
Mit unserem Service-Account-Schlüssel, der zu den GitHub-Repository-Geheimnissen hinzugefügt wurde, können wir uns jetzt von jedem GitHub Actions Workflow, der dem Repository hinzugefügt wurde, mit der Google Play Developer API authentifizieren
Speichern Ihres Android-Signaturschlüssels
Um Android-Release-Builds in CI ordnungsgemäß zu signieren, benötigt der Workflow Zugriff auf entweder einen Android-Upload-Schlüssel oder einen App-Signaturschlüssel. Apps, die nach August 2021 erstellt wurden, verwenden standardmäßig Googles neues Play App Signing-System, bei dem ein vom Benutzer verwalteter Upload-Schlüssel verwendet wird, um AABs vor dem Upload zu signieren, aber der App-Signaturschlüssel von Google verwaltet wird. Wenn Ihr Team Googles Play App Signing nutzt, benötigen Sie für die CI-Pipeline nur den Upload-Schlüssel Ihrer App, da die Signierung erst nach dem Upload des AAB in die Play Console erfolgt. Wenn Sie noch einen Upload-Schlüssel und Keystore erstellen müssen, befolgen Sie die Anweisungen in der Android-Entwicklerdokumentation
Wenn Ihr Team noch nicht zum Google Play App Signing-System migriert ist, müssen Sie stattdessen Ihren App-Signaturschlüssel für den CI-Workflow verfügbar machen, um Ihre App vor dem Upload ordnungsgemäß zu signieren
Fügen Sie Folgendes als Repository-Geheimnisse hinzu:
- ANDROID_KEYSTORE_FILE: die base64-kodierte
jks
- oderkeystore
-Datei, die zum Signieren Ihrer Android-Builds verwendet wird. Dies ist entweder die Keystore-Datei, die mit Ihrem Upload-Schlüssel verbunden ist (bei Verwendung von Play App Signing), oder Ihr App-Signaturschlüssel - KEYSTORE_KEY_PASSWORD: das Passwort für die Keystore-Datei
- KEYSTORE_KEY_ALIAS: der Keystore-Alias
- KEYSTORE_STORE_PASSWORD: das private Schlüssel-Passwort
- DEVELOPER_PACKAGE_NAME: Ihre Android-App-ID wie com.example.app
Mit diesen zu GitHub’s Repository-Geheimnissen hinzugefügten Geheimnissen sind wir bereit, unseren GitHub Actions Workflow für unsere Builds einzurichten
Einrichten Ihrer GitHub Actions Workflow yml-Datei
Jetzt richten wir unsere Android GitHub Actions Workflow yml-Datei ein – sie wird die Schritte definieren, die wir als Teil unseres Workflows ausführen werden. In diesen Schritten werden wir unsere Fastlane-Lanes aufrufen
Erstellen wir zunächst die notwendigen Ordner. Rufen Sie aus dem Stammverzeichnis Ihres Projekts auf:
Fügen Sie dann den folgenden Code in Ihre neu erstellte build-upload-android.yml
-Datei ein:
Dieser Workflow sollte nach jedem GitHub-Tag ausgelöst werden. Wenn Sie das Tagging automatisieren müssen, lesen Sie bitte Automatischer Build und Release mit GitHub Actions
Dann wird dieser Workflow Ihre Nodejs-Abhängigkeiten abrufen, sie installieren und Ihre JavaScript-App bauen
Ihre App muss nicht Ionic verwenden, nur Capacitor-Basis ist obligatorisch. Sie kann alte Cordova-Module haben, aber Capacitor JS-Plugins sollten bevorzugt werden
Jedes Mal, wenn Sie einen neuen Commit senden, wird ein Release in der Google Play Console, Beta-Kanal, erstellt
Ich werde diesen Blog mit Ihrem Feedback verbessern. Wenn Sie Fragen oder Vorschläge haben, lassen Sie es mich bitte per E-Mail wissen: martin@capgo.app
Build-Verarbeitung
Bei GitHub Actions werden Sie basierend auf den Minuten abgerechnet, die Sie für die Ausführung Ihres CI/CD-Workflows verwendet haben. Aus Erfahrung dauert es etwa 3-5 Minuten, bevor ein Build im Google Play Store verarbeitet werden kann
Für private Projekte können die geschätzten Kosten pro Build bis zu 0,008 $/min x 5 min = 0,04 $ betragen4** oder mehr, abhängig von der Konfiguration oder den Abhängigkeiten Ihres Projekts
Für Open-Source-Projekte sollte dies überhaupt kein Problem sein. Siehe pricing
Danke
Dieser Blog basiert auf den folgenden Artikeln:
- Automate publishing app to the Google Play Store with GitHub Actions⚡+ Fastlane🏃
- Getting Started CI/CD for Android Project (Part - 3— GitHub Actions)
- Android Continuous Integration using Fastlane and CircleCI 20 — Part III
- How to set up a CI/CD pipeline for your Android app using Fastlane and GitHub Actions
- Fastlane Documentation
- This GitHub message from @mrogunlana