Jenkins ist ein freier Automatisierungsserver für Builds, Tests und Deployments. Das Projekt entstand 2005 als Hudson bei Sun und wurde 2011 nach einem Streit mit Oracle als Jenkins fortgeführt. Jenkins ist in Java geschrieben und läuft auf nahezu jeder Plattform.

Aufbau: Controller und Agents

Ein Jenkins-Controller nimmt Aufträge an, verwaltet Konfiguration und Oberfläche und verteilt die Arbeit an Agents. Agents sind Maschinen oder Container, die die eigentlichen Build-Schritte ausführen. Diese Trennung erlaubt es, Builds auf unterschiedlichen Betriebssystemen oder Architekturen laufen zu lassen, ohne den Controller zu belasten.

Plugins als Stärke und Bürde

Jenkins kann fast nichts „out of the box" – dafür gibt es über 1.800 Plugins für Git, Maven, Docker, Kubernetes, Slack und so weiter. Diese Offenheit ist der größte Vorteil und gleichzeitig das größte Risiko: Jedes Plugin ist eine Abhängigkeit, die gepflegt und aktualisiert werden muss. Ein veraltetes Jenkins mit hundert Plugins ist ein Sicherheitsproblem.

Pipelines: der Jenkinsfile

Moderne Jenkins-Nutzung beschreibt den Ablauf als Code im Repository – den Jenkinsfile, geschrieben in Groovy, wahlweise deklarativ oder skriptbasiert.

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps { checkout scm }
        }
        stage('Test') {
            steps {
                sh 'python -m venv .venv'
                sh '.venv/bin/pip install -r requirements.txt'
                sh '.venv/bin/pytest -q'
            }
        }
        stage('Deploy') {
            when { branch 'main' }
            steps { sh './deploy.sh' }
        }
    }
    post {
        failure { echo 'Build fehlgeschlagen' }
    }
}

Der Vorteil: Die Pipeline liegt versioniert neben dem Code und ist reviewbar – statt in der Weboberfläche zusammengeklickt zu sein (siehe Commit).

Wann Jenkins, wann etwas anderes?

  • Jenkins lohnt sich, wenn sehr spezielle Anforderungen bestehen, alte Umgebungen eingebunden werden müssen oder volle Kontrolle im eigenen Netz gefordert ist.
  • GitLab CI oder GitHub Actions sind einfacher zu betreiben, wenn das Repository ohnehin dort liegt – siehe GitLab.

Der Trend geht zu Pipelines als Code mit möglichst wenig eigener Infrastruktur; Jenkins bleibt die flexibelste, aber auch pflegeintensivste Variante.

Siehe auch