Einführung
Standardmäßig wird Jenkins mit einem integrierten Winstone-Webserver geliefert, der Port 8080 überwacht. Sobald Sie Jenkins jedoch ernsthaft einsetzen, sollten Sie es mit SSL sichern, um Kennwörter und andere vertrauliche Daten zu schützen, die über die Weboberfläche übertragen werden.
In diesem Lernprogramm wird gezeigt, wie Sie Nginx als Reverse-Proxy konfigurieren, um Client-Anforderungen an Jenkins weiterzuleiten. Um zu beginnen, müssen Sie die folgenden Voraussetzungen erfüllen.
Voraussetzungen
One Ubuntu 16.04 server wurde mit einem Nicht-Root-Benutzersudo
und einer Firewall konfiguriert, indem Sie denUbuntu 16.04 initial server setup guide mit Jenkins und Nginx folgen, die mithilfe der folgenden Anleitungen installiert und konfiguriert wurden:
-
How to Secure Nginx with Let’s Encrypt on Ubuntu 16.04. Beachten Sie, dass für dieses Lernprogramm ein registrierter Domänenname erforderlich ist, den Sie besitzen oder steuern.
Wenn Sie diese Anforderungen erfüllt haben, können Sie beginnen.
[[Schritt eins - Konfigurieren von Nginx]] == Schritt Eins - Konfigurieren von Nginx
Im vorausgesetzten TutorialHow to Secure Nginx with Let’s Encrypt on Ubuntu 16.04 haben wir Nginx so konfiguriert, dass SSL in der Datei/etc/nginx/sites-available/default
verwendet wird. Daher öffnen wir diese Datei, um unsere Reverse-Proxy-Einstellungen hinzuzufügen.
sudo nano /etc/nginx/sites-available/default
Zunächst fügen wir im Blockserver
mit den SSL-Konfigurationseinstellungen spezifische Zugriffs- und Fehlerprotokolle hinzu:
/etc/nginx/sites-available/default
. . .
server {
# SSL Configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
Anschließend konfigurieren wir die Proxy-Einstellungen. Da wir alle Anfragen an Jenkins senden, werden wir die Standardzeiletry_files
auskommentieren, die, wie geschrieben, einen 404-Fehler zurückgibt, bevor die Anfrage Jenkins erreicht.
/etc/nginx/sites-available/default
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .
Anschließend werden die tatsächlichen Proxy-Einstellungen hinzugefügt. Die Konfiguration beginnt mit der Aufnahme der von Nginx bereitgestelltenproxy_params
, die sicherstellen, dass Informationen wie der Hostname, das Protokoll der Clientanforderung und die Client-IP-Adresse in unseren Protokolldateien verfügbar sind. Als nächstes legtproxy_pass
das Protokoll und die Adresse des Proxyservers fest, in unserem Fall des Jenkins-Servers, auf den auf dem lokalen Host an Port 8080 zugegriffen wird. Dann erhöhen wir dieproxy_read_timeout
von Nginx '60-Sekunden-Standard auf den vom Projekt empfohlenen 90-Sekunden-Wert. Und schließlich fügen wir dieproxy_redirect
hinzu, um sicherzustellen, dass dieresponses are properly rewritten den richtigen Hostnamen enthalten.
Stellen Sie sicher, dass Sie Ihren SSL-gesicherten Domainnamen in der folgenden Zeileproxy_redirect
ersetzen:
/etc/nginx/sites-available/default
Location /
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include /etc/nginx/proxy_params;
proxy_pass http://localhost:8080;
proxy_read_timeout 90s;
# Fix potential "It appears that your reverse proxy set up is broken" error.
proxy_redirect http://localhost:8080 https://your.ssl.domain.name;
Speichern und schließen Sie die Datei, sobald Sie diese Änderungen vorgenommen haben. Wir werden Nginx erst neu starten, nachdem wir Jenkins konfiguriert haben, aber wir werden unsere Konfiguration jetzt testen:
sudo nginx -t
Wenn alles in Ordnung ist, gibt der Befehl Folgendes zurück:
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Wenn nicht, beheben Sie alle gemeldeten Fehler, bis der Test bestanden ist.
[.Hinweis]##
Note:
Wenn Sieproxy_pass
falsch konfigurieren (z. B. durch Hinzufügen eines abschließenden Schrägstrichs), erhalten Sie auf Ihrer Jenkins-Konfigurationsseite etwas Ähnliches wie das Folgende.
Wenn dieser Fehler auftritt, überprüfen Sie Ihre Einstellungen fürproxy_pass
undproxy_redirect
in der Nginx-Konfiguration.
[[Schritt zwei - Konfigurieren von Jenkins]] == Schritt Zwei - Konfigurieren von Jenkins
Damit Jenkins mit Nginx arbeiten kann, müssen wir die Jenkins-Konfiguration aktualisieren, damit der Jenkins-Server nur dielocalhost
-Schnittstelle und nicht alle Schnittstellen (0.0.0.0
) überwacht. Wenn Jenkins alle Schnittstellen abhört, kann er möglicherweise über seinen ursprünglichen, unverschlüsselten Port (8080
) darauf zugreifen.
Wir werden die Konfigurationsdatei von/etc/default/jenkins
ändern, um diese Anpassungen vorzunehmen.
sudo nano /etc/default/jenkins
Suchen Sie die ZeileJENKINS_ARGS
und fügen Sie--httpListenAddress=127.0.0.1
zu den vorhandenen Argumenten hinzu:
/etc/default/jenkins
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"
Speichern und schließen Sie die Datei.
Um die neuen Konfigurationseinstellungen zu verwenden, werden Jenkins und Nginx neu gestartet.
sudo systemctl restart jenkins
Dasystemctl
keine Ausgabe anzeigt, überprüfen wir den Status:
sudo systemctl status jenkins
Wir sollten den Status vonactive (exited)
in der Zeile vonActive
ehen:
Output● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago
Docs: man:systemd-sysv-generator(8)
Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 11391 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
Wir wiederholen diese Schritte für Nginx:
sudo systemctl restart nginx
sudo systemctl status nginx
Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-04-25 22:36:08 UTC; 2min 51s ago
Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=
Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC
Main PID: 11353 (nginx)
Nachdem wir beide Server neu gestartet haben, sollten wir in der Lage sein, die Domäne über HTTP oder HTTPS zu besuchen. HTTP-Anfragen werden automatisch an HTTPS umgeleitet und die Jenkins-Site wird sicher bedient.
[[Schritt drei - Testen der Konfiguration]] == Schritt 3 - Testen der Konfiguration
Wir testen die Konfiguration, indem wir das Administratorkennwort zurücksetzen, nachdem wir die Verschlüsselung aktiviert haben. Wir besuchen zunächst die Website überhttp
, um zu überprüfen, ob wir Jenkins erreichen, und werden wie erwartet zuhttps
umgeleitet:
Geben Sie in Ihrem Webbrowser "http: //your.ssl.domain.name" ein und ersetzen Sieyour.ssl.domain.name
durch Ihre Domain. Nachdem Sie die Eingabetaste gedrückt haben, sollte die URL mithttps
beginnen und die Positionsleiste sollte anzeigen, dass die Verbindung sicher ist.
Wir gebenadmin
in das Feld "Benutzer" und das automatisch generierte Passwort ein, das Jenkins bei der Installation erstellt und gespeichert hat.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Wenn Sie das Kennwort des Administratorbenutzers zurückgesetzt haben, geben Sie stattdessen dieses Kennwort ein. Sobald wir uns einloggen, ändern wir das Passwort, um sicherzugehen, dass es sicher ist.
Klicken Sie oben rechts auf "admin" und wählen Sie "Configure" aus dem Dropdown-Menü. Geben Sie das neue Passwort ein, bestätigen Sie es und klicken Sie auf "Speichern". Sie können das Jenkins-Webinterface jetzt sicher verwenden.
Fazit
In diesem Tutorial haben wir Nginx nach Abschluss der Voraussetzungen als Reverse-Proxy für den integrierten Webserver von Jenkins konfiguriert, um unsere Anmeldeinformationen und andere über die Weboberfläche übertragenen Informationen zu sichern. Jetzt, da Jenkins sicher ist, können Siehow to set up a continuous integration pipeline lernen, um Codeänderungen automatisch zu testen. Andere Ressourcen, die Sie berücksichtigen sollten, wenn Sie Jenkins noch nicht kennen, sindthe Jenkins project’s “Getting Started: Create your first Pipeline Tutorial oderthe library of community-contributed plugins.