CI/CD-Mastery Serie | Teil 12 von 12 – Das Finale

Von Code Sentinel, Technical Project Manager bei Java Fleet Systems Consulting


🗺️ Wo du in der Serie stehst

ModulTeileStatus
Modul 1: FoundationsTeil 1-4✅ Abgeschlossen
Modul 2: Docker & ContainerTeil 5-7✅ Abgeschlossen
Modul 3: Deployment-StrategienTeil 8-10✅ Abgeschlossen
Modul 4: Enterprise & AdvancedTeil 11-12🎉 Finale!

Level: 🟡 PROFESSIONALS | Lesezeit: ~20 Minuten | Voraussetzungen: Teil 1-11


📚 Was du in dieser Serie gelernt hast

Deine CI/CD-Journey:

  • ✅ Erste Pipelines mit GitHub Actions & Jenkins (Teil 1)
  • ✅ Security Gates: OWASP, Trivy, SonarQube (Teil 2-4)
  • ✅ Container-Optimierung & Supply Chain Security (Teil 5-7)
  • ✅ Deployment-Strategien: Blue-Green, Canary (Teil 8-9)
  • ✅ GitOps mit ArgoCD (Teil 10)
  • ✅ Jenkins Shared Libraries für Enterprise (Teil 11)

Heute: Du lernst, wie du dein Wissen auf JEDE Plattform überträgst – und warum das Tool egal ist.


⚡ 30-Sekunden-Überblick

Was du heute lernst:

  • 🌱 Einsteiger: GitLab CI und Azure DevOps Basics
  • 🌿 Erfahrene: Platform-agnostisches Pipeline-Design
  • 🌳 Profis: Migration zwischen Plattformen ohne Schmerzen

Nach diesem Teil kannst du:

  • ✅ GitLab CI Pipelines schreiben
  • ✅ Azure DevOps Pipelines verstehen
  • ✅ Pipelines platform-agnostisch designen
  • ✅ Zwischen Plattformen migrieren

👋 Code Sentinel: „Das Tool ist egal. Die Prinzipien zählen.“

Hey! 👋

Code Sentinel hier. Willkommen zum Finale!

Vor 12 Wochen hast du mit mvn clean install angefangen. Heute bist du hier – mit Security Gates, Container-Workflows, Kubernetes-Deployments und GitOps im Gepäck.

Aber lass mich dir eine Geschichte erzählen.


Letzte Woche bei Java Fleet:

Nova kam zu mir, sichtlich gestresst.

„Code, ich hab ein Problem. Ich bewerbe mich bei TechCorp. Die nutzen GitLab CI. Ich kenne nur GitHub Actions. Muss ich alles neu lernen?“

Ich musste schmunzeln.

„Nova, was macht eine Pipeline?“

Sie überlegte. „Build, Test, Security-Scan, Container bauen, deployen.“

„Und was davon ändert sich, wenn du GitLab statt GitHub nutzt?“

Stille. Dann ein Grinsen.

„Nichts davon. Nur die Syntax.“

Genau.

Die Tools ändern sich. GitHub Actions heute, GitLab CI morgen, Azure DevOps übermorgen. Aber die Prinzipien – die bleiben.

Heute zeige ich dir, wie du dein Wissen auf jede Plattform überträgst. 🚀


🟢 GRUNDLAGEN

Die drei großen Plattformen

GitLab
CI/CD Plattform Vergleich

Abbildung 1: GitHub Actions vs. GitLab CI vs. Azure DevOps im Überblick

Kurzer Vergleich:

AspektGitHub ActionsGitLab CIAzure DevOps
Config-File.github/workflows/*.yml.gitlab-ci.ymlazure-pipelines.yml
RunnerGitHub-hosted / Self-hostedGitLab RunnerMicrosoft-hosted / Self-hosted
StärkeGitHub-Integration, MarketplaceAll-in-One DevOpsMicrosoft/Azure-Ökosystem
Kostenlos2.000 Min/Monat (Free)400 Min/Monat (Free)1.800 Min/Monat (Free)
EnterpriseGitHub EnterpriseGitLab UltimateAzure DevOps Server

💡 Welche Plattform soll ich lernen? Die, die dein Team nutzt. Alle drei können dasselbe. Die Syntax ist unterschiedlich, die Konzepte identisch.


GitLab CI Grundlagen

Einfache Pipeline (.gitlab-ci.yml):

stages:
  - build
  - test
  - security
  - deploy

variables:
  MAVEN_OPTS: "-Xmx1024m"

build:
  stage: build
  image: maven:3.9-eclipse-temurin-21
  script:
    - mvn clean package -DskipTests
  artifacts:
    paths:
      - target/*.jar
    expire_in: 1 hour

test:
  stage: test
  image: maven:3.9-eclipse-temurin-21
  script:
    - mvn test
  artifacts:
    reports:
      junit: target/surefire-reports/*.xml

security-scan:
  stage: security
  image: maven:3.9-eclipse-temurin-21
  script:
    - mvn org.owasp:dependency-check-maven:check
  artifacts:
    reports:
      dependency_scanning: target/dependency-check-report.json
  allow_failure: true

deploy-staging:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl apply -f k8s/
  environment:
    name: staging
    url: https://staging.example.com
  only:
    - main

GitLab CI Konzepte → GitHub Actions Mapping:

GitLab CIGitHub ActionsBedeutung
stagesJobs mit needsReihenfolge der Schritte
imageruns-on + ContainerExecution Environment
scriptrunBefehle ausführen
artifactsactions/upload-artifactDateien zwischen Jobs teilen
only/excepton + ifTrigger-Bedingungen
environmentenvironmentDeployment-Target

Azure DevOps Pipelines

Einfache Pipeline (azure-pipelines.yml):

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

variables:
  MAVEN_OPTS: '-Xmx1024m'

stages:
  - stage: Build
    jobs:
      - job: BuildJob
        steps:
          - task: Maven@4
            inputs:
              mavenPomFile: 'pom.xml'
              goals: 'clean package'
              options: '-DskipTests'
          
          - task: PublishBuildArtifacts@1
            inputs:
              pathToPublish: 'target/*.jar'
              artifactName: 'app'

  - stage: Test
    dependsOn: Build
    jobs:
      - job: TestJob
        steps:
          - task: Maven@4
            inputs:
              mavenPomFile: 'pom.xml'
              goals: 'test'
          
          - task: PublishTestResults@2
            inputs:
              testResultsFormat: 'JUnit'
              testResultsFiles: '**/surefire-reports/*.xml'

  - stage: Deploy
    dependsOn: Test
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
    jobs:
      - deployment: DeployToStaging
        environment: 'staging'
        strategy:
          runOnce:
            deploy:
              steps:
                - task: Kubernetes@1
                  inputs:
                    connectionType: 'Kubernetes Service Connection'
                    command: 'apply'
                    arguments: '-f k8s/'

Azure DevOps Konzepte:

Azure DevOpsGitHub ActionsBedeutung
stagesJobs mit DependenciesPipeline-Phasen
jobsjobsParallele Arbeit
stepsstepsEinzelne Aktionen
taskuses (Action)Vorgefertigte Bausteine
deploymentenvironmentManaged Deployments
conditionifBedingte Ausführung

🟡 PROFESSIONALS

Platform-agnostisches Pipeline-Design

Das Problem: Du schreibst eine Pipeline für GitHub Actions. Nächstes Jahr wechselt dein Unternehmen zu GitLab. Alles neu schreiben?

Die Lösung: Trenne Logik von Plattform.

Platform-agnostisches Design

Abbildung 2: Abstraction Layer für platform-unabhängige Pipelines

Prinzip: Shell-Scripts als Abstraction Layer

pipeline.yml          → Plattform-spezifisch (dünn)
     │
     ▼
scripts/build.sh      → Plattform-unabhängig (dick)
scripts/test.sh
scripts/deploy.sh

scripts/build.sh:

#!/bin/bash
set -euo pipefail

echo "=== Building Java Application ==="

# Java Version prüfen
java -version

# Maven Build
mvn clean package -DskipTests \
    -Dmaven.repo.local=.m2/repository

# Artifact-Info
echo "Build complete: $(ls -la target/*.jar)"

scripts/security-scan.sh:

#!/bin/bash
set -euo pipefail

CVSS_THRESHOLD=${CVSS_THRESHOLD:-7.0}
FAIL_ON_CRITICAL=${FAIL_ON_CRITICAL:-true}

echo "=== Security Scan ==="
echo "CVSS Threshold: $CVSS_THRESHOLD"

# OWASP Dependency Check
mvn org.owasp:dependency-check-maven:check \
    -DfailBuildOnCVSS=$CVSS_THRESHOLD

# Trivy für Container (falls Image existiert)
if [ -n "${DOCKER_IMAGE:-}" ]; then
    echo "=== Container Scan ==="
    trivy image --severity HIGH,CRITICAL \
        --exit-code $([[ "$FAIL_ON_CRITICAL" == "true" ]] && echo 1 || echo 0) \
        "$DOCKER_IMAGE"
fi

echo "Security scan complete"

scripts/deploy.sh:

#!/bin/bash
set -euo pipefail

ENVIRONMENT=${ENVIRONMENT:-staging}
NAMESPACE=${NAMESPACE:-$ENVIRONMENT}
IMAGE_TAG=${IMAGE_TAG:-latest}

echo "=== Deploying to $ENVIRONMENT ==="

# Kubeconfig muss von der Pipeline gesetzt werden
if [ -z "${KUBECONFIG:-}" ]; then
    echo "ERROR: KUBECONFIG not set"
    exit 1
fi

# Image Tag in Manifests ersetzen
sed -i "s|IMAGE_TAG|$IMAGE_TAG|g" k8s/*.yaml

# Apply
kubectl apply -f k8s/ -n "$NAMESPACE"

# Warten auf Rollout
kubectl rollout status deployment/app -n "$NAMESPACE" --timeout=300s

echo "Deployment to $ENVIRONMENT complete"

Die dünne Pipeline-Schicht

GitHub Actions (.github/workflows/ci.yml):

name: CI/CD

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

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
      - name: Build
        run: ./scripts/build.sh

  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
      - name: Test
        run: ./scripts/test.sh

  security:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
      - name: Security Scan
        run: ./scripts/security-scan.sh
        env:
          CVSS_THRESHOLD: '7.0'

  deploy:
    needs: [test, security]
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    environment: staging
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        run: ./scripts/deploy.sh
        env:
          ENVIRONMENT: staging
          IMAGE_TAG: ${{ github.sha }}
          KUBECONFIG: ${{ secrets.KUBECONFIG }}

GitLab CI (.gitlab-ci.yml) – GLEICHE Scripts:

stages:
  - build
  - test
  - security
  - deploy

default:
  image: maven:3.9-eclipse-temurin-21

build:
  stage: build
  script:
    - ./scripts/build.sh

test:
  stage: test
  script:
    - ./scripts/test.sh

security:
  stage: security
  script:
    - ./scripts/security-scan.sh
  variables:
    CVSS_THRESHOLD: "7.0"

deploy:
  stage: deploy
  script:
    - ./scripts/deploy.sh
  variables:
    ENVIRONMENT: staging
    IMAGE_TAG: $CI_COMMIT_SHA
  environment:
    name: staging
  only:
    - main

Azure DevOps (azure-pipelines.yml) – GLEICHE Scripts:

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

stages:
  - stage: Build
    jobs:
      - job: Build
        steps:
          - checkout: self
          - script: ./scripts/build.sh
            displayName: 'Build'

  - stage: Test
    dependsOn: Build
    jobs:
      - job: Test
        steps:
          - checkout: self
          - script: ./scripts/test.sh
            displayName: 'Test'

  - stage: Security
    dependsOn: Build
    jobs:
      - job: Security
        steps:
          - checkout: self
          - script: ./scripts/security-scan.sh
            displayName: 'Security Scan'
            env:
              CVSS_THRESHOLD: '7.0'

  - stage: Deploy
    dependsOn: [Test, Security]
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
    jobs:
      - deployment: Deploy
        environment: staging
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
                - script: ./scripts/deploy.sh
                  displayName: 'Deploy'
                  env:
                    ENVIRONMENT: staging
                    IMAGE_TAG: $(Build.SourceVersion)

Das Ergebnis:

  • 90% der Logik in Shell-Scripts (platform-unabhängig)
  • 10% in Pipeline-YAML (platform-spezifisch)
  • Migration = Pipeline-YAML neu schreiben, Scripts bleiben

Migration zwischen Plattformen

Migrations-Checkliste:

## Von GitHub Actions zu GitLab CI

### 1. Secrets migrieren
- [ ] GitHub Secrets → GitLab CI/CD Variables
- [ ] Repository Secrets → Project Variables
- [ ] Environment Secrets → Environment Variables

### 2. Runner prüfen
- [ ] GitHub-hosted → GitLab Shared Runners
- [ ] Self-hosted → GitLab Runner installieren

### 3. Syntax konvertieren
- [ ] `on:` → `rules:` oder `only/except`
- [ ] `uses:` → `image:` oder `script:`
- [ ] `needs:` → `needs:` (gleich!)
- [ ] `if:` → `rules: - if:`

### 4. Features mappen
- [ ] GitHub Environments → GitLab Environments
- [ ] GitHub Actions Cache → GitLab Cache
- [ ] GitHub Artifacts → GitLab Artifacts

### 5. Testen
- [ ] Pipeline auf Feature-Branch testen
- [ ] Alle Stages durchlaufen
- [ ] Deployment verifizieren

Typische Stolperfallen:

ProblemGitHub ActionsGitLab CI
Secrets-Syntax${{ secrets.NAME }}$NAME (direkt)
Bedingte Jobsif: github.ref == ...rules: - if: $CI_COMMIT_BRANCH == ...
Artifactsactions/upload-artifactartifacts: Block
Matrix-Buildsstrategy.matrixparallel:matrix

🔵 BONUS

Enterprise Patterns – Die Zusammenfassung

Was du in 12 Wochen gelernt hast:

Pattern 1: Security Gates (Teil 2-4)

Build → OWASP Scan → Trivy Scan → SonarQube → Deploy
         │              │            │
         ▼              ▼            ▼
       FAIL bei      FAIL bei     FAIL bei
       CVE ≥ 7.0   CRITICAL/HIGH  Quality Gate

Pattern 2: Container-Optimierung (Teil 5-7)

Multi-Stage Build → Distroless Base → SBOM generieren → Registry Push
        │                  │                │
        ▼                  ▼                ▼
    Build-Zeit        Image-Size        Supply Chain
    minimieren        minimieren        dokumentieren

Pattern 3: Deployment-Strategien (Teil 8-9)

                    ┌─► Blue-Green (schneller Switch)
                    │
Production Deploy ──┼─► Canary (gradueller Rollout)
                    │
                    └─► Rolling (Kubernetes Default)

Pattern 4: GitOps (Teil 10)

Developer → Git Commit → ArgoCD → Cluster
                           │
                    (continuous sync)
                           │
              Git = Single Source of Truth

Pattern 5: Shared Libraries (Teil 11)

Shared Library (1x)          180 Projekte
       │                          │
       ▼                          ▼
vars/javaPipeline.groovy    Jenkinsfile (3 Zeilen)
       │                          │
       └──────────────────────────┘
              Einmal schreiben,
              überall nutzen

Pattern 6: Platform-Agnostik (Teil 12)

scripts/*.sh (Logik)     pipeline.yml (Glue)
       │                        │
       ▼                        ▼
  Plattform-unabhängig    Plattform-spezifisch
       │                        │
       └────────────────────────┘
           Einfache Migration

Performance-Testing in CI/CD

Bonus-Thema: Wie integrierst du Performance-Tests?

Mit k6 (Load Testing):

# GitHub Actions Beispiel
performance-test:
  runs-on: ubuntu-latest
  needs: deploy-staging
  steps:
    - uses: actions/checkout@v4
    
    - name: Run k6 Load Test
      uses: grafana/k6-action@v0.3.1
      with:
        filename: tests/load-test.js
        flags: --out json=results.json
      env:
        K6_TARGET_URL: https://staging.example.com
    
    - name: Check Thresholds
      run: |
        # Fail wenn p95 > 500ms
        p95=$(jq '.metrics.http_req_duration.values.p95' results.json)
        if (( $(echo "$p95 > 500" | bc -l) )); then
          echo "Performance threshold exceeded: p95=${p95}ms"
          exit 1
        fi

tests/load-test.js:

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 50 },   // Ramp-up
    { duration: '3m', target: 50 },   // Steady
    { duration: '1m', target: 0 },    // Ramp-down
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'],  // 95% unter 500ms
    http_req_failed: ['rate<0.01'],    // Weniger als 1% Fehler
  },
};

export default function () {
  const res = http.get(`${__ENV.K6_TARGET_URL}/api/health`);
  
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
  
  sleep(1);
}

✅ Checkpoint – Serie Abschluss

Hast du in dieser Serie gelernt:

  • [ ] CI/CD Pipelines von Grund auf bauen?
  • [ ] Security Gates implementieren (OWASP, Trivy, SonarQube)?
  • [ ] Container optimieren und absichern?
  • [ ] Blue-Green und Canary Deployments?
  • [ ] GitOps mit ArgoCD?
  • [ ] Jenkins Shared Libraries für Enterprise?
  • [ ] Platform-agnostisches Pipeline-Design?

Wenn du alle Checkboxen abhaken kannst: Glückwunsch! Du bist CI/CD-ready für Enterprise-Projekte.


🎨 Finale Challenge

Deine Abschluss-Mission:

  1. Nimm dein bestehendes Projekt (oder das AutoTech-Beispiel)
  2. Extrahiere die Pipeline-Logik in Shell-Scripts
  3. Schreibe Pipelines für ZWEI Plattformen (z.B. GitHub Actions + GitLab CI)
  4. Verifiziere, dass beide identisch funktionieren

Bonus: Dokumentiere die Migration in einem README.


❓ FAQ

Frage 1: Soll ich alle drei Plattformen lernen?

Nein. Lerne eine gut, verstehe die Konzepte. Die anderen kannst du bei Bedarf in einem Tag adaptieren.

Frage 2: Ist GitLab CI besser als GitHub Actions?

Nicht besser, anders. GitLab CI ist Teil einer All-in-One Plattform (Issues, Wiki, Registry, CI). GitHub Actions ist besser in reinen GitHub-Workflows. Wähle basierend auf deinem Ökosystem.

Frage 3: Wann Azure DevOps?

Wenn du im Microsoft-Ökosystem bist (Azure Cloud, .NET, Visual Studio). Die Integration ist dort unschlagbar.

Frage 4: Wie bleibe ich aktuell?

Die Plattformen entwickeln sich ständig. Folge den Release Notes, aber fokussiere dich auf Prinzipien, nicht Features. Security Gates, Container, GitOps – das bleibt.

Frage 5: Was ist mit Jenkins X, Tekton, Drone?

Alles valide Optionen. Tekton ist Kubernetes-native und sehr flexibel. Drone ist leichtgewichtig. Jenkins X ist Jenkins für Cloud-Native. Die Prinzipien aus dieser Serie gelten für alle.

Frage 6: Wie überzeuge ich mein Team von CI/CD?

Zeig den ROI: Weniger manuelle Arbeit, schnellere Releases, weniger Produktionsfehler. Fang klein an – ein Projekt, eine Pipeline. Erfolg spricht für sich.

Frage 7: Was macht ihr bei Java Fleet, wenn jemand fragt „Welches Tool ist das beste?“

lacht Das ist definitiv private logs Material. Aber kurz: Franz-Martin hat einmal gesagt „Das beste Tool ist das, was ihr tatsächlich benutzt.“ Dann hat Bernd 45 Minuten über Make-Files von 1997 monologisiert. Wir trinken seitdem mehr Kaffee in solchen Meetings. ☕


📖 CI/CD-Mastery Serie – Komplett

TeilThemaWas du gelernt hast
1Erste PipelineGitHub Actions & Jenkins Basics
2Security GatesOWASP Dependency Check & Trivy
3Coverage GatesJaCoCo & Test-Qualität
4Quality GatesSonarQube & Technical Debt
5Docker BuildsMulti-Stage & Layer-Caching
6Container SecuritySBOM & Supply Chain
7RegistryImage-Management & Tagging
8Blue-GreenZero-Downtime Deployments
9CanaryKubernetes & gradueller Rollout
10GitOpsArgoCD & Infrastructure as Code
11Jenkins EnterpriseShared Libraries & JCasC
12Multi-PlatformPlatform-agnostisches Design

📦 Downloads – Finale Edition

RessourceBeschreibung
complete-pipeline-kit.zipAlle Scripts, alle Plattformen
migration-checklist.pdfCheckliste für Platform-Migration
enterprise-patterns.pdfZusammenfassung aller Patterns
cheatsheet-all-platforms.pdfSyntax-Vergleich GH/GL/Azure

Quick Start:

# 1. ZIP entpacken
unzip complete-pipeline-kit.zip
cd complete-pipeline-kit

# 2. Scripts ausführbar machen
chmod +x scripts/*.sh

# 3. Lokal testen
./scripts/build.sh
./scripts/test.sh

# 4. Pipeline deiner Wahl kopieren
cp github-actions/.github ~/my-project/
# ODER
cp gitlab-ci/.gitlab-ci.yml ~/my-project/
# ODER  
cp azure-devops/azure-pipelines.yml ~/my-project/

🔗 Externe Links – Teil 12: Multi-Platform CI/CD

GitLab CI 🦊

RessourceBeschreibung
GitLab CI DocsKomplette CI/CD-Dokumentation
GitLab CI Quick StartSchnelleinstieg
YAML ReferenceVollständige YAML-Syntax
CI/CD ExamplesBeispiel-Pipelines
Container RegistryGitLab Container Registry
GitLab RunnersRunner-Installation & Konfiguration

Azure DevOps ☁️

RessourceBeschreibung
Azure Pipelines DocsKomplette Dokumentation
YAML Schema ReferenceVollständige YAML-Syntax
Pipeline Tasks ReferenceAlle verfügbaren Tasks
Kubernetes DeploymentK8s mit Azure Pipelines
TemplatesWiederverwendbare Templates

GitHub Actions (Referenz) 🐙

RessourceBeschreibung
GitHub Actions DocsKomplette Dokumentation
Reusable WorkflowsWiederverwendbare Workflows
Workflow SyntaxYAML-Syntax-Referenz
Actions MarketplaceFertige Actions

Migration Guides 🔄

RessourceBeschreibung
GitHub Actions → GitLab CIMigrations-Anleitung
Azure → GitHub ActionsMigrations-Anleitung
Jenkins → GitLab CIMigrations-Anleitung
Jenkins → GitHub ActionsMigrations-Anleitung

Performance Testing 📊

RessourceBeschreibung
k6 DokumentationLoad Testing mit k6
k6 GitHub Actionk6 in GitHub Actions
Grafana k6k6 mit Grafana-Integration
k6 ExamplesBeispiel-Scripts

Alternative CI/CD Tools 🛠️

ToolBeschreibung
TektonKubernetes-native CI/CD
Drone CIContainer-first CI/CD
CircleCICloud CI/CD Platform
Woodpecker CIDrone-Fork, Self-hosted
BuildkiteHybrid CI/CD Platform

DevOps Allgemein 📚

RessourceBeschreibung
12 Factor AppBest Practices für Cloud Apps
DORA MetricsDevOps-Performance messen
DevOps RoadmapInteraktive Lern-Roadmap

🎉 Geschafft!

12 Wochen. 12 Teile. Eine komplette CI/CD-Journey.

Du bist gestartet mit mvn clean install und einem vagen Gefühl, dass „Automation irgendwie gut wäre“.

Jetzt hast du:

  • Security Gates, die Vulnerabilities fangen bevor sie Production erreichen
  • Container-Workflows, die in Minuten statt Stunden bauen
  • Deployment-Strategien für Zero-Downtime Releases
  • GitOps für Infrastructure as Code
  • Das Wissen, jede Pipeline auf jeder Plattform zu bauen

Das Wichtigste:

Die Tools werden sich ändern. GitHub Actions v5, GitLab CI 2027, whatever.

Aber die Prinzipien – Build, Test, Scan, Deploy, Monitor – die bleiben. Und die hast du jetzt drauf.


👋 Danke!

Von mir, Code Sentinel, und dem ganzen Java Fleet Team:

Danke, dass du diese Journey mit uns gemacht hast.

Wenn du Fragen hast, wenn du stuck bist, wenn du einfach „Hey, ich hab’s geschafft!“ sagen willst:

📧 code.sentinel@java-developer.online

Wir lesen jede Mail.


Keep building. Keep securing. Keep deploying. 🛡️

Du bist jetzt CI/CD-ready.


Bernd’s Corner – Finale Edition:

„12 Teile CI/CD. Zu meiner Zeit war CI/CD: ‚Compile It, Copy Diskette‘. Hat auch funktioniert. Okay, manchmal hat die Diskette nicht funktioniert. Und manchmal war’s die falsche Version. Und einmal hab ich versehentlich die Kundendatenbank überschrieben. Aber sonst: Einwandfrei.“

„Aber ernsthaft: Macht das mit den Pipelines. Automatisiert. Testet. Scannt. Ich wünschte, wir hätten das 1998 gehabt. Hätte mir einige Nachtschichten erspart.“

— Bernd, der heimlich stolz auf euch ist (aber es nie zugeben würde)


Tags: #CICD #GitLabCI #AzureDevOps #DevOps #Enterprise #Finale

© 2025 Java Fleet Systems Consulting | java-developer.online

Autor

  • Code Sentinel

    32 Jahre alt, Technical Project Manager und Security-Experte bei Java Fleet Systems Consulting. Code ist ein erfahrener Entwickler, der in die Projektleitung aufgestiegen ist, aber immer noch tief in der Technik verwurzelt bleibt. Seine Mission: Sicherstellen, dass Projekte termingerecht, sicher und wartbar geliefert werden.