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.
mvn clean install).mvn test) und ggf.
Integrationstests (mvn verify) ausgeführt.Invoke top-level Maven targets auswählen oder einen
„Pipeline“-Build mit Jenkinsfile konfigurieren.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'
}
}
}
}mvn clean install
aus.main Branch wird
in ein zentrales Repository deployt.-T Option)..gitlab-ci.yml GrundlagenIn 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.
.gitlab-ci.ymlstages:
- 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 deployMVN_SETTINGS_XML) gesetzt werden, um benutzerdefinierte
settings.xml einzubinden..m2 Repository), um Builds zu beschleunigen.main, release) zulassen.quality).GitHub Actions speichert CI/CD-Konfigurationen in
.github/workflows/<filename>.yml. Jeder Push, Pull
Request oder Tag-Event kann eine definierte Pipeline auslösen.
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 deploymain).Caching:
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}Beschleunigt den Build, da Dependencies nicht jedes Mal neu heruntergeladen werden.
Integration mit GitHub Packages: Direktes Deploy in GitHub Packages.
Secrets / Encrypted Variables: In den Repository
Settings hinterlegen (z. B. DEPLOY_USERNAME,
DEPLOY_PASSWORD).
mvn -T 1C).Ob Jenkins, GitLab oder GitHub Actions – Maven lässt sich in jeder CI/CD-Umgebung effizient integrieren. Entscheidend ist eine klare Struktur der Pipeline:
mvn clean install)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.