CI/CD-Pipelines mit GitHub Actions erklärt

DevOps2026-09-12TryQuickToolBox

Du hast gerade einen Commit gepusht und führst nun manuell Tests aus, baust die App und lädst Dateien auf einen Server hoch. Es funktioniert, aber es ist langsam, fehleranfällig und skaliert nicht. Hier kommen CI/CD-Pipelines ins Spiel.

In diesem Leitfaden erklären wir die CI/CD-Konzepte und zeigen dir, wie du eine echte Pipeline mit GitHub Actions erstellst. Am Ende wirst du verstehen, wie du Tests, Builds und Deployments für jedes Projekt automatisieren kannst.

Was ist CI/CD?

CI (Continuous Integration) ist die Praxis, Codeänderungen automatisch zu testen und in einen gemeinsamen Branch zu integrieren. Jeder Push löst einen Build- und Testlauf aus, wodurch Integrationsprobleme frühzeitig erkannt werden.

CD (Continuous Delivery/Deployment) erweitert CI, indem es deine Anwendung automatisch für die Produktion vorbereitet (und optional bereitstellt). Continuous Delivery bedeutet, dass der Code immer bereit für das Deployment ist; Continuous Deployment bedeutet, dass er automatisch bereitgestellt wird.

Zusammen bilden CI/CD eine Pipeline: eine Reihe automatisierter Schritte, die deinen Code vom Commit bis zur Produktion bringen.

Warum GitHub Actions für CI/CD verwenden?

GitHub Actions ist eine CI/CD-Plattform, die in GitHub integriert ist. Sie ist kostenlos für öffentliche Repositories und bietet großzügige Minuten für private. Die wichtigsten Vorteile:

Kernkonzepte von GitHub Actions

Bevor du deinen ersten Workflow schreibst, verstehe diese Begriffe:

Begriff Beschreibung
Workflow Ein automatisierter Prozess, der in einer YAML-Datei unter .github/workflows/ definiert ist.
Event Ein Auslöser, der einen Workflow startet (z. B. push, pull_request).
Job Eine Reihe von Schritten, die auf demselben Runner ausgeführt werden. Jobs laufen standardmäßig parallel.
Step Eine einzelne Aufgabe innerhalb eines Jobs. Kann einen Befehl ausführen oder eine Action verwenden.
Action Eine wiederverwendbare Codeeinheit (z. B. actions/checkout), die du in einen Step einbinden kannst.
Runner Eine virtuelle Maschine, die Jobs ausführt (Ubuntu, Windows, macOS).

Deine erste CI-Pipeline erstellen

Lass uns einen einfachen CI-Workflow für ein Node.js-Projekt erstellen. Er führt bei jedem Push und Pull Request auf den Main-Branch Tests aus.

Erstelle .github/workflows/ci.yml:

name: CI

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

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test

Dieser Workflow:

  1. Wird bei Pushes und PRs auf main ausgelöst.
  2. Führt einen Job namens test auf dem neuesten Ubuntu-Runner aus.
  3. Verwendet eine Matrix, um gegen Node.js 18 und 20 zu testen.
  4. Checkt den Code aus, richtet Node ein, installiert Abhängigkeiten und führt Tests aus.

Pushe diese Datei und beobachte den Actions-Tab. Du wirst zwei parallele Jobs sehen (einer pro Node-Version). Wenn ein Test fehlschlägt, schlägt der Workflow fehl und GitHub benachrichtigt dich.

Continuous Deployment hinzufügen

CI ist großartig, aber CD ist der Bereich, in dem die Automatisierung glänzt. Erweitern wir den Workflow, um nach erfolgreichen Tests auf dem Main-Branch auf einen Server bereitzustellen.

Wir fügen einen deploy-Job hinzu, der von test abhängt und nur bei Pushes auf main ausgeführt wird.

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Deploy to server
      uses: appleboy/ssh-action@v1.0.0
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --production
          pm2 restart myapp

Wichtige Punkte:

Dieses Muster funktioniert für viele Deployment-Ziele: SSH, Docker-Registries, Cloud-Plattformen (AWS, Vercel, Netlify) oder Kubernetes.

Best Practices für CI/CD mit GitHub Actions

Fehlgeschlagene Workflows debuggen

Wenn ein Workflow fehlschlägt, zeigt GitHub Logs für jeden Schritt an. Häufige Probleme sind:

Du kannst auch Debug-Logging aktivieren, indem du das Repository-Secret ACTIONS_STEP_DEBUG auf true setzt.

FAQ

Was ist der Unterschied zwischen CI und CD?

CI automatisiert das Testen und die Integration von Codeänderungen. CD automatisiert die Bereitstellung oder das Deployment dieser Änderungen in einer Umgebung. CI stellt die Codequalität sicher; CD stellt sicher, dass der Code schnell und zuverlässig zu den Nutzern gelangt.

Ist GitHub Actions kostenlos?

GitHub Actions ist kostenlos für öffentliche Repositories. Für private Repositories erhältst du ein monatliches Kontingent an kostenlosen Minuten (z. B. 2.000 Minuten für Free-Konten) und zahlst für zusätzliche Nutzung. Self-hosted Runner sind ebenfalls eine Option.

Kann ich GitHub Actions für Nicht-GitHub-Projekte verwenden?

Ja, GitHub Actions kann jede Kommandozeilen-Tools ausführen. Du kannst es verwenden, um Projekte zu bauen und bereitzustellen, die anderswo gehostet werden, solange der Code auf GitHub liegt oder du Actions zum Abrufen verwendest.

Bereit, deine CI/CD zu optimieren? Beginne damit, deine Tests mit GitHub Actions zu automatisieren. Für eine schnelle Möglichkeit, Deployment-Logs zu analysieren, probiere unseren Nginx Log Analyzer, um Fehler und Performance-Probleme nach jedem Deployment zu erkennen.