NativeScript CI-Builds mit GitLab
Im letzten Artikel haben wir ein macOS-Environment für NativeScript provisioniert. Nun wollen wir dieses System nutzen und als Runner in Gitlab registrieren, um dort eine CI-Pipeline für ein NativeScript-Projekt zu erstellen.
GitLab Testumgebung
Voraussetzung für die weiteren Schritte ist ein Gitlab-Server. Dieser kann z.B. mittels Docker leicht aufgesetzt werden.
$ docker run --detach \
--publish 18443:443 --publish 8080:80 --publish 8022:22 \
--env GITLAB_OMNIBUS_CONFIG="gitlab_rails['lfs_enabled'] = true;" \
--hostname $(hostname -f) \
--name gitlab \
--volume ~/gitlab/config:/etc/gitlab \
--volume ~/gitlab/logs:/var/log/gitlab \
--volume ~/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
Anschließend kann über http://localhost:8080 GitLab geöffnet werden.
Zunächst muss für den Default-Nutzer root
ein Passwort vergeben werden.
Danach kan schon ein GitLab Projekt erstellt werden, in das wir das NativeScript Testprojekt, das wir in dem letzten Artikel erstellt haben, pushen können.
Wir verwenden im Beispiel den Benutzer root und das Projekt hat den Namen testproject
.
$ <testprojet-repo>
$ git init
$ git remote add origin http://localhost:8080/root/testproject.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master
Als nächstens wird ein GitLab Runner unter macOS eingerichtet.
LaunchAgent vs. LaunchDaemon
Den Gitlab-Runner-Dienst können wir auf zwei Arten automatisch starten:
Als LaunchAgent oder LaunchDaemon.
LaunchAgents laufen im User-Kontext und werden erst gestartet, wenn sich der Benutzer am System über die GUI anmeldet.
Dafür erlauben sie aber auch UI-Interaktionen und somit die Ausführung von Tests im iOS-Simulator.
LaunchDaemons werden direkt beim Systemstart ausgeführt, bietet aber keine Möglichkeit der UI-Interaktion.
Da wir später auch UI-Tests automatisch ausführen wollen, nutzen wir einen LaunchAgent.
Dazu muss der Benutzer automatisch beim Systemstart angemeldet werden. Diese macOS Einstellung kann wie folgt vorgenommen werden: Systemeinstellungen → Benutzer & Gruppen → Bearbeitung über das Schloss entsprerren → Anmeldeoptionen → Automatische Anmeldung
Registrierung des Runners mittels Ansible
Der Gitlab-Runner kann unter macOS über Homebrew installiert werden. Für die Registrierung des macOS-Systems am Gitlab-Server brauchen wir mindestens zwei Informationen: Die Gitlab-Coordinator-URL und das Registrierungs-Token. Beide Informationen können in Gitlab-Server in der Admin-Area unter Overview-Runners eingesehen werden.
Nun können wir das macOS-System als Gitlab-Runner registrieren.
Wir verwenden wieder ein Ansible-Playbook um die Registrierung und das Starten des Gitlab-Runner-Service zu konfigurieren.
Wir haben dafür das Ansible-Playbook gitlab-runner.yml
vorbereitet, das in dem folgendem Repository zu finden ist:
https://github.com/trion-development/nativescript-gitlab-ios
Nachdem das Repository geklont wurde, müssen als Erstes die zu provisionierenden Systeme in der Datei hosts
unterhalb von [macs]
definiert werden.
Außerdem müssen die Gitlab-Coordinator-URL und das Registrierungs-Token den entsprechenden Variablen (vars
-Block) in der Datei gitlab-runner.yml
zugewiesen werden.
Optional können dort auch noch weitere Tags und die Beschreibung angepasst werden.
Anschließend wird das Script register-gitlab-runner.sh
gestartet:
$ cd <<repo-path>>
$ bash register-gitlab-runner.sh
Nun ist der Gitlab-Runner einsatzbereit.
Als nächstes wird eine GitLab Pipeline erzeugt, die den Runner für eine NativeScript Anwendung verwendet.
NativeScript Test-Pipeline
Nun wollen wir eine Pipeline für unser Testprojekt erstellen, die den NativeScript-Build für iOS über das NativeScript-CLI ausführt.
Dazu legen wir im Testprojekt die Datei .gitlab-ci.yml
an und fügen den folgenden Inhalt ein:
stages:
- build
build:ios:
stage: build
script:
- tns build ios
tags:
- macos
Die Datei wird nun dem Git-Repository hinzugefügt und auf den GItlab-Server gepusht:
$ git commit -am "Pipeline created"
$ git push
Wechseln wir nun wieder in die Gitlab-GUI und öffnen dort in unserem Testprojekt den Menüpunkt CI / CD → Pipelines. Dort sehen wir, dass die Pipeline ohne Fehler durchgelaufen ist (oder gerade noch läuft ;-) ):
Fazit und Ausblick
In diesem Artikel haben wir erfolgreich ein macOS-System als Gitlab-Runner registriert und unsere erste NativeScript-Pipeline erstellt. Dank des NativeScript-CLI und der GitLab Konfiguration ist die Erstellung der Pipeline sehr einfach. Im nächsten Artikel wollen wir uns ansehen, wie wir eine NativeScript-App in den Apple App Store pushen können.
Zu den Themen NativeScript, Ansible und Angular bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:
Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.