Ein CI-Server der keine Jobs hat macht natürlich wenig Sinn. Nachdem wir also im letzten Post den Server installiert haben werden wir diesen nun einrichten.

Über das Web-Frontend angemeldet findet man unter dem Punkt “Admin” –> “Plugins” eine Übersicht der installierten, bzw. installierbaren Plugin. Auf jeden Fall benötigt man das “Git-Plugin”. Für die Integration mit Github, Bitbucket und GitLab existieren Plugins, die direkt genutzt werden können. Da ich privat einen gogs Git-Server nutze müssen hier die repositories manuell eingerichtet werden.

Einbinden des git Repositories
Auf der “Projects” Seite findet man hierfür den Link “Manual Add”. Im nächsten Schritt macht man Angaben zu dem Projekt. Neben der git URL gibt es eine Möglichkeit einen Namen für das Projekt zu vergeben und natürlich die Authentifizierung anzugeben.
Sobald das Projekt angelegt ist kann unter “Plugins” ausgewählt werden welche Plugins in welcher Reihenfolge für einen Build ausgeführt werden sollen. Hierzu werden einfach per Drag’n’Drop die verfügbaren Plugins aus der Übersicht in das Feld für die aktiven Plugins verschoben.

Aktivierte Plugins tauchen rechts im Menü auf und können dort konfiguriert werden.
Unter “Node” lässt sich so einstellen in welcher Art und Weise npm Module gecachet werden sollen, oder welcher Befehl zum testen verwendet wird.
Unter “Custom Scripts” können zu den einzelnen build Stufen shell Skripte eingerichtet werden.

Unter “Email Notifier” lässt sich konfigurieren in welchen Fällen eine Mail versendet werden soll. Die Liste der Empfänger wird unter “Project” –> “Settings” unter Collaborators gepflegt.

** Einen Build triggern **
Damit der Job auch gestartet wird wenn ein neuer Commit eingegangen ist nutze ich einfach den post-receive Git-Hook im Git-Server, um über curl einen POST-Request an den Strider-Server zu senden. Die Authentifizierung erfolgt über den Parameter -u "username@strider.lan:secretPassword" Die URL besteht aus dem Servernamen, dem Projektnamen und dem Befehl start. Da der Request auch gleich einen Deploy startet wird vorher abgefragt ob es sich beim Commit um den master Branch handelt. Für andere Branches würde man im POST-Body dann zum Beispiel nur den Typ “TEST” angeben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
while read oldrev newrev refname
do
echo "starting hook"
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "$branch" = "master" ]; then
echo "Queuing Strider build for ${branch}."
curl \
-k \
-H "Content-Type: application/json" \
-d "{\"branch\":\"$branch\", \"type\":\"TEST_AND_DEPLOY\", \"message\":\"triggered by git hook\"}" \
-u "username@strider.lan:secretPassword" \
-X POST \
https://strider.lan/projectname/start
else
echo "Skipping Strider build for ${branch}."
fi
done

Mehr ist nicht nötig um einen einfache Build-Pipeline zu erstellen.