CI/CD · Jenkins · SonarQube · Nexus · AWS

Vollständige CI/CD-Pipeline für eine Java-Webanwendung auf AWS EC2 — automatisierter Build, Test, Code-Analyse, Quality Gate und Artefakt-Management.

GitHub Repository

Kontext & Motivation

In modernen Software-Teams ist Continuous Integration der Standard — jeder Code-Commit muss automatisch gebaut, getestet und analysiert werden, bevor er in die Produktion gelangt. Manuelle Prozesse sind fehleranfällig, langsam und nicht reproduzierbar.

Ziel dieses Projekts war es, eine vollständige CI-Pipeline auf AWS EC2 aufzubauen — von der Infrastruktur bis zur Slack-Benachrichtigung — und dabei industrielle Standards wie Quality Gates und versionierte Artefakte umzusetzen.

Pipeline

GitHub → Jenkins → SonarQube → Nexus → Slack

Infrastruktur

3 AWS EC2 Instanzen — Jenkins, Nexus, SonarQube

Werkzeuge

Jenkins, Maven, SonarQube, Nexus, GitHub, Slack

Standard

Quality Gate — kein Artefakt ohne bestandene Code-Analyse

1 — Pipeline Flow

GitHub
Push
Webhook
Trigger
Maven
Build
Unit
Tests
Checkstyle
Analyse
SonarQube
Analyse
Quality
Gate
Nexus
Upload
Slack
Notification
Quality Gate Prinzip: Jenkins veröffentlicht Artefakte nur, wenn SonarQube Quality Gate = PASS. Bei FAIL wird die Pipeline sofort abgebrochen.

2 — AWS EC2 Infrastruktur

Die CI-Pipeline läuft auf 3 dedizierten EC2 Instanzen mit getrennten Security Groups.

Jenkins EC2

OS: Ubuntu 24.04

Tools: Jenkins, Java 17, Maven 3.9.9

SG: jenkins-sg

Port: 8080

Zugriff: http://PUBLIC_IP:8080

Nexus EC2

OS: Amazon Linux 2023

Tools: Nexus Repository Manager 3

SG: nexus-sg

Port: 8081

Zugriff: http://PUBLIC_IP:8081

SonarQube EC2

OS: Ubuntu 24.04

Tools: SonarQube, PostgreSQL, Nginx

SG: sonar-sg

Port: 80 (Nginx)

Zugriff: http://PUBLIC_IP

Nexus Repository Struktur

RepositoryTypZweck
profile-releasehostedStabile Release-Artefakte
profile-snapshothostedSnapshot-Versionen (Dev)
pro-maven-centralproxyCache für Maven Central
pro-maven-groupgroupZentraler Einstiegspunkt für Maven

3 — Jenkinsfile

Die Pipeline ist vollständig als Code definiert — reproduzierbar und versioniert in GitHub.

pipeline {
    agent any
    tools {
        maven "MAVEN3"
        jdk "OracleJDK17"
    }
    environment {
        NEXUSIP        = 'NEXUS_PRIVATE_IP'
        NEXUSPORT      = '8081'
        RELEASE_REPO   = 'profile-release'
        NEXUS_LOGIN    = 'nexuslogin'
        SONARSERVER    = 'sonarserver'
        SONARSCANNER   = 'sonarscanner'
    }
    stages {
        stage('Build')             { ... }
        stage('Test')              { ... }
        stage('Checkstyle')        { ... }
        stage('Sonar Analysis')    { ... }
        stage('Quality Gate')      { ... }
        stage('UploadArtifact')    { ... }
    }
    post {
        always { slackSend(...) }
    }
}

Artefakt-Versionierung

Jedes Artefakt wird eindeutig versioniert — kein Überschreiben möglich :

version: "${env.BUILD_ID}-${env.BUILD_TIMESTAMP}"
→ Beispiel: profileapp-36-26-01-20_23:46.war

4 — Fehler & Lösungen

Reale Fehler die während des Projekts aufgetreten sind und wie ich sie gelöst habe.

SSH Host Key Verification Failed

Build #1 scheiterte beim Checkout — Jenkins konnte GitHub nicht per SSH erreichen. Der GitHub Host-Key war auf der Jenkins-EC2 noch nicht bekannt.
Jenkins Build #1 fehlgeschlagen Host key verification failed

Lösung

# Als jenkins user auf der EC2
sudo su - jenkins
ssh -T git@github.com
# "yes" eingeben → GitHub wird in known_hosts gespeichert
✅ Nach dem Fix lief der Build erfolgreich durch — Checkout, Build, Test, SonarQube, Nexus Upload.
Jenkins Build erfolgreich

5 — Ergebnisse

SonarQube Quality Gate — PASSED

Quality Gate Passed

SonarQube Dashboard

SonarQube Dashboard

Nexus — Artefakt hochgeladen

Nexus Artifact Upload
✅ Vollständige CI-Pipeline funktioniert — von GitHub Commit bis Artefakt in Nexus inklusive SonarQube Quality Gate und Slack-Benachrichtigung.

6 — Zusammenfassung

KomponenteToolStatus
CI OrchestrationJenkins auf AWS EC2
Build & DependenciesMaven + Nexus Proxy
Unit TestsJUnit via Maven
Code StyleCheckstyle
Code QualitySonarQube
Quality GateSonarQube → Jenkins
Artefakt ManagementNexus Repository
Automatischer TriggerGitHub Webhook
Team NotificationSlack

Demonstrierte Kompetenzen

Jenkins CI/CD AWS EC2 Maven SonarQube Nexus GitHub Webhook Quality Gate Slack Integration Infrastructure as Code Linux/Ubuntu Troubleshooting

7 — Ausblick