Im zweiten Teil der Serie zum Thema Continuous Deployment einer Ionic-App mit Jenkins gehe ich näher auf das Deployment der Android-App in den Play-Store ein.

Vorbereitung

Auch hierfür werden wieder einige Plugins benötigt, die sich wie beim letzten mal über den Plugin-Manager (/pluginManager/available) installieren lassen. Folgende Plugins sind für das Deployment notwendig:

Konfiguration der Plugins

Zunächst konfigurieren wir(global) die Zugangsdaten für das Android Signing und das Google Play Android Publisher Plugin über „/credentials/store/system/domain/_/“. Wir benötigen folgende Schlüssel:

  • Zugang zu Google Service Account
  • Zertifikat zum Signieren

Google Service Account

Für den Google Service Account wird eine JSON-Datei benötigt. Um diese zu erstellen, müssen folgende Schritte durchgeführt werden:

  1. Mit dem Administrator Account in die Google Play developer console einloggen
  2. Unter Einstellungen API-Zugriff auswählen
  3. Hier muss ggf. noch ein neues Projekt angelegt werden
  4. Auf „Dienstkonto erstellen“ klicken und den Anweisungen auf der Seite folgen
  5. Auf der verlinkten Seite kann nun die JSON-Datei heruntergeladen werden

Der gerade erstellte Account muss außerdem noch mit den notwendigen Berechtigungen ausgestattet werden, um die App auch veröffentlichen zu können:

  1. In den Einstellungen der Google Play developer console den Unterpunkt „Nutzer und Berechtigungen“ auswählen
  2. Hinter dem neu erstellten Account auf das Zahnrad klicken
  3. Berechtigungen ändern auswählen
  4. Die folgenden Berechtigungen müssen gesetzt sein:
    • Store-Einträge, Preise und Verfügbarkeit ändern
    • Produktions-APKs verwalten
    • Alpha- und Beta-APKs verwalten
    • Alpha- und Beta-Nutzer verwalten

Diese Datei kann über „Zugangsdaten hinzufügen“ bei Jenkins eingepflegt werden. Hierzu sind folgende Einstellungen vorzunehmen:

  1. Art: Google Service Account from private key
  2. Project Name: hier kann ein beliebiger Name vergeben werden.
  3. JSON key: hier wird über den Button „Datei auswählen“ die eben erstellte Datei hochgeladen.

Zertifikat zum Signieren

Um das Zertifikat hinzuzufügen muss dieses zunächst einmal erstellt  werden. Hierzu wird in der Konsole folgender Befehl ausgeführt:

keytool -genkey -v -keystore ionicApp-release-key.p12 -keyalg RSA -keysize 2048 -validity 10000 -alias ionicBuild -deststoretype PKCS12

Nachdem das Zertifikat erstellt wurde, kann dieses zu Jenkins hinzugefügt werden. Hierzu sind folgende Einstellungen vorzunehmen:

  1. Bei Art wird „Zertifikat“ ausgewählt
  2. Bei Gültigkeitsbereich wird „Global“ ausgewählt
  3. Da das Zertifikat lokal erstellt wurde, wird „PKCS#12-Zertifikat hochladen“ ausgewählt und die entsprechende Datei hochgeladen
  4. Bei Passwort das Passwort für den entsprechenden Schlüssel eingeben
  5. Bei ID einen eindeutigen Namen eingeben
  6. Die Beschreibung ist optional

Deployment Job

Zunächst erstellen wir einen Job, um die Android App zu signieren und diese auch in den Play-Store zu deployen. Hierzu wird ein neues „Free Style“-Softwareprojekt mit dem Namen „Deploy Android“ angelegt. Dabei wird unter Buildverfahren zunächst die mit der Pipeline im vorherigen Teil erstellte .apk-Datei importiert, indem der Build-Schritt „Artefakt aus einem anderen Projekt kopieren“ ausgewählt wird. Zur Konfiguration wird unter „Projekname“ der Name des zuvor erstellten Jobs gefolgt von / eingegeben. Beispielsweise „IonicBuild/master“. Um sicherzustellen, dass die korrekte Datei kopiert wird, muss unter „Zu kopierende Artefakte“ der Wert „**/*-unsigned.apk“ eingegeben werden und der Text unter „Zielverzeichnis“ gibt an, in welchen Ordner die Datei kopiert werden soll. Der hier eingegebene Name ist beliebig.

Als nächstes wird der Build-Schritt „Sign Android APKs“ hinzugefügt. Unter „Key Store“ und „Key Alias“ werden das zu Beginn erstellte und hinzugefügte Zertifikat ausgewählt und der bei der Erstellung festgelegte Alias eingegeben. Bei „APKs to Sign“ wird erneut „**/*-unsigned.apk“ eingegeben, um die zuvor kopierte Datei zu signieren. Falls die signierte Datei auch im Jenkins zum Download zur Verfügung stehen soll, kann der Haken bei „Archive Signed APKs“ gesetzt werden. Nachdem dieser Schritt durchgeführt wurde, ist die Datei signiert und kann bereits per Sideload auf einem Android Gerät installiert werden.

Um die App in den Play-Store hochzulagen, wird die Post-Build-Aktion „Upload Android APK to Google Play“ aufgerufen. Um die korrekte Datei hochzuladen, wird bei „APK files“ „**/android-release.apk“ eingegeben und bei „Google Play Account“ der zuvor angelegte Account ausgewählt. Des Weiteren muss noch der „Release track“ ausgewählt werden. Selbstverständlich können hier noch weitere Post_Build-Aktionen hinzugefügt werden.

Build Job

Nachdem der Job für das eigentliche Deployment erstellt wurde, müssen wir die Pipeline aus dem letzen Teil noch ein wenig erweitern, um das entsprechende Artefakt bereitzustellen. Zuerst ergänzen wir am Ende des steps Bereich der Build-Stage folgenden Code:

    echo 'Building Apps'
    sh 'ionic cordova build --prod --release android'

    echo 'Archive unsigned Builds'
    archive '**/*-unsigned.apk'

Um das erstellte Artefakt für den eben erstellten Job zur Verfügung zu stellen, wird in der 3. Stage (Deploy) folgender Code ergänzt:

dir("IonicApp"){
    echo 'Signing Android..'
    build job: 'Deploy Android', wait: false
}