Einführung
Standardmäßig verfügtJenkins über einen eigenen integrierten Winstone-Webserver, der Port8080
überwacht, was für den Einstieg praktisch ist. Es ist jedoch auch eine gute Idee, Jenkins mit SSL zu sichern, um Kennwörter und vertrauliche Daten zu schützen, die über die Weboberfläche übertragen werden.
In diesem Lernprogramm konfigurieren Sie Nginx als Reverse-Proxy, um Client-Anforderungen an Jenkins weiterzuleiten.
Voraussetzungen
Zu Beginn benötigen Sie Folgendes:
-
Ein Ubuntu 18.04-Server, der mit einem Nicht-Root-Sudo-Benutzer und einer Firewall konfiguriert ist und denUbuntu 18.04 initial server setup guide folgt.
-
Jenkins installiert, folgen Sie den Schritten inHow to Install Jenkins on Ubuntu 18.04
-
Nginx wurde gemäß den Schritten inHow to Install Nginx on Ubuntu 18.04 installiert
-
Ein SSL-Zertifikat für eine Domain, die vonLet’s Encrypt bereitgestellt wird. Folgen SieHow to Secure Nginx with Let’s Encrypt on Ubuntu 18.04, um dieses Zertifikat zu erhalten. Beachten Sie, dass Sie einregistered domain namebenötigen, das Sie besitzen oder steuern. In diesem Tutorial wird durchgehend der Domainnameexample.com verwendet.
[[Schritt-1 - Konfigurieren von Nginx]] == Schritt 1 - Konfigurieren von Nginx
Im vorausgesetzten TutorialHow to Secure Nginx with Let’s Encrypt on Ubuntu 18.04 haben Sie Nginx so konfiguriert, dass SSL in der Datei/etc/nginx/sites-available/example.com
verwendet wird. Öffnen Sie diese Datei, um Ihre Reverse-Proxy-Einstellungen hinzuzufügen:
sudo nano /etc/nginx/sites-available/example.com
Fügen Sie im Blockserver
mit den SSL-Konfigurationseinstellungen Jenkins-spezifische Zugriffs- und Fehlerprotokolle hinzu:
/etc/nginx/sites-available/example.com
. . .
server {
. . .
# SSL Configuration
#
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
. . .
}
Als nächstes konfigurieren wir die Proxy-Einstellungen. Da wir alle Anfragen an Jenkins senden, werden wir die Standardzeiletry_files
auskommentieren, die andernfalls einen 404-Fehler zurückgeben würde, bevor die Anfrage Jenkins erreicht:
/etc/nginx/sites-available/example.com
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .
Fügen wir nun die Proxy-Einstellungen hinzu, darunter:
-
proxy_params
: Die Datei/etc/nginx/proxy_params
wird von Nginx bereitgestellt und stellt sicher, dass wichtige Informationen, einschließlich des Hostnamens, des Protokolls der Clientanforderung und der Client-IP-Adresse, beibehalten werden und in den Protokolldateien verfügbar sind. -
proxy_pass
: Hiermit werden das Protokoll und die Adresse des Proxyservers festgelegt. In diesem Fall handelt es sich um den Jenkins-Server, auf den überlocalhost
an Port8080
zugegriffen wird. -
proxy_read_timeout
: Dies ermöglicht eine Erhöhung von Nginx '60-Sekunden-Standard auf den von Jenkins empfohlenen 90-Sekunden-Wert. -
proxy_redirect
: Dies stellt sicher, dassresponses are correctly rewritten den richtigen Hostnamen enthält.
Stellen Sie sicher, dass Sieexample.com
in der folgenden Zeileproxy_redirect
durch Ihren SSL-gesicherten Domainnamen ersetzen:
/etc/nginx/sites-available/example.com
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 setup is broken" error.
proxy_redirect http://localhost:8080 https://example.com;
Wenn Sie diese Änderungen vorgenommen haben, speichern Sie die Datei und beenden Sie den Editor. Wir werden Nginx erst nach der Konfiguration von Jenkins neu starten, aber wir können 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 JenkinsConfiguration-Seite etwas Ähnliches wie das Folgende.
Wenn dieser Fehler auftritt, überprüfen Sie Ihre Einstellungen fürproxy_pass
undproxy_redirect
in der Nginx-Konfiguration.
[[Schritt-2 - Konfigurieren von Jenkins]] == Schritt 2 - Konfigurieren von Jenkins
Damit Jenkins mit Nginx arbeiten kann, müssen Sie 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.
Ändern Sie die Konfigurationsdatei von/etc/default/jenkins
, 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.
Starten Sie Jenkins neu, um die neuen Konfigurationseinstellungen zu verwenden:
sudo systemctl restart jenkins
Dasystemctl
keine Ausgabe anzeigt, überprüfen Sie den Status:
sudo systemctl status jenkins
Sie sollten den Status vonactive (exited)
in der ZeileActive
sehen:
Output● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
Starten Sie Nginx neu:
sudo systemctl restart nginx
Überprüfen Sie den Status:
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 Mon 2018-07-09 20:27:23 UTC; 31s ago
Docs: man:nginx(8)
Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)
Wenn beide Server neu gestartet wurden, sollten Sie 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 3 - Testen der Konfiguration]] == Schritt 3 - Testen der Konfiguration
Nachdem Sie die Verschlüsselung aktiviert haben, können Sie die Konfiguration testen, indem Sie das Administratorkennwort zurücksetzen. Beginnen wir mit dem Besuch der Website über HTTP, um sicherzustellen, dass Sie Jenkins erreichen und zu HTTPS umgeleitet werden.
Geben Sie in Ihrem Webbrowserhttp://example.com
ein und ersetzen Sieexample.com
durch Ihre Domain. Nachdem SieENTER
gedrückt haben, sollte die URL mithttps
beginnen und die Positionsleiste sollte anzeigen, dass die Verbindung sicher ist.
Sie können den administrativen Benutzernamen, den Sie inHow To Install Jenkins on Ubuntu 18.04 erstellt haben, in das FeldUser und das Kennwort, das Sie im FeldPassword ausgewählt haben, eingeben.
Sobald Sie angemeldet sind, können Sie das Passwort ändern, um sicherzustellen, dass es sicher ist.
Klicken Sie auf Ihren Benutzernamen in der oberen rechten Ecke des Bildschirms. Wählen Sie auf der HauptprofilseiteConfigure aus der Liste auf der linken Seite aus:
Sie gelangen auf eine neue Seite, auf der Sie ein neues Passwort eingeben und bestätigen können:
Bestätigen Sie das neue Passwort, indem Sie aufSave klicken. Sie können das Jenkins-Webinterface jetzt sicher verwenden.
Fazit
In diesem Lernprogramm haben Sie Nginx als Reverse-Proxy für den integrierten Jenkins-Webserver konfiguriert, um Ihre Anmeldeinformationen und andere über die Weboberfläche übertragenen Informationen zu schützen. 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 “Creating your first Pipeline” Tutorial oderthe library of community-contributed plugins.