78 Dokumentationen verfügbar

Wissensdatenbank

GitHub Actions CI CD Workflow

Zuletzt aktualisiert: 11.01.2026 um 12:06 Uhr

GitHub Actions: CI/CD Workflows

GitHub Actions ermöglicht automatisierte Workflows direkt im Repository. Testen, bauen und deployen Sie Code automatisch bei jedem Push oder Pull Request.

Grundkonzepte

  • Workflow: Automatisierter Prozess (YAML-Datei)
  • Job: Gruppe von Steps auf einem Runner
  • Step: Einzelne Aufgabe (Befehl oder Action)
  • Action: Wiederverwendbare Komponente
  • Runner: Server der den Workflow ausführt

Erster Workflow

# .github/workflows/ci.yml
name: CI Pipeline

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

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
      - name: Code auschecken
        uses: actions/checkout@v4
      
      - name: Node.js einrichten
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      
      - name: Abhängigkeiten installieren
        run: npm ci
      
      - name: Tests ausführen
        run: npm test
      
      - name: Build erstellen
        run: npm run build

Trigger-Events

on:
  # Bei Push
  push:
    branches: [ main ]
    paths:
      - 'src/**'
      - '!**.md'
  
  # Bei Pull Request
  pull_request:
    types: [ opened, synchronize ]
  
  # Zeitgesteuert (Cron)
  schedule:
    - cron: '0 2 * * *'  # Täglich 2 Uhr
  
  # Manuell
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment-Umgebung'
        required: true
        default: 'staging'

Matrix-Builds

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [18, 20, 22]
    
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test

Secrets verwenden

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy via SSH
        env:
          SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          SERVER: ${{ secrets.SERVER_IP }}
        run: |
          echo "$SSH_KEY" > key.pem
          chmod 600 key.pem
          ssh -i key.pem user@$SERVER "cd /app && git pull"

Artifacts speichern

steps:
  - name: Build
    run: npm run build
  
  - name: Artifact hochladen
    uses: actions/upload-artifact@v4
    with:
      name: build-output
      path: dist/
      retention-days: 7

Docker Image bauen & pushen

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Docker Hub Login
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USER }}
          password: ${{ secrets.DOCKER_TOKEN }}
      
      - name: Build und Push
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: user/app:latest

Deployment-Workflow

name: Deploy to Production

on:
  release:
    types: [ published ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    
    steps:
      - uses: actions/checkout@v4
      
      - name: Deploy to Server
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /var/www/app
            git pull origin main
            npm install --production
            pm2 restart app

Nützliche Actions

Action Beschreibung
actions/checkout Repository auschecken
actions/setup-node Node.js einrichten
actions/cache Abhängigkeiten cachen
docker/build-push-action Docker Images
appleboy/ssh-action SSH-Befehle

Weitere Hilfe