Continuous Delivery mit dem Visual Studio Mobile Center

8. März 2017

Das neue Visual Studio Mobile Center soll Mobile App Entwicklern den ganzen Continuous Delivery-Ablauf – von Erstellung bis zur Verteilung der App – nun völlig in der Cloud unter einem Dach anbieten. Obwohl es sich noch in der Entwicklung befindet, haben wir es mit unserer ShowTime Xamarin.Forms App auf die Probe gestellt.

Continuous Delivery ermöglicht durch den Einsatz geeigneter Tools, Software in kürzeren Zyklen auszuliefern. Der Fokus liegt hierbei auf der Verwendung automatisierter Verfahren und Werkzeuge, die sicherstellen, dass Software ständig erstellt, getestet und an den Endbenutzer ausgeliefert wird. In Kombination mit dem zugehörigen Benutzerfeedback führt dies zur kontinuierlichen Verbesserung der Softwarequalität.

Bei der Entwicklung von mobilen Apps kommt hinzu, dass deren Lauffähigkeit auf unterschiedlichen Plattformen und einer Vielzahl verschiedener mobiler Endgeräte sichergestellt werden muss. Die Anschaffung einer entsprechenden Anzahl mobiler Testgeräte ist wenig zweckmäßig und zudem teuer. Stattdessen macht man sich besser einen Cloud-Service zunutze, der UI-Tests der mobilen App transparent und vollautomatisch auf entsprechenden Zielgeräten ausführt und die Ergebnisse gesammelt ausgibt. Zusätzlich wären noch App-Nutzungsstatistiken nützlich (z. B. Crash Reports, Performancemetriken, usw.). Genau hier kommt Visual Studio Mobile Center (VSMC) ins Spiel.

Microsoft möchte diese Funktionen künftig konsolidiert unter einem Dach anbieten. Die sich dahinter verbergenden Dienste Xamarin Test Cloud und HockeyApp (modifiziert) werden aber weiterhin auch separat angeboten. Eine Neuheit ist die Möglichkeit, mobile Apps komplett in der Cloud zu erstellen, was die Entwicklung für iOS erleichtert, denn man muss hierfür nicht mehr notgedrungen einen Mac besitzen oder auf Dienste von Drittanbietern wie z. B. MacinCloud zurückgreifen.

Da VSMC sich noch in der Preview-Phase befindet, stellt sich die Frage, ob es neben Beispielanwendungen auch mit einer etwas umfangreicheren Anwendung zurechtkommt. Für diesen Zweck habe ich unsere auf Xamarin.Forms basierende Zeiterfassungs-Showcase-App „ShowTime“ (Plattformen iOS, Android und Windows 10) für Continuous Delivery fit gemacht und den Mobile Center Continuous Delivery-Workflow durchlaufen lassen: Erstellung der App Packages, Ausführen von UI Tests und Verteilung an Stakeholder. Bei dieser Gelegenheit wurde ebenso der Dienst zur Erhebung von Nutzungsstatistiken – Analytics – getestet. Man bemerke, dass für die Xamarin-Plattform die Ausführung von Unit-Tests in diesem Workflow derzeit noch nicht unterstützt wird. Die Umsetzung dieser fehlenden Funktionalität wurde mir in Korrespondenz mit dem VSMC Entwicklungsteam allerdings schon bestätigt.

Des Weiteren hat das VSMC noch zwei Funktionen – Tables und Identity. Mithilfe der Tables kann man ad-hoc Datentabellen erstellen, die per REST-Calls (GET, POST, PATCH, DELETE) ansprechbar sind. Identity ermöglicht es, Benutzerauthentifizierung in seiner App umzusetzen, ohne das Backend ändern zu müssen. Die Authentifizierung erfolgt dabei über einen der folgenden Identity Provider: Azure Active Directory, Facebook, Google, Microsoft Account oder Twitter. Diese zwei Funktionen und die anderen unterstützten Plattformen – Objective-C / Swift, Java und React Native – wurden im Rahmen meiner Evaluierung nicht berücksichtigt. Nebenbei sei erwähnt, dass sich generell alle Features auch über eine öffentliche REST-API ansprechen lassen.

Bereits zu Beginn der Evaluierung fand ich heraus, dass die Unterstützung für UWP in VSMC noch fehlt, weswegen der Workflow nur für die Plattformen Android und iOS getestet werden konnte. Die UWP-Unterstützung ist aber laut VSMC-Roadmap [1] bereits auf der Agenda. Eine weitere Einschränkung sind die für die Anbindung verfügbaren Quellcode-Repositories. Derzeit unterstützt das Mobile Center nämlich nur GitHub-Repositories. Da wir unsere App bisher in einem Visual Studio Team Services (VSTS) Repository hosten, mussten wir also für diesen Zweck zunächst temporär nach GitHub migrieren. Die Unterstützung für VSTS und Bitbucket wurde von Microsoft aber für die Zukunft angekündigt [1].

Hinzufügen einer App

Nachdem man sich erfolgreich am Mobile Center angemeldet hat, muss man zuerst seine mobile App hinzufügen. In diesem Kontext stellt eine App lediglich eine Art Container mit DevOps-Einstellungen einer Anwendung dar, in welchem noch keine Verbindung zum konkreten Code-Repository besteht. Für jede Plattform derselben Anwendung muss jeweils eine separate App hinzugefügt werden. Abbildung 1 veranschaulicht das Hinzufügen des iOS-Clients der ShowTime-App.

Abbildung 1 – Hinzufügen einer neuen App

Builddefinition

Das Erstellen einer App ist für beide Plattformen sehr intuitiv und einfach. Als erstes muss man dem VSMC mitteilen, wo sich der zugehörige Code befindet. Aus der angezeigten Liste der GitHub-Repositories wählt man einfach das jeweilige Repository aus, woraufhin die Verbindung zu diesem hergestellt wird. Danach selektiert man den zu erstellenden Branch (hier: „master“) und bekommt den Dialog aus der Abbildung 2 angezeigt. In diesem Schritt lässt sich die automatische, durch Einchecken startende Erstellung (Build) des Codes einstellen und die Empfängergruppe auswählen, die nach erfolgreicher Erstellung per E-Mail benachrichtigt werden soll. Die Benachrichtigung enthält dann den Download-Link für das Installationspaket der App auf der jeweiligen Plattform. Die Benutzeroberfläche bietet auch die Möglichkeit, die Erstellung manuell zu starten. Weitere Dateien, die während des Build-Vorgangs erzeugt wurden, dies umfasst z. B. auch Build-Logs, können separat heruntergeladen werden.

Es sei bemerkt, dass die ausgewählte Gruppe die App nach jeder erfolgreichen Erstellung ungeachtet der Testergebnisse erhält, sofern die automatische Verteilung aktiv ist. Einer anderen Gruppe, die beispielsweise nur bestimmte Versionen erhalten soll, kann man die App manuell im Schritt „Distribute“ schicken.

Abbildung 2 – Builddefinition für iOS

UI-Tests

Um die App auf mobilen Geräten zu testen, muss man in VSMC einen Testlauf erstellen. Bei der Erstellung wählt man die Geräte, auf denen man seine App testen möchte, und eines der folgenden, derzeit unterstützten Testframeworks aus:

  • Appium
  • Calabash
  • Espresso
  • Xamarin.UITest

Da in unserer ShowTime-App nur Xamarin.UITest zum Einsatz kommt, wurden die anderen Frameworks zunächst nicht getestet.

Man kann ebenfalls die Sprachumgebung des Geräts einstellen und den Testlauf einer sogenannten Testserie zuweisen, die eine Gruppe zusammenhängender Tests darstellt.

Abbildung 3 – Erstellung eines neuen Testlaufs

Wenn man die UI Tests eingestellt hat, bekommt man im letzten Schritt die Anweisungen, wie diese letztlich gestartet werden. Für einen vollständigen Continuous Delivery-Ablauf hätte ich erwartet, dass die UI Tests nach erfolgreichem Build automatisch ausgeführt werden, was allerdings derzeit noch nicht der Fall ist. Die Cloud UI-Tests müssen stattdessen Stand heute jedes Mal manuell gestartet werden – entweder per Kommandozeile oder durch einen REST API-Aufruf. Des Weiteren haben die Tests ausschließlich formalen Charakter und keinerlei Einfluss auf den eigentlichen Continuous Delivery-Prozess. Man erhält als Entwickler lediglich Einsicht in die Testergebnisse. Das Entwicklungsteam hat mir jedoch im Chat bestätigt, dass die UI-Tests in der Zukunft Teil des automatisierten Continuous Delivery-Workflows sein würden: Sie würden nach dem Build-Vorgang automatisch gestartet und nur bei einem positiven Testergebnis würde dann die automatische Verteilung erfolgen.

Abbildung 4 – Testergebnisse eines Testlaufs

Verteilung

Hier werden die Zielgruppen verwaltet, die im „Build“-Teil bei der Einrichtung der automatischen Verteilung der App erscheinen und auswählbar sind. Wie bereits erwähnt, bekommen diese Gruppen bei der Verteilung einen Link zur Installationsdatei per E-Mail zugeschickt. Die Oberfläche bietet ebenfalls die Möglichkeit, die Verteilung an ausgewählte Gruppen durch manuelles Hochladen einer APK-Datei für Android oder einer IPA-Datei für iOS auszulösen. Somit kann man beispielsweise eine Gruppe einrichten, die die App automatisch nach jedem Build bekommen soll (Entwickler, technische Tester, usw.), und eine weitere, die von der automatischen Verteilung ausgeschlossen ist (z. B. fachliche Tester).

Abbildung 5 – Verteilung der Anwendung

Analytics und Crash Reports

Um die Erhebung von Nutzungsstatistiken zu ermöglichen, müssen lediglich zwei Mobile Center-Bibliotheken als Abhängigkeit zu einigen Projekten der App-Solution hinzugefügt und ein paar Initialisierungsaufrufe mit einer für jede Mobile Center App eindeutigen ID eingebaut werden. Danach sendet jede Instanz der Anwendung Daten an das Mobile Center, die man dann in Form diverser Statistiken auf einem Dashboard angezeigt bekommt – Anzahl der aktiven Nutzer, meistverwendete mobile Geräte, usw.

Mithilfe dieser Bibliotheken konnte ich in unserer ShowTime-App auch Aufrufe einbauen, die die Ausführungsdauer bestimmter Aktionen messen, z. B. den Backend-Aufruf beim Einloggen.

Abbildung 6 – Diverse Nutzungsstatistiken

Fazit

Visual Studio Mobile Center hat mich aufgrund der sehr intuitiven Benutzeroberfläche beeindruckt. Als sehr nützlich hat sich der Build in der Cloud erwiesen, denn dadurch braucht man für iOS-Builds nicht zwingend einen Mac oder muss externe Clouddienste nutzen (MacinCloud). Ich konnte Code-Änderungen vornehmen, die iOS-Version der App in der Cloud erstellen lassen und anschließend mithilfe der Cloud-UI-Tests einfach sicherstellen, dass sie auch weiterhin funktioniert. Obwohl der komplette Continuous Delivery-Prozess derzeit nur bedingt unterstützt wird, z. B. weil UI-Tests noch nicht automatisch gestartet werden können, hat man am Ende die Erstellung, UI Tests und Verteilung unter einem Dach, was sehr praktisch ist. Microsofts Entwicklungsteam ist sehr agil, gibt gerne Hilfestellung und antwortet auf Chat-Nachrichten meist innerhalb eines Werktages. Über die Preise gibt es noch keine Auskünfte seitens Microsoft; während der Testphase ist die Nutzung dagegen kostenlos.

Referenzen

[1] https://docs.microsoft.com/en-us/mobile-center/general/roadmap

[2] https://docs.microsoft.com/en-us/mobile-center/

[3] https://www.visualstudio.com/de/vs/visual-studio-mobile-center/

[4] https://mobile.azure.com/