Neuigkeiten von trion.
Immer gut informiert.

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.

Start einer privaten GitLab Instanz mit Docker
$ 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.

NativeScript Projekt zu GitLab pushen
$ <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

Abbildung 1. Konfiguration der automatischen Anmeldung bei macOS

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:

Registrierung des GitLab Runner
$ 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:

GitLab Pipeline für macOS Runner und NativeScript
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 ;-) ):

Abbildung 2. GitLab Pipeline eines NativeScript macOS / iOS Builds

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.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels