Skip to content

comquent/Jenkins-Training-Environment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Comquent Academy

Jenkins Training Environment

Ein Projekt der Comquent Academy -- begleitend zum Jenkins Expert Training.

Automatisierte Installation und Konfiguration einer Jenkins-Umgebung auf einer entfernten Ubuntu-VM. Das Deployment erfolgt komplett per SSH -- es werden keine Agenten oder zusaetzliche Tools auf dem Zielsystem vorausgesetzt.

Voraussetzungen

Lokal (Steuerungsrechner)

  • Bash 4+ (macOS / Linux)
  • ssh und scp

Zielsystem (Remote-VM)

  • Ubuntu 22.04 oder 24.04 LTS
  • SSH-Zugang mit Key-Authentifizierung
  • Benutzer mit passwortlosem sudo
  • Internetzugang
  • Mindestens 2 CPUs, 4 GB RAM, 20 GB Disk
  • Ports 22 (SSH) und 8080 (Jenkins) erreichbar
  • Zusaetzlich Port 80 und 443 bei Verwendung von Let's Encrypt SSL
  • DNS-A-Record auf die VM-IP, wenn DOMAIN_NAME genutzt wird

Schnellstart

# 1. Repository klonen
git clone <repo-url>
cd Jenkins-Training-Enviroment

# 2. Konfiguration erstellen
cp config.env.example config.env

# 3. Pflichtparameter anpassen
#    TARGET_HOST  - IP-Adresse der VM
#    SSH_KEY_PATH - Pfad zum privaten SSH-Key
#    SSH_USER     - Benutzername auf der VM
vi config.env

# 4. Deployment starten
./deploy.sh

Nach Abschluss werden die Zugangsdaten (URL, Admin-User, Passwort) in der Konsole angezeigt und in .jenkins-credentials gespeichert.

Konfiguration

Alle Parameter werden in config.env gesetzt. Eine kommentierte Vorlage liegt in config.env.example.

Pflichtparameter

Parameter Beschreibung
TARGET_HOST IP-Adresse oder Hostname der Ziel-VM
SSH_KEY_PATH Pfad zum privaten SSH-Key
SSH_USER SSH-Benutzer auf der VM

Optionale Parameter

Parameter Default Beschreibung
SSH_PORT 22 SSH-Port
JENKINS_PORT 8080 Port fuer die Jenkins Web-UI
JENKINS_VERSION lts lts, latest oder eine spezifische Version (z.B. 2.462.1)
JAVA_VERSION 17 OpenJDK-Version (17 oder 21)
INSTALL_DOCKER true Docker CE auf dem Host installieren
INSTALL_PLUGINS (leer) Zusaetzliche Plugins, kommasepariert (z.B. ansible,terraform)
ADMIN_USER admin Jenkins-Admin-Benutzername
ADMIN_PASSWORD (generiert) Admin-Passwort (wird automatisch erzeugt, wenn leer)
AGENT_COUNT 0 Anzahl lokaler Jenkins-Agenten (0--5)
DOMAIN_NAME (leer) Domain fuer Jenkins -- aktiviert Nginx + Let's Encrypt SSL
LETSENCRYPT_EMAIL (leer) E-Mail fuer Let's Encrypt Zertifikats-Benachrichtigungen
NGINX_REVERSE_PROXY false Nginx als Reverse Proxy (wird automatisch aktiviert bei DOMAIN_NAME)

Beispielkonfigurationen

Minimale Installation -- nur Jenkins mit Docker:

TARGET_HOST="10.0.1.50"
SSH_KEY_PATH="~/.ssh/training_key"
SSH_USER="ubuntu"

Mit SSL (Let's Encrypt) -- Nginx als Reverse Proxy mit automatischem Zertifikat:

TARGET_HOST="10.0.1.50"
SSH_KEY_PATH="~/.ssh/training_key"
SSH_USER="ubuntu"
DOMAIN_NAME="jenkins.meinefirma.de"
LETSENCRYPT_EMAIL="admin@meinefirma.de"
JAVA_VERSION="21"
INSTALL_PLUGINS="ansible,terraform,kubernetes"
AGENT_COUNT="2"
ADMIN_PASSWORD="MeinSicheresPasswort123"

Sobald DOMAIN_NAME gesetzt ist, wird automatisch Nginx als Reverse Proxy installiert, ein Let's Encrypt Zertifikat angefordert und HTTP auf HTTPS umgeleitet. Die automatische Zertifikatserneuerung wird ebenfalls eingerichtet.

Deployment-Optionen

# Vollstaendiges Deployment
./deploy.sh

# Alternative Konfigurationsdatei verwenden
./deploy.sh --config prod.env

# Nur Verbindungs- und Systemcheck
./deploy.sh --preflight-only

# Einzelnen Schritt ausfuehren
./deploy.sh --step 03-jenkins

# Schritte ueberspringen
./deploy.sh --skip 05-docker --skip 06-nginx

# Trockenlauf (zeigt an, was passieren wuerde)
./deploy.sh --dry-run

Installationsschritte

Das Deployment laeuft in folgenden Schritten ab:

Schritt Skript Beschreibung
0 00-preflight.sh SSH-Verbindung, OS-Check, Ressourcen, Internetzugang
1 01-base-setup.sh System-Update, Basispakete, Firewall (ufw)
2 02-java.sh OpenJDK Installation
3 03-jenkins.sh Jenkins Repository, Installation, Port-Konfiguration
4 04-plugins.sh Plugin-Installation ueber Jenkins CLI
5 05-docker.sh Docker CE Installation (optional)
6 06-nginx.sh Nginx Reverse Proxy + SSL (optional)
7 07-agents.sh Jenkins-Agenten vorbereiten (optional)
8 08-finalize.sh JCasC anwenden, Admin-User, Health-Check, Zusammenfassung

Jeder Schritt ist idempotent und kann einzeln mit --step ausgefuehrt werden.

Vorinstallierte Plugins

Folgende Plugins werden standardmaessig installiert:

  • git -- Git-Integration
  • workflow-aggregator -- Pipeline-Support
  • docker-workflow -- Docker in Pipelines
  • credentials / credentials-binding -- Credential-Management
  • ssh-agent -- SSH-Agent fuer Pipelines
  • matrix-auth -- Berechtigungsmatrix
  • configuration-as-code -- Jenkins Configuration as Code (JCasC)
  • pipeline-stage-view -- Pipeline Stage Visualisierung
  • timestamper -- Zeitstempel in Build-Logs
  • locale -- Spracheinstellungen
  • antisamy-markup-formatter -- Sichere HTML-Formatierung

Weitere Plugins koennen ueber den Parameter INSTALL_PLUGINS hinzugefuegt werden.

Smoke-Test Pipeline Jobs

Nach dem Deployment werden automatisch 7 Pipeline-Jobs im Ordner smoke-tests angelegt, die die Jenkins-Konfiguration validieren:

Job Beschreibung
01 - System Info Zeigt Host-Informationen, Java-Version, Jenkins-Umgebung
02 - Docker Test Prueft Docker CLI, docker run, docker build
03 - Docker Agent Pipeline Fuehrt Stages in Docker-Containern aus (Alpine, Ubuntu)
04 - Credentials Test Validiert das Credential-Management
05 - Pipeline Features Testet parallele Stages, Stash/Unstash, Artefakte
06 - Git Test Prueft Git-Installation und Repository-Klonen
07 - SSL & Nginx Check Prueft HTTPS, Zertifikat, Nginx-Status

Alle Jobs koennen einzeln oder als Gesamttest ausgefuehrt werden.

Projektstruktur

.
├── CLAUDE.md              # Technische Anforderungsdokumentation
├── README.md              # Diese Datei
├── config.env.example     # Konfigurationsvorlage
├── deploy.sh              # Haupt-Einstiegspunkt
├── lib/
│   └── common.sh          # Hilfsfunktionen (SSH, Logging, Templates)
├── scripts/
│   ├── 00-preflight.sh    # Verbindungs- und Systemcheck
│   ├── 01-base-setup.sh   # Basispakete und Firewall
│   ├── 02-java.sh         # Java-Installation
│   ├── 03-jenkins.sh      # Jenkins-Installation
│   ├── 04-plugins.sh      # Plugin-Installation
│   ├── 05-docker.sh       # Docker (optional)
│   ├── 06-nginx.sh        # Nginx Reverse Proxy (optional)
│   ├── 07-agents.sh       # Jenkins-Agenten (optional)
│   └── 08-finalize.sh     # Abschluss und Health-Check
└── templates/
    ├── jenkins-casc.yaml       # JCasC-Template
    ├── nginx-jenkins.conf      # Nginx mit SSL (Let's Encrypt)
    └── nginx-jenkins-nossl.conf # Nginx ohne SSL

Sicherheitshinweise

  • config.env und .jenkins-credentials sind in .gitignore eingetragen und werden nicht versioniert.
  • Das Admin-Passwort wird automatisch generiert, wenn keines gesetzt ist.
  • Der Setup-Wizard wird deaktiviert -- die Konfiguration erfolgt vollstaendig ueber JCasC.
  • Bei gesetztem DOMAIN_NAME wird automatisch ein Let's Encrypt Zertifikat angefordert. Die automatische Erneuerung (alle 90 Tage) wird ueber einen Certbot-Timer und einen Nginx-Reload-Hook sichergestellt.
  • Ohne DOMAIN_NAME laeuft Jenkins unverschluesselt -- nur fuer geschuetzte Netzwerke empfohlen.

Fehlerbehebung

SSH-Verbindung schlaegt fehl:

# Verbindung manuell testen
ssh -i ~/.ssh/training_key -p 22 ubuntu@10.0.1.50

Jenkins startet nicht:

# Logs auf dem Zielsystem pruefen
ssh -i ~/.ssh/training_key ubuntu@10.0.1.50 "sudo journalctl -u jenkins -n 50"

Preflight-Check isoliert ausfuehren:

./deploy.sh --preflight-only

Einzelnen Schritt wiederholen:

./deploy.sh --step 04-plugins

Weiterbildung

Dieses Projekt ist Teil des Schulungsangebots der Comquent Academy. Weitere Informationen zum Jenkins Expert Training:

Jenkins Expert Training -- Comquent Academy

Lizenz

Intern -- Comquent Academy, fuer Trainingszwecke.

About

Automate the environment for Jenkins Trainings, supported by Claude Code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages