Kurz howto Continuous Integration mit GitLab CI

Eine kurze Einführung in das Thema Continuous Integration mit GitLab CI. Das Ganze erfolgt an einem einfachen Syntax Check-Beispiel von .html und .php Dateien. Weitere Infos und ein Quick Start Einstieg finden sich auch auf der GitLab CI Seite.

Voraussetzungen ist, dass gitlab und gitlab-ci-multi-runner installiert sind und

:~# dpkg -l | grep gitlab
ii  gitlab-ce                          8.9.6-ce.0
ii  gitlab-ci-multi-runner             1.3.3

HTML-Tidy für den .html Syntax Check. Im Prinzip ist dies die Linux Installation wie im Atom Tidy Beitrag beschrieben.

:~# wget http://binaries.html-tidy.org/binaries/tidy-5.2.0/tidy-5.2.0-64bit.deb

:~# dpkg -i tidy-5.2.0-64bit.deb
Vormals nicht ausgewähltes Paket tidy wird gewählt.
(Lese Datenbank ... 123425 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von tidy-5.2.0-64bit.deb ...
Entpacken von tidy (5.2.0) ...
tidy (5.2.0) wird eingerichtet ...
Trigger für man-db (2.7.0.2-5) werden verarbeitet ...

Zusätzlich sollten noch php-cli und zip installiert sein,

ii  php5-cli 
ii  zip

anhand derer der .php Syntax Check und ein Zusammenpacken der getesteten Dateien erfolgt.

Ein neues Projekt in GitLab anlegen.

gitlab neues projekt
gitlab neues projekt

Die Informationen zur Runner Registrierung finden sich im Projekt unter dem Zahnrad und Klick auf Runners. URL und Token werden später benötigt.

gitlab runners informationen
gitlab runners informationen

Runner für das Projekt auf der Konsole registrieren. Bei „Please enter the executor:“ shell eingeben. Ansonsten die Informationen per copy & paste aus den Informationen von oben verwenden bzw. sind frei wählbar.

:~# gitlab-ci-multi-runner register
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
https://gitlab.debtest.localhorst.local/ci
Please enter the gitlab-ci token for this runner:
yxzFgZPJJLPyEph59GUQ
Please enter the gitlab-ci description for this runner:
[debtest]: html php zip gitlab-ci test
Please enter the gitlab-ci tags for this runner (comma separated):
syntax,check,zip
Registering runner... succeeded                     runner=yxzFgZPJ
Please enter the executor: docker, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Der soeben registrierte Runner erscheint in dem Projekt.

gitlab registrierter runners
gitlab registrierter runners

In dem Repository nun zwei einfache Testdateien anlegen. Ob dies von „außen“ per git push geschieht oder mit dem GitLab GUI per Pluszeichen „New File“ spielt keine Rolle.

 :~# cat index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
localhorst syntax check
</body>
</html>


:~# cat info.php
<?php
phpinfo();
?>

Das Build Script wird ebenfalls in das Repository als .gitlab-ci.yml hinzugefügt.

tidy_html:
    script:
        - tidy -q *.html
        - php -l *.php
        - zip /tmp/htmltest-$(date '+%s').zip *

Das Repository mit den beiden Testdateien und dem .gitlab-ci.yml Build Script im GitLab GUI unter Repository -> Files

gitlab repository
gitlab repository

Bei jedem commit in das Repository wird das .gitlab-ci.yml abgearbeitet. Unter Pipelines -> Builds -> und einem Klick auf das grüne passed, wird der komplette Build Prozess angezeigt.

gitlab build prozess
gitlab build prozess

Die im /tmp Verzeichnis zu findende .zip Datei kann dann, im Zuge von Continuous Delivery weiter an andere Rechner distribuiert werden.

 -rw-r--r-- 1 gitlab-runner gitlab-runner 409 Jul 16 12:47 htmltest-1468666032.zip

Zur Gegenprobe wird die Syntax, zum Beispiel in der index.html Datei, verändert. Um einen Fehler zu provozieren, einfach irgend eine abschließende spitze Klammer löschen. Nach dem commit in das Repository und wieder unter Pipelines -> Builds -> und einem Klick nun auf das rote failed

gitlab build prozess failed
gitlab build prozess failed

erscheint hier entsprechend die Fehlermeldung, die zum sofortigen Abbruch des Buildprozess geführt hat.