19 CI/CD-Einbindung (Jenkins, GitLab, GitHub Actions)

Continuous Integration (CI) und Continuous Delivery (CD) sind wesentliche Bestandteile moderner Softwareentwicklung. Sie gewährleisten, dass Code-Änderungen automatisiert gebaut, getestet und bereitgestellt werden. Maven fügt sich hier reibungslos als Build-Werkzeug ein. Im Folgenden zeigen wir, wie Maven in typische CI/CD-Pipelines eingebunden wird, exemplarisch anhand von Jenkins, GitLab und GitHub Actions.


19.1 1. Grundkonzept CI/CD mit Maven

  1. Code Commit
    Entwickler pushen Quellcode-Änderungen in ein Versionsverwaltungssystem (z. B. Git).
  2. Automatischer Build
    Der CI-Server erkennt neue Commits und startet einen Maven-Build (z. B. mvn clean install).
  3. Automatische Tests
    Während des Builds werden Unit-Tests (mvn test) und ggf. Integrationstests (mvn verify) ausgeführt.
  4. Bereitstellung (Deployment)
    Je nach Workflow werden fertige Artefakte (JAR, WAR) in ein Artefakt-Repository oder direkt in eine Zielumgebung (z. B. Staging-Server) deployt.
  5. Feedback
    Entwickler erhalten sofort Rückmeldung (Erfolg/Misserfolg), was kurze Reaktionszeiten ermöglicht.

19.2 2. Jenkins Integration

19.2.1 2.1 Jenkins-Job erstellen

  1. Neues Freestyle-Projekt (oder Pipeline) in Jenkins konfigurieren.
  2. Quellcode-Management: Git-Repository angeben, Jenkins holt automatisch den Code.
  3. Build: Unter „Build“ z. B. Invoke top-level Maven targets auswählen oder einen „Pipeline“-Build mit Jenkinsfile konfigurieren.

19.2.2 2.2 Beispiel: Jenkinsfile (Pipeline-Syntax)

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git url: 'https://git.example.com/myrepo.git', branch: 'main'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Test') {
            steps {
                // Tests werden meist schon in 'clean install' enthalten sein
                // Optional: sh 'mvn test'
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh 'mvn deploy'
            }
        }
    }
}

19.2.3 2.3 Best Practices für Jenkins und Maven


19.3 3. GitLab CI

19.3.1 3.1 .gitlab-ci.yml Grundlagen

In GitLab werden CI/CD-Pipelines meist über eine .gitlab-ci.yml Datei im Projekt konfiguriert. Wenn GitLab neue Commits erkennt, startet es einen Build entsprechend der definierten Stages.

19.3.2 3.2 Beispiel .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  image: maven:3.8.7-openjdk-17
  script:
    - mvn clean compile

test-job:
  stage: test
  image: maven:3.8.7-openjdk-17
  script:
    - mvn test

deploy-job:
  stage: deploy
  image: maven:3.8.7-openjdk-17
  only:
    - main
  script:
    - mvn deploy

19.3.3 3.3 Umgebungskonfiguration und Secrets

19.3.4 3.4 Best Practices


19.4 4. GitHub Actions

19.4.1 4.1 Workflow-Konzept

GitHub Actions speichert CI/CD-Konfigurationen in .github/workflows/<filename>.yml. Jeder Push, Pull Request oder Tag-Event kann eine definierte Pipeline auslösen.

19.4.2 4.2 Beispiel: Maven-Workflow

name: Java Maven Build

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17

      - name: Build with Maven
        run: mvn clean install

      - name: Deploy (only on main branch)
        if: github.ref == 'refs/heads/main'
        run: mvn deploy

19.4.3 4.3 Erweiterungen

19.4.4 4.4 Best Practices


19.5 5. Gemeinsame Best Practices

  1. Trennung von Build und Deploy:
  2. Sensible Daten schützen
  3. Consistency Check
  4. Parallelisierung
  5. Snapshots vs. Releases

19.6 6. Fazit

Ob Jenkins, GitLab oder GitHub Actions – Maven lässt sich in jeder CI/CD-Umgebung effizient integrieren. Entscheidend ist eine klare Struktur der Pipeline:

Durch die konsequente Anwendung von CI/CD wird jeder Code-Änderungsprozess transparenter und fehlerärmer. Maven’s Fähigkeit, Builds reproduzierbar und standardisiert abzuwickeln, macht es zu einem essenziellen Werkzeug in jeder automatisierten Pipeline.