Einführung
Jenkins ist ein Open Source-Automatisierungsserver zur Automatisierung sich wiederholender technischer Aufgaben bei der kontinuierlichen Integration und Bereitstellung von Software. Mit einem robusten Ökosystem aus Plugins und umfassender Unterstützung kann Jenkins eine Vielzahl von Workloads verarbeiten, um Anwendungen zu erstellen, zu testen und bereitzustellen.
In früheren Anleitungen haben wirinstalled Jenkins on an Ubuntu 16.04 server undconfigured Jenkins with SSL using an Nginx reverse proxy. In diesem Handbuch wird gezeigt, wie Sie Jenkins so einrichten, dass eine Anwendung automatisch getestet wird, wenn Änderungen in ein Repository übertragen werden.
In diesem Tutorial werden wir Jenkins in GitHub integrieren, damit Jenkins benachrichtigt wird, wenn neuer Code in das Repository verschoben wird. Wenn Jenkins benachrichtigt wird, wird der Code ausgecheckt und anschließend in Docker-Containern getestet, um die Testumgebung vom Jenkins-Hostcomputer zu isolieren. Wir werden eine Beispielanwendung von Node.js verwenden, um zu zeigen, wie der CI / CD-Prozess für ein Projekt definiert wird.
Voraussetzungen
Um diesem Handbuch folgen zu können, benötigen Sie einen Ubuntu 16.04-Server mit mindestens 1 GB RAM, der mit einer sicheren Jenkins-Installation konfiguriert wurde. Um das Webinterface ordnungsgemäß zu sichern, müssen Sie dem Jenkins-Server einen Domainnamen zuweisen. Befolgen Sie diese Anleitungen, um zu erfahren, wie Sie Jenkins im erwarteten Format einrichten:
Um unsere Testumgebung optimal zu steuern, werden die Tests unserer Anwendung in Docker-Containern ausgeführt. Installieren Sie Docker nach dem Start von Jenkins auf dem Server, indem Sie die Schritte eins und zwei dieses Handbuchs ausführen:
Wenn Sie die obigen Anleitungen ausgefüllt haben, können Sie mit diesem Artikel fortfahren.
Fügen Sie den Jenkins-Benutzer der Docker-Gruppe hinzu
Nachdem Sie die Voraussetzungen erfüllt haben, werden sowohl Jenkins als auch Docker auf Ihrem Server installiert. Standardmäßig kann der Linux-Benutzer, der für die Ausführung des Jenkins-Prozesses verantwortlich ist, jedoch nicht auf Docker zugreifen.
Um dies zu beheben, müssen wir den Benutzerjenkins
mit dem Befehlusermod
zur Gruppedocker
hinzufügen:
sudo usermod -aG docker jenkins
Sie können die Mitglieder der Gruppedocker
auflisten, um zu bestätigen, dass der Benutzerjenkins
erfolgreich hinzugefügt wurde:
grep docker /etc/group
Outputdocker:x:999:sammy,jenkins
Damit die Jenkins ihre neue Mitgliedschaft verwenden können, müssen Sie den Prozess neu starten:
sudo systemctl restart jenkins
Mithilfe einiger Standard-Plugins, die wir während der Installation aktiviert haben, kann Jenkins jetzt Docker zum Ausführen von Build- und Testaufgaben verwenden.
Erstellen Sie ein persönliches Zugriffstoken in GitHub
Damit Jenkins Ihre GitHub-Projekte ansehen kann, müssen Sie in unserem GitHub-Konto ein persönliches Zugriffstoken erstellen.
Besuchen Sie zunächstGitHub und melden Sie sich in Ihrem Konto an, falls Sie dies noch nicht getan haben. Klicken Sie anschließend oben rechts auf Ihr Benutzersymbol und wählen SieSettings aus dem Dropdown-Menü aus:
Suchen Sie auf der folgenden Seite den AbschnittDeveloper settings im linken Menü und klicken Sie aufPersonal access tokens:
Klicken Sie auf der nächsten Seite auf die SchaltflächeGenerate new token:
Sie werden zu einer Seite weitergeleitet, auf der Sie den Bereich für Ihr neues Token definieren können.
Fügen Sie im FeldToken description eine Beschreibung hinzu, mit der Sie sie später erkennen können:
Aktivieren Sie im AbschnittSelect scopes die Kontrollkästchenrepo:status,repo:public_repo undadmin:org_hook. Auf diese Weise kann Jenkins den Commit-Status aktualisieren und Webhooks für das Projekt erstellen. Wenn Sie ein privates Repository verwenden, müssen Sie anstelle der Repo-Unterelemente die allgemeine Berechtigungrepoauswählen:
Wenn Sie fertig sind, klicken Sie unten aufGenerate token.
Sie werden zurück zur Indexseite für persönliche Zugriffstoken geleitet und Ihr neues Token wird angezeigt:
Kopieren Sie das Token jetzt, damit wir später darauf verweisen können. Wie aus der Meldung hervorgeht, kann das Token nach dem Verlassen dieser Seite nicht mehr abgerufen werden.
[.note] #Note: Wie im obigen Screenshot erwähnt, gibt es aus Sicherheitsgründen keine Möglichkeit, das Token erneut anzuzeigen, sobald Sie diese Seite verlassen. Wenn Sie Ihr Token verlieren, löschen Sie das aktuelle Token aus Ihrem GitHub-Konto und erstellen Sie ein neues.
#
Nachdem Sie ein persönliches Zugriffstoken für Ihr GitHub-Konto haben, können wir Jenkins so konfigurieren, dass das Repository Ihres Projekts überwacht wird.
Fügen Sie den GitHub Personal Access Token zu Jenkins hinzu
Nachdem wir ein Token haben, müssen wir es unserem Jenkins-Server hinzufügen, damit er automatisch Webhooks einrichten kann. Melden Sie sich bei Ihrer Jenkins-Weboberfläche mit dem Administratorkonto an, das Sie während der Installation konfiguriert haben.
Klicken Sie im Haupt-Dashboard im linken Menü aufCredentials:
Klicken Sie auf der nächsten Seite auf den Pfeil neben(global) innerhalb des Bereichs vonJenkins. Klicken Sie im angezeigten Feld aufAdd credentials:
Sie werden zu einem Formular weitergeleitet, in dem Sie neue Anmeldeinformationen hinzufügen können.
Wählen Sie im Dropdown-MenüKind die OptionSecret text aus. Fügen Sie im FeldSecret Ihr persönliches GitHub-Zugriffstoken ein. Füllen Sie das FeldDescriptionaus, damit Sie diesen Eintrag zu einem späteren Zeitpunkt identifizieren können. Sie können den Bereich als global und das ID-Feld leer lassen:
Klicken Sie auf die SchaltflächeOK, wenn Sie fertig sind.
Sie können jetzt auf diese Anmeldeinformationen aus anderen Teilen von Jenkins verweisen, um die Konfiguration zu erleichtern.
Richten Sie Jenkins Access to GitHub ein
Klicken Sie im Haupt-Dashboard von Jenkins im linken Menü aufManage Jenkins:
Klicken Sie in der Liste der Links auf der folgenden Seite aufConfigure System:
Scrollen Sie durch die Optionen auf der nächsten Seite, bis Sie den AbschnittGitHub finden. Klicken Sie auf die SchaltflächeAdd GitHub Server und wählen Sie dannGitHub Server aus:
Der Abschnitt wird erweitert, um zusätzliche Informationen einzugeben. Wählen Sie im Dropdown-MenüCredentials Ihr persönliches GitHub-Zugriffstoken aus, das Sie im letzten Abschnitt hinzugefügt haben:
Klicken Sie auf die SchaltflächeTest connection. Jenkins ruft eine Test-API für Ihr Konto auf und überprüft die Konnektivität:
Wenn Sie fertig sind, klicken Sie auf die SchaltflächeSave, um Ihre Änderungen zu übernehmen.
Richten Sie die Demo-Anwendung in Ihrem GitHub-Konto ein
Um zu demonstrieren, wie Jenkins zum Testen einer Anwendung verwendet wird, verwenden wir einfache“hello world” program, die mitHapi.js erstellt wurden. Da wir Jenkins so einrichten, dass es auf Pushs an das Repository reagiert, benötigen Sie eine eigene Kopie des Demo-Codes.
Besuchen Sie dieproject repository und klicken Sie auf die SchaltflächeFork in der oberen rechten Ecke, um eine Kopie des Repositorys in Ihrem Konto zu erstellen:
Eine Kopie des Repositorys wird Ihrem Konto hinzugefügt.
Das Repository enthält einepackage.json
-Datei, die die Laufzeit- und Entwicklungsabhängigkeiten sowie die Ausführung der enthaltenen Testsuite definiert. Die Abhängigkeiten können durch Ausführen vonnpm install
installiert werden, und die Tests können mitnpm test
ausgeführt werden.
Wir haben dem Repo auch einJenkinsfile
hinzugefügt. Jenkins liest diese Datei, um die Aktionen zu ermitteln, die für das Repository ausgeführt werden müssen, um es zu erstellen, zu testen oder bereitzustellen. Es wird mit der deklarativen Version der JenkinsPipeline DSL geschrieben.
Die im Repository vonhello-hapi
enthaltenenJenkinsfile
sehen folgendermaßen aus:
Jenkinsfile
#!/usr/bin/env groovy
pipeline {
agent {
docker {
image 'node'
args '-u root'
}
}
stages {
stage('Build') {
steps {
echo 'Building...'
sh 'npm install'
}
}
stage('Test') {
steps {
echo 'Testing...'
sh 'npm test'
}
}
}
}
Daspipeline
enthält die gesamte Definition, die Jenkins auswerten wird. Im Inneren befindet sich ein Abschnittagent
, der angibt, wo die Aktionen in der Pipeline ausgeführt werden. Um unsere Umgebungen vom Hostsystem zu isolieren, werden wir in Docker-Containern testen, die vom Agentendocker
angegeben werden.
Da Hapi.js ein Framework für Node.js ist, verwenden wir das Docker-Image vonnode
als Basis. Wir geben den Benutzerroot
im Container an, damit der Benutzer gleichzeitig sowohl auf das angehängte Volume mit dem ausgecheckten Code als auch auf das Volume schreiben kann, auf das das Skript seine Ausgabe schreibt.
Als nächstes definiert die Datei zwei Phasen, die nur logische Arbeitsteile sind. Wir haben den ersten "Build" und den zweiten "Test" genannt. Der Erstellungsschritt druckt eine Diagnosemeldung und führt dannnpm install
aus, um die erforderlichen Abhängigkeiten zu erhalten. Der Testschritt druckt eine weitere Nachricht und führt dann die Tests aus, wie in der Dateipackage.json
definiert.
Nachdem Sie ein Repository mit einem gültigenJenkinsfile
haben, können wir Jenkins so einrichten, dass es dieses Repository überwacht und die Datei ausführt, wenn Änderungen vorgenommen werden.
Erstellen Sie eine neue Pipeline in Jenkins
Als nächstes können wir Jenkins so einrichten, dass er den persönlichen Zugriffstoken von GitHub verwendet, um unser Repository zu überwachen.
Klicken Sie im Haupt-Dashboard von Jenkins im linken Menü aufNew Item:
Geben Sie im FeldEnter an item nameeinen Namen für Ihre neue Pipeline ein. Wählen Sie anschließendPipeline als Elementtyp aus:
Klicken Sie unten auf die SchaltflächeOK, um fortzufahren.
Aktivieren Sie im nächsten Bildschirm das KontrollkästchenGitHub project. Geben Sie im angezeigten FeldProject url die GitHub-Repository-URL Ihres Projekts ein.
[.note] #Note: Stellen Sie sicher, dass Sie auf Ihre Abzweigung der Hello Hapi-Anwendung zeigen, damit Jenkins die Berechtigung zum Konfigurieren von Webhooks hat.
#
Aktivieren Sie als Nächstes im AbschnittBuild Triggers das KontrollkästchenGitHub hook trigger for GITScm polling:
Im AbschnittPipeline müssen wir Jenkins anweisen, die inJenkinsfile
definierte Pipeline in unserem Repository auszuführen. Ändern Sie den TypDefinition inPipeline script from SCM.
Wählen Sie im neuen AbschnittGit im MenüSCM aus. Geben Sie im angezeigten FeldRepository URL erneut die URL zu Ihrer Verzweigung des Repositorys ein:
[.note] #Note: Stellen Sie erneut sicher, dass Sie auf Ihre Abzweigung der Hello Hapi-Anwendung zeigen.
#
[.note] #Note: In unserem Beispiel wird aufJenkinsfile
verwiesen, die in einem öffentlichen Repository verfügbar sind. Wenn Ihr Projekt nicht öffentlich zugänglich ist, müssen Sie die Schaltflächeadd credentials verwenden, um zusätzlichen Zugriff auf das Repository hinzuzufügen. Sie können ein persönliches Zugriffstoken hinzufügen, wie wir es zuvor mit der Hooks-Konfiguration getan haben.
#
Wenn Sie fertig sind, klicken Sie unten auf der Seite auf die SchaltflächeSave.
Durchführen eines ersten Builds und Konfigurieren der Webhooks
Zum Zeitpunkt dieses Schreibens (Juni 2017) konfiguriert Jenkins Webhooks nicht automatisch, wenn Sie die Pipeline für das Repository in der Schnittstelle definieren.
Um Jenkins zum Einrichten der entsprechenden Hooks zu veranlassen, müssen wir beim ersten Mal eine manuelle Erstellung durchführen.
Klicken Sie auf der Hauptseite Ihrer Pipeline im linken Menü aufBuild Now:
Ein neuer Build wird geplant. Im FeldBuild History in der unteren linken Ecke sollte in Kürze ein neuer Build angezeigt werden. Zusätzlich wird im Hauptbereich der Schnittstelle einStage View gezeichnet. Dadurch wird der Fortschritt Ihres Testlaufs nach Abschluss der verschiedenen Phasen verfolgt:
Klicken Sie im FeldBuild History auf die dem Build zugeordnete Nummer, um zur Build-Detailseite zu gelangen. Von hier aus können Sie im linken Menü auf die SchaltflächeConsole Output klicken, um Details zu den ausgeführten Schritten anzuzeigen:
Klicken Sie im Menü auf der linken Seite auf das ElementBack to Project, wenn Sie fertig sind, um zur Hauptansicht der Pipeline zurückzukehren.
Nachdem wir das Projekt einmal erstellt haben, kann Jenkins die Webhooks für unser Projekt erstellen. Klicken Sie im linken Menü der Pipeline aufConfigure:
Auf diesem Bildschirm sind keine Änderungen erforderlich. Klicken Sie einfach unten auf die SchaltflächeSave. Jetzt, da die Jenkins Informationen über das Projekt vom ersten Erstellungsprozess an haben, registriert sie beim Speichern der Seite einen Webhook bei unserem GitHub-Projekt.
Sie können dies überprüfen, indem Sie in Ihrem GitHub-Repository auf die SchaltflächeSettings klicken. Klicken Sie auf der nächsten Seite im Seitenmenü aufWebhooks. Sie sollten Ihren Jenkins-Server-Webhook in der Hauptoberfläche sehen:
Wenn Sie nun neue Änderungen an Ihrem Repository vornehmen, wird Jenkins benachrichtigt. Anschließend wird der neue Code abgerufen und auf die gleiche Weise erneut getestet.
Um dies zu approximieren, können Sie auf unserer Repository-Seite auf GitHub auf die SchaltflächeCreate new file links neben der grünen SchaltflächeClone or download klicken:
Wählen Sie auf der nächsten Seite einen Dateinamen und einige Dummy-Inhalte aus:
Klicken Sie unten auf die SchaltflächeCommit new file, wenn Sie fertig sind.
Wenn Sie zu Ihrer Jenkins-Oberfläche zurückkehren, wird automatisch ein neuer Build gestartet:
Sie können zusätzliche Builds starten, indem Sie Commits für eine lokale Kopie des Repositorys vornehmen und es wieder auf GitHub übertragen.
Fazit
In diesem Handbuch haben wir Jenkins so konfiguriert, dass es ein GitHub-Projekt überwacht und alle neuen, festgeschriebenen Änderungen automatisch testet. Jenkins ruft Code aus dem Repository ab und führt dann die Erstellungs- und Testprozeduren in isolierten Docker-Containern aus. Der resultierende Code kann bereitgestellt oder gespeichert werden, indem zusätzliche Anweisungen zu denselbenJenkinsfile
hinzugefügt werden.