Jenkins auf einem Ubuntu-Server mit Docker Compose installieren

Jenkins ist eine beliebte Open-Source-Anwendung, die in Java entwickelt wurde und sich hervorragend zur Einrichtung von Continuous Integration und Continuous Deployment (CI/CD)-Pipelines eignet. Dadurch wird die Softwarebereitstellung deutlich beschleunigt. Jenkins spielt eine zentrale Rolle bei der Automatisierung des Softwareentwicklungsprozesses (SDLC). Diese Anleitung zeigt Schritt für Schritt, wie Jenkins auf einer Ubuntu-Instanz mithilfe von Docker Compose eingerichtet wird.

Systemvoraussetzungen

  • Eine neu eingerichtete Cloud-Instanz mit Ubuntu 20.04 oder 18.04
  • Docker und Docker Compose müssen auf dem Server installiert sein

Docker Compose-Datei für Jenkins erstellen

Erstelle zuerst ein Verzeichnis mit dem Namen jenkins-compose und darin eine Datei namens docker-compose.yml.

$ mkdir jenkins-compose

$ cd jenkins-compose

$ touch docker-compose.yml

Öffne nun die erstellte Datei mit einem Editor deiner Wahl:

Füge folgendes Skript in die Datei docker-compose.yml ein:

version: '3.8'
services:
  jenkins:
    container_name: jenkins
    restart: always
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
    volumes:
      - jenkins-home:/var/jenkins_home

volumes:
  jenkins-home:

Aufbau der Compose-Datei verstehen

version: ‚3.8‘
Diese Angabe definiert das Dateiformat der Docker Compose-Datei. Andere Versionen können zu Problemen mit dieser Konfiguration führen.

services:
In diesem Abschnitt werden alle Container aufgeführt, die durch Docker Compose gestartet werden. Jeder Container wird einzeln konfiguriert.

  jenkins:
    container_name: jenkins
    restart: always
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
    volumes:
      - jenkins-home:/var/jenkins_home

Diese Konfiguration legt fest, wie der Jenkins-Container aufgebaut ist – einschließlich des Container-Namens, des Restart-Verhaltens, des verwendeten Images, der Portweiterleitungen und der Volumes.

Die Anweisung restart: always sorgt dafür, dass der Container nach einem Neustart des Systems automatisch wieder gestartet wird.

volumes:
Hier wird ein Volume namens jenkins-home definiert, das im Container verwendet wird, um dauerhaft Daten zu speichern.

Docker-Dienst starten

Nachdem die Docker-Compose-Datei erstellt wurde, solltest du den Docker-Dienst aktivieren und starten. Durch das Aktivieren wird sichergestellt, dass Docker beim Systemstart automatisch ausgeführt wird.

$ sudo systemctl enable docker.service

$ sudo systemctl start docker.service

Jenkins-Container starten

Mit der vorhandenen Docker-Compose-Datei kannst du Jenkins nun im Hintergrund starten, indem du folgenden Befehl ausführst:

Dieser Befehl lädt das offizielle Jenkins-Image von Docker Hub herunter und startet den Container im Hintergrund.

Status des Containers prüfen

Um zu überprüfen, ob Jenkins erfolgreich läuft, verwende diesen Befehl:

SSL-Zertifikate für Jenkins mit Nginx aktivieren

Damit Jenkins über das HTTPS-Protokoll erreichbar ist, musst du den Nginx-Webserver einrichten, SSL-Zertifikate konfigurieren und den Datenverkehr an den Jenkins-Server weiterleiten.

Nginx-Webserver installieren

Nginx für Jenkins konfigurieren

Bearbeite die Standardkonfigurationsdatei von Nginx wie folgt:

# nano /etc/nginx/conf.d/default.conf

Füge folgenden Server-Block für deine Domain ein:

server {
  server_name example.com www.example.com
}

Um SSL zu aktivieren, folge einem passenden Let’s Encrypt-Tutorial für Nginx. Dieses aktualisiert die Konfigurationsdatei automatisch mit den nötigen SSL-Einstellungen. Öffne sie anschließend erneut:

# nano /etc/nginx/conf.d/default.conf

Ergänze jetzt folgende Weiterleitungsregeln, um den Datenverkehr an Jenkins zu übergeben:

location / {
  proxy_pass http://127.0.0.1:8080;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
}

Beispielhafte Nginx-Endkonfiguration

Die finale Konfiguration deiner Nginx-Datei sieht wie folgt aus:

server {
  server_name example.com www.example.com;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $remote_addr;
    }
}

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  server_name example.com www.example.com;
    listen 80;
    return 404; # managed by Certbot
}

Firewall-Konfiguration für den Server

Um deinen Server besser zu schützen, solltest du die Firewall so konfigurieren, dass nur die wichtigsten Ports offen sind – also 22 (SSH), 80 (HTTP) und 443 (HTTPS).

Firewall (UFW) im Betriebssystem einrichten

Installiere zunächst die einfache Firewall „Uncomplicated Firewall“ (UFW):

Blockiere eingehenden Verkehr standardmäßig und erlaube ausgehende Verbindungen:

# ufw default deny incoming
# ufw default allow outgoing

Erlaube nun die benötigten Ports manuell:

# ufw allow ssh
# ufw allow http
# ufw allow https

Wichtig: Stelle sicher, dass der SSH-Port nicht gesperrt ist, bevor du die Firewall aktivierst – sonst verlierst du den Zugriff auf deinen Server.

Aktiviere anschließend die Firewall und prüfe den Status:

Jenkins-Installation überprüfen

Sobald Jenkins läuft, rufe die URL https://www.example.com/ im Browser auf. Das System verlangt nach dem initialen Administrator-Passwort.

Mit folgendem Befehl kannst du das Passwort direkt aus dem Container auslesen:

$ docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Jenkins fordert dich anschließend auf, empfohlene Plugins zu installieren. Danach kannst du die Zugangsdaten für einen Administrator festlegen. Nun ist Jenkins einsatzbereit zur Erstellung von CI/CD-Pipelines.

Fazit

Docker Compose ist ein hilfreiches Tool zur Verwaltung und Bereitstellung containerbasierter Anwendungen. In dieser Anleitung wurde gezeigt, wie man Jenkins auf einem Ubuntu-Server mithilfe von Docker Compose installiert, mit HTTPS über Nginx absichert und den Zugang über Firewalls schützt.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

Kimi Linear: Effiziente KI-Inferenz für lange Kontexte

AI/ML, Tutorial
Vijona25 Juni um 14:12 Uhr Kimi Linear: Eine hardwarebewusste Architektur für effiziente KI-Inferenz mit langen Kontexten Moonshot AI hat erneut eine bemerkenswerte Veröffentlichung vorgestellt. Nachdem Kimi-K2 und der dazugehörige Post-Training-Ansatz bereits…
Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

Apache Airflow: Workflow-Orchestrierung erklärt

Python, Tutorial
Vijona25 Juni um 13:48 Uhr Apache Airflow: Workflow-Orchestrierung für Datenpipelines Moderne datengetriebene Organisationen arbeiten mit Pipelines, die Informationen erfassen, umwandeln, anreichern und von einem System in ein anderes übertragen. Solche Datenpipelines…
Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

Schnellere LLM-Workflows mit Python erstellen

AI/ML, Tutorial
Vijona25 Juni um 13:20 Uhr Schnellere agentenbasierte LLM-Workflows mit asynchronen Python-Aufrufen erstellen Große Sprachmodelle können im produktiven Einsatz anspruchsvoll sein, da sie ungenaue Antworten, uneinheitliches Verhalten oder spürbare Verzögerungen verursachen können.…