Claude Code in GitHub Actions 2026: CI/CD mit KI-Agenten

Was wäre wenn deine CI-Pipeline nicht nur Tests ausführt — sondern Code reviewt, Bugs erklärt, Refactorings vorschlägt und PRs automatisch bewertet? Mit Claude Code in GitHub Actions ist das heute möglich.

Setup: ANTHROPIC_API_KEY in GitHub Secrets

Bevor du Claude Code in einem Workflow nutzen kannst, braucht GitHub Zugang zum Anthropic API Key:

  1. GitHub Repository → Settings → Secrets and variables → Actions
  2. New repository secret erstellen
  3. Name: ANTHROPIC_API_KEY, Value: dein API-Key von console.anthropic.com
Sicherheitshinweis: Nutze einen dedizierten API-Key für CI/CD — nicht denselben wie lokal. So kannst du ihn widerrufen ohne deinen Entwicklungs-Workflow zu unterbrechen. Setze Spending Limits auf console.anthropic.com.

Claude Code wird in GitHub Actions als CLI-Tool über npx aufgerufen:

# In jedem Workflow-Step verfügbar nach Setup:
- name: Run Claude Code
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
  run: |
    npx @anthropic-ai/claude-code --print "Dein Prompt hier"
--print Flag: Im nicht-interaktiven Modus (CI) immer --print nutzen. Claude gibt das Ergebnis direkt auf stdout aus und beendet sich — kein interaktives Terminal nötig.

Workflow 1: Automatisches PR-Review

claude-pr-review.yml

Wird bei jedem Pull Request ausgelöst. Claude liest den Diff und hinterlässt einen strukturierten Review-Kommentar direkt im PR.

name: Claude Code PR Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get PR Diff
        id: diff
        run: |
          git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff
          echo "lines=$(wc -l < /tmp/pr.diff)" >> $GITHUB_OUTPUT

      - name: Claude Code Review
        id: claude_review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          DIFF=$(cat /tmp/pr.diff | head -500)
          REVIEW=$(npx @anthropic-ai/claude-code --print \
            "Review this PR diff. Output format:
            ## Summary
            1-2 sentences what this PR does.
            ## Issues
            List critical issues (bugs, security) with file:line references.
            ## Suggestions
            Optional improvements (max 3).
            ## Verdict
            APPROVE / REQUEST_CHANGES / COMMENT

            PR Diff:
            $DIFF")
          echo "review<> $GITHUB_OUTPUT
          echo "$REVIEW" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Post Review Comment
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🤖 Claude Code Review\n\n${{ steps.claude_review.outputs.review }}`
            })

Workflow 2: KI-Testanalyse bei Fehlschlägen

claude-test-analysis.yml

Wenn Tests fehlschlagen, analysiert Claude die Fehlerausgabe und erklärt auf Deutsch was falsch ist und wie man es fixt. Spart Debugging-Zeit enorm.

name: Tests + Claude Failure Analysis

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - run: npm ci

      - name: Run Tests
        id: tests
        run: npm test 2>&1 | tee /tmp/test-output.txt; exit ${PIPESTATUS[0]}
        continue-on-error: true

      - name: Claude Failure Analysis
        if: steps.tests.outcome == 'failure'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          OUTPUT=$(tail -100 /tmp/test-output.txt)
          ANALYSIS=$(npx @anthropic-ai/claude-code --print \
            "Analysiere diese Test-Fehlerausgabe auf Deutsch.
            Erkläre: 1) Was ist das Problem? 2) In welcher Datei/Zeile? 3) Wie fixen?
            Sei konkret und kurz (max 200 Wörter).

            Test Output:
            $OUTPUT")
          echo "::error::$ANALYSIS"
          echo "## ❌ Test-Fehler Analyse" >> $GITHUB_STEP_SUMMARY
          echo "$ANALYSIS" >> $GITHUB_STEP_SUMMARY

      - name: Fail if Tests Failed
        if: steps.tests.outcome == 'failure'
        run: exit 1

Workflow 3: Security-Scan mit KI-Zusammenfassung

claude-security-scan.yml

Wöchentlich (oder bei jedem Push auf main) scannt Claude den Code auf OWASP Top 10 Patterns und erstellt einen priorisierten Security-Report.

name: Weekly Security Scan

on:
  schedule:
    - cron: '0 8 * * 1'  # Jeden Montag 08:00 UTC
  workflow_dispatch:  # Manuell auslösbar

jobs:
  security:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Collect Source Files
        run: |
          find src/ -name "*.js" -o -name "*.ts" -o -name "*.py" \
            | head -20 \
            | xargs cat > /tmp/source-combined.txt 2>/dev/null || true

      - name: Claude Security Review
        id: security
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          CODE=$(head -300 /tmp/source-combined.txt)
          REPORT=$(npx @anthropic-ai/claude-code --print \
            "Security Review dieser Codebasis. Prüfe auf:
            - SQL Injection, XSS, Command Injection
            - Hardcoded Secrets / API Keys
            - Unsichere Direktabhängigkeiten
            - Fehlende Input-Validierung

            Format: KRITISCH / WARNUNG / INFO mit Dateiname wenn möglich.
            Wenn nichts gefunden: 'Keine kritischen Issues gefunden.'

            Code:
            $CODE")
          echo "report<> $GITHUB_OUTPUT
          echo "$REPORT" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Create Security Issue
        uses: actions/github-script@v7
        with:
          script: |
            const report = `${{ steps.security.outputs.report }}`;
            if (report.includes('KRITISCH')) {
              github.rest.issues.create({
                owner: context.repo.owner,
                repo: context.repo.repo,
                title: `🔴 Security Scan: Kritische Issues gefunden (${new Date().toISOString().split('T')[0]})`,
                body: `## Automatischer Security Scan\n\n${report}`,
                labels: ['security', 'P0']
              });
            }

Kosten und Rate Limits

Typische Kosten pro Workflow-Run (Sonnet 4.6):
PR Review (500 Zeilen Diff): ~$0.02 — $0.05
Test-Analyse (100 Zeilen Output): ~$0.01 — $0.02
Security Scan (300 Zeilen Code): ~$0.03 — $0.08

Bei 10 PRs/Tag: ~$0.20 — $0.50/Tag → ~$6 — $15/Monat

Kostenbremsen einbauen:

# Nur bei PRs auf main/develop auslösen:
on:
  pull_request:
    branches: [main, develop]

# Kleines Diff-Limit setzen:
DIFF=$(cat /tmp/pr.diff | head -300)  # Max 300 Zeilen

# Haiku statt Sonnet für einfache Aufgaben (10x günstiger):
npx @anthropic-ai/claude-code --model claude-haiku-4-5 --print "..."

Best Practices

KI-gestützte Entwicklung vollständig beherrschen

Von GitHub Actions bis zu autonomen Multi-Agent-Systemen — unser Kurs zeigt die komplette Praxis mit echten Production-Beispielen.

14 Tage kostenlos starten →