Tavo-IT Logo
DevOps Praxis30 min Lesezeit2025-06-12

CI/CD PipelinesGitHub Actions, Jenkins & GitLab CI

Vollautomatisierte Deployment-Pipelines mit GitHub Actions, Jenkins und GitLab CI – Konzepte, Vergleich und Best Practices für moderne Softwareentwicklung.

CI/CDGitHub ActionsJenkinsGitLab CIDevOps

💡 Was ist CI/CD?

Continuous Integration (CI) und Continuous Delivery/Deployment (CD) sind Praktiken, die darauf abzielen, den Softwareentwicklungsprozess durch Automatisierung zu beschleunigen und zu verbessern. Eine CI/CD-Pipeline automatisiert die Schritte von der Codeänderung bis zur Auslieferung an die Benutzer.

  • Continuous Integration (CI): Entwickler integrieren Code regelmäßig in ein zentrales Repository. Jeder Push löst einen automatisierten Build und Test aus.
  • Continuous Delivery (CD): Erweiterung von CI, bei der Codeänderungen automatisch in eine produktionsnahe Umgebung (Staging) deployed werden. Das Deployment in die Produktion erfolgt manuell.
  • Continuous Deployment (CDP): Jede Codeänderung, die alle Tests besteht, wird automatisch in die Produktion deployed.

GitHub Actions GitHub Actions

GitHub Actions ist eine CI/CD-Plattform, die direkt in GitHub integriert ist. Workflows werden in YAML-Dateien definiert und können auf Ereignisse im Repository reagieren (z.B. Push, Pull Request).

Beispiel Workflow (Node.js):

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18.x'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Vorteile:

  • Tiefe Integration mit GitHub Repositories.
  • Große Auswahl an fertigen Aktionen im Marketplace.
  • Unterstützung für Linux, macOS, Windows, ARM und Container.
  • Großzügige kostenlose Kontingente für öffentliche und private Repos.

⚙️ Jenkins

Jenkins ist ein weit verbreiteter, Open-Source Automatisierungsserver. Er ist extrem flexibel und erweiterbar durch tausende von Plugins. Pipelines können über die UI (klassisch) oder als Code (Jenkinsfile) definiert werden.

Beispiel Jenkinsfile (Declarative Pipeline):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
                // Deploy-Schritte hier
            }
        }
    }
}

Vorteile:

  • Sehr hohe Flexibilität und Anpassbarkeit.
  • Riesige Community und Plugin-Ökosystem.
  • On-Premise oder Cloud-Deployment möglich.
  • Unterstützt komplexe und verteilte Builds.

🦊 GitLab CI/CD

GitLab CI/CD ist tief in die GitLab-Plattform integriert und bietet eine umfassende DevOps-Lösung aus einer Hand. Pipelines werden in einer `.gitlab-ci.yml`-Datei im Repository definiert.

Beispiel .gitlab-ci.yml:

image: node:18

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - npm install
    - npm run build

test_job:
  stage: test
  script:
    - npm test

deploy_job:
  stage: deploy
  script:
    - echo "Deploying application..."
    # Deploy-Skripte hier
  only:
    - main # Nur auf dem main branch deployen

Vorteile:

  • Nahtlose Integration in den GitLab-Workflow (Issues, Merge Requests, Registry).
  • Eingebaute Container Registry und Kubernetes-Integration.
  • Auto DevOps für automatische Pipeline-Erstellung.
  • Verfügbar als SaaS (GitLab.com) oder Self-Managed.

🛠️ Werkzeuge im Vergleich

KriteriumGitHub ActionsJenkinsGitLab CI
HostingCloud (GitHub)Self-Managed / CloudCloud (GitLab) / Self-Managed
KonfigurationYAMLGroovy (Jenkinsfile) / UIYAML
IntegrationSehr gut mit GitHubExtrem viele PluginsSehr gut mit GitLab
Kosten (Basis)Kostenlos für Public Repos, Freemium für PrivateOpen Source (kostenlos)Kostenlos für Public Repos, Freemium für Private

🔢 Pipeline Phasen

Eine typische CI/CD-Pipeline besteht aus mehreren Phasen:

  1. Source: Code-Änderungen werden ins Repository gepusht.
  2. Build: Der Code wird kompiliert, Artefakte werden erstellt.
  3. Test: Automatisierte Tests (Unit, Integration, etc.) werden ausgeführt.
  4. Deploy (Staging): Die Anwendung wird in einer Testumgebung bereitgestellt.
  5. Deploy (Production): (Nach manueller oder automatischer Freigabe) Die Anwendung wird in der Produktionsumgebung bereitgestellt.

👍 Best Practices

  • Pipeline as Code: Definiere Pipelines in versioniertem Code (z.B. YAML, Jenkinsfile).
  • Schnelles Feedback: Optimiere Pipelines für kurze Durchlaufzeiten.
  • Atomare Builds: Jeder Build sollte ein potenziell auslieferbares Inkrement sein.
  • Umfassende Testautomatisierung: Vertrauen in die Pipeline durch gute Testabdeckung.
  • Secrets Management: Sichere Verwaltung von Passwörtern und Schlüsseln.
  • Monitoring: Überwache sowohl die Pipeline als auch die deployte Anwendung.
  • Idempotente Deployments: Wiederholte Deployments sollten zum selben Ergebnis führen.

🛡️ DevSecOps in CI/CD

DevSecOps integriert Sicherheitspraktiken ("Security as Code") in jede Phase der CI/CD-Pipeline:

  • Static Application Security Testing (SAST): Code-Analyse auf Schwachstellen.
  • Software Composition Analysis (SCA): Überprüfung von Abhängigkeiten.
  • Dynamic Application Security Testing (DAST): Tests der laufenden Anwendung.
  • Container Image Scanning: Sicherheitsüberprüfung von Docker Images.
  • Infrastructure as Code (IaC) Scanning: Überprüfung von Terraform, CloudFormation etc.