Next:
Impressum
Github Actions
1
Impressum
2
Einleitung
2.1
Warum noch ein Automatisierungstool?
2.2
Der deklarative Ansatz
2.3
Das Ökosystem macht den Unterschied
2.4
Für wen ist dieses Material gedacht?
3
Konzepte und Terminologie
3.1
Workflows – Die Orchestrierungsebene
3.2
Events – Der Auslösemechanismus
3.3
Jobs – Logische Arbeitseinheiten
3.4
Steps – Die konkrete Arbeit
3.5
Actions – Wiederverwendbare Bausteine
3.6
Runner – Die Ausführungsumgebung
3.7
Das Zusammenspiel verstehen
4
CI/CD mit GitHub Actions
4.1
Continuous Integration – Früh und oft integrieren
4.2
Die Anatomie einer CI-Pipeline
4.3
Branch-Protection und Status Checks
4.4
Continuous Deployment – Der Weg in die Produktion
4.5
Deployment-Strategien und Rollout-Control
4.6
Environments und Approval Gates
4.7
Die CI/CD-Pipeline als Ganzes
4.8
Parallelität und Concurrency Control
4.9
Monitoring und Rollback-Strategien
4.10
Der kulturelle Aspekt
5
Workflow-Anatomie
5.1
Die vier Ebenen der Hierarchie
5.2
Der Auslösemechanismus: Events und Trigger
5.3
Der Workflow-Lebenszyklus
5.4
Jobs: Parallelität und Abhängigkeiten
5.5
Steps und Actions: Wo die Arbeit geschieht
5.6
Das Zusammenspiel verstehen
6
Daten im Workflow
6.1
Drei Arten von Variablen
6.2
Das Kontext-System
6.2.1
Der github-Kontext: Workflow-Metadaten
6.2.2
Der env-Kontext: Umgebungsvariablen im Ausdruck
6.2.3
Der job-Kontext: Laufzeitinformationen
6.2.4
Der steps-Kontext: Daten zwischen Steps teilen
6.2.5
Der needs-Kontext: Job-Abhängigkeiten nutzen
6.3
Ausdrücke: Daten dynamisch verarbeiten
6.3.1
Operatoren und Funktionen
6.3.2
Status-Funktionen
6.4
Secrets: Vertrauliche Daten schützen
6.4.1
Secret-Scoping und Precedence
6.4.2
Das GITHUB_TOKEN-Secret
6.5
Naming Conventions und Limits
6.6
Praktische Muster
6.7
Anti-Patterns vermeiden
7
Das Action-Ökosystem
7.1
Die drei Action-Typen
7.1.1
Docker Container Actions: Kontrolle über die Umgebung
7.1.2
JavaScript Actions: Geschwindigkeit und Portabilität
7.1.3
Composite Actions: Workflow-Fragmente wiederverwenden
7.2
Marketplace-Navigation: Actions finden und bewerten
7.2.1
Im Editor suchen
7.2.2
Bewertungskriterien für Third-Party Actions
7.2.3
Offizielle Actions als Baseline
7.3
Versionierung und Pinning: Stabilität vs. Updates
7.3.1
Tags: Convenient, aber beweglich
7.3.2
Commit SHAs: Maximal sicher, wartungsintensiv
7.3.3
Branches: Bleeding Edge, nur für Entwicklung
7.3.4
Dependabot für Action-Updates
7.4
Trust und Sicherheit: Risiken minimieren
7.4.1
Das Threat Model
7.4.2
Schutzmaßnahmen
7.4.3
CODEOWNERS für Workflow-Schutz
7.5
Eigene Action vs. bestehende nutzen: Die Entscheidungsmatrix
7.5.1
Wann bestehende Action nutzen
7.5.2
Wann eigene Action schreiben
7.5.3
Entscheidungstabelle
7.6
Praktische Muster und Anti-Patterns
7.6.1
Pattern: Action-Wrapper für konsistente Config
7.6.2
Pattern: Local Actions für Repo-spezifische Logik
7.6.3
Anti-Pattern: Blind updating zu latest
7.6.4
Anti-Pattern: Action-Fragmentierung
7.6.5
Anti-Pattern: Actions als Complexity-Dump
7.7
Der Lifecycle einer Action im Projekt
8
Jobs orchestrieren
8.1
Job-Abhängigkeiten: Sequenzen bauen mit needs
8.1.1
Mehrere Abhängigkeiten: Fan-In-Pattern
8.1.2
Daten zwischen Jobs teilen: Outputs und der needs-Kontext
8.1.3
Bedingte Fortsetzung: always() und failure()
8.2
Matrix-Strategien: Variationen parallel ausführen
8.2.1
Mehrdimensionale Matrizen: Kartesisches Produkt
8.2.2
Exclude: Ungewollte Kombinationen vermeiden
8.2.3
Include: Spezielle Kombinationen hinzufügen
8.2.4
Dynamische Matrizen: fromJSON() und Outputs
8.3
Fehlerbehandlung und Parallelität steuern
8.3.1
fail-fast: Abbrechen bei erstem Fehler
8.3.2
max-parallel: Parallelität begrenzen
8.3.3
continue-on-error: Optionale Jobs in Matrizen
8.4
Concurrency: Workflow-Runs begrenzen
8.4.1
Job-Level Concurrency
8.4.2
Concurrency-Groups clever nutzen
8.5
Bedingte Ausführung: if-Bedingungen auf Job-Ebene
8.5.1
Kontexte in if-Bedingungen
8.5.2
Bedingte Jobs basierend auf Changes
8.5.3
if mit Status-Funktionen kombiniert
8.6
Praktische Orchestrierungsmuster
8.6.1
Multi-Stage-Pipeline mit Fan-Out und Fan-In
8.6.2
Matrix mit bedingten Deployments
8.6.3
Dynamic Matrix für Monorepo
8.6.4
Kombinierte Concurrency und Matrix
9
Artefakte und Caching
9.1
Artefakte: Output zwischen Jobs weitergeben
9.1.1
Die Anatomie eines Artefakts
9.1.2
Immutability und ihre Konsequenzen
9.1.3
Datenaustausch zwischen Jobs
9.1.4
Glob-Patterns und Excludes
9.1.5
Compression-Level tunen
9.1.6
Retention und Lifecycle
9.1.7
Artifact-Outputs und Traceability
9.2
Dependency Caching: Dependencies nicht zweimal laden
9.2.1
Warum Caching?
9.2.2
Cache-Keys: Die Anatomie
9.2.3
Restore-Keys: Fuzzy Matching
9.2.4
Cache-Limits und Eviction
9.2.5
Granulares Caching mit restore und save
9.2.6
Setup-Actions mit integriertem Caching
9.3
Artefakte vs. Caching: Die Entscheidungsmatrix
9.4
Performance-Patterns für die Praxis
9.4.1
Pattern 1: Layered Caching für Monorepos
9.4.2
Pattern 2: Matrix-optimiertes Caching
9.4.3
Pattern 3: Conditional Artifact Upload
9.4.4
Pattern 4: Cache-Warming für selbst-gehostete Runner
9.4.5
Pattern 5: Cache-Keys mit Zeitkomponente
9.5
Praktische Hinweise und Stolpersteine
10
Workflows wiederverwenden
10.1
Reusable Workflows: Pipeline-Templates auf Job-Ebene
10.1.1
Das Konzept
10.1.2
Aufruf und Parameterübergabe
10.1.3
Secrets: Explizit oder inherit
10.1.4
Outputs: Daten zurückgeben
10.1.5
Matrix-Strategien mit Reusable Workflows
10.1.6
Verschachtelung und Limits
10.2
Composite Actions: Step-Sequenzen kapseln
10.2.1
Der Unterschied zu Reusable Workflows
10.2.2
Lokale vs. Shared Composite Actions
10.2.3
Inputs, Outputs und Environment
10.2.4
Was Composite Actions nicht können
10.3
Die Entscheidungsmatrix
10.4
Praktische Patterns
10.4.1
Pattern 1: Reusable Workflow mit lokalem Setup
10.4.2
Pattern 2: Composite Action als Wrapper
10.4.3
Pattern 3: Multi-Stage mit Reusable Workflows
10.4.4
Pattern 4: Dynamic Reusable Workflow Selection
10.5
Versionierung und Lifecycle-Management
10.5.1
Semantic Versioning für Shared Actions
10.5.2
Deprecation-Strategy
10.5.3
Breaking Changes kommunizieren
10.6
Wartbarkeit und Skalierung
10.6.1
Monorepo für Shared Workflows
10.6.2
Testing von Reusable Workflows
10.6.3
Dependency Management
10.7
Die richtige Abstraktion wählen
11
Deployment-Konzepte
11.1
Environments: Logische Deployment-Targets
11.1.1
Das Konzept
11.1.2
Environment-URLs: Statisch und dynamisch
11.2
Protection Rules: Das Sicherheitsnetz
11.2.1
Required Reviewers
11.2.2
Wait Timer
11.2.3
Deployment Branch Policies
11.2.4
Custom Deployment Protection Rules
11.3
Environment Secrets und Variables
11.3.1
Der Unterschied zu Repository Secrets
11.3.2
Environment Variables für Non-Secret-Config
11.4
Concurrency für serielle Deployments
11.4.1
Das Problem
11.4.2
Die Lösung: Deployment Concurrency
11.4.3
Environment-spezifische Concurrency Groups
11.4.4
Cancel-in-Progress für Non-Production
11.5
OIDC: Credential-freie Cloud-Authentifizierung
11.5.1
Das Problem mit Long-Lived Credentials
11.5.2
Die Lösung: OpenID Connect (OIDC)
11.5.3
OIDC in der Praxis: AWS
11.5.4
OIDC Token Claims
11.6
Multi-Environment-Workflows
11.6.1
Das klassische Pattern: Dev → Staging → Production
11.6.2
Conditional Production Deployment
11.6.3
Matrix-Deployments für Multi-Region
11.7
Deployment Tracking und History
11.7.1
Die Deployments-UI
11.7.2
Deployment Status API
11.7.3
Rollback-Strategien
11.8
Praktische Patterns und Anti-Patterns
11.8.1
Pattern 1: Approval + Automated Smoke Tests
11.8.2
Pattern 2: Canary mit Wait Timer
11.8.3
Anti-Pattern 1: Production ohne Protection Rules
11.8.4
Anti-Pattern 2: Secrets im Workflow-Code
11.8.5
Anti-Pattern 3: Parallel Production Deployments
11.9
Ein vollständiges Beispiel