# GitHub Actions: Workflow-Automatisierung & RZ-Integration
TL;DR / Management Summary GitHub Actions ist die native Automatisierungs-Plattform von GitHub. Sie ermöglicht es, jeden “Event” (Push, Pull Request, Release) als Trigger für komplexe Workflows zu nutzen. Ein Senior Admin nutzt GitHub Actions zur Validierung von Infrastruktur-Code und bindet sein lokales Proxmox-Rechenzentrum via Self-hosted Runners an. Dies erlaubt es, interne Server-Wartungen direkt aus dem GitHub-Frontend heraus zu steuern, ohne Ports zum Internet öffnen zu müssen.
# 1. Die Anatomie eines Workflows
Alles unter .github/workflows/.
Die Konfiguration erfolgt in YAML-Dateien:
name: PVE-Linter
on: [push]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Ansible Lint
run: ansible-lint playbooks/*.yml
# 2. Self-hosted Runners in Proxmox
Die Brücke ins eigene Netz.
Normalerweise laufen GitHub Actions in der Microsoft-Cloud. Wenn Sie aber lokale Proxmox-VMs (Artikel 668) konfigurieren wollen, brauchen Sie Zugriff aufs LAN.
- Technik: Sie installieren eine kleine Agent-Software in einem LXC-Container (Artikel 673).
- Kommunikation: Der Runner baut eine ausgehende HTTPS-Verbindung zu GitHub auf (kein Inbound-Port nötig!).
- Vorteil: Maximale Sicherheit für interne API-Token und Passwörter.
# 3. Deep Dive: GitHub Secrets & Environment Protection
Verschlüsselte Variablen.
GitHub Secrets speichern Ihre API-Keys (z.B. für Proxmox oder OPNsense).
- Aktion: Hinterlegen Sie
PROXMOX_TOKENin den Repository Settings. - Environment Protection: Konfigurieren Sie “Reviewers” für den
ProductionWorkspace. - Nutzen: Das Deployment in die echte Produktion startet erst, wenn ein Senior Admin in der GitHub GUI auf “Approve” klickt.
# 4. Day-2 Operations: Action Marketplace
Automatisierung von der Stange.
Nutzen Sie fertige Aktionen der Community:
hashicorp/setup-terraform: Installiert die passende Terraform-Version im Runner.appleboy/ssh-action: Führt Befehle via SSH auf Remote-Servern aus.- Wichtig: Prüfen Sie die Berechtigungen von Drittanbieter-Actions (Artikel 796).
# 5. Troubleshooting & “War Stories”
Wenn die Action ins Leere läuft.
# Top 3 Fehlerbilder
-
Symptom: Runner verliert die Verbindung (“Offline”).
- Ursache: Der LXC-Container in Proxmox wurde durch den OOM-Killer beendet oder die Firewall blockiert den Websocket-Traffic.
- Lösung: Ressourcen-Limits prüfen (Artikel 708).
-
Symptom:
github_tokenhat nicht genug Rechte.- Ursache: Standardmäßig hat der automatische Token nur Lese-Rechte.
- Fix:
permissions: contents: writein der YAML hinzufügen.
-
Symptom: Workflow schlägt fehl mit “Architecture mismatch”.
- Ursache: Sie nutzen einen ARM-basierten Runner für x86-Binaries.
# “War Story”: Der “Verschollene” API-Key
Ein Admin nutzte GitHub Actions, um DNS-Records bei Cloudflare zu aktualisieren. Er vergaß, den API-Key als Secret zu markieren und schrieb ihn fest in das Skript. Das Ereignis: Er machte das Repository “Public”, um ein Problem im Forum zu teilen. Das Ergebnis: Innerhalb von 60 Sekunden wurde der Key von einem Bot gescannt. Der Angreifer änderte alle DNS-Einträge der Firma auf eine Phishing-Seite. Lehre: Nutzen Sie nie Hardcoded-Secrets. GitHub bietet mit dem Secret Scanning ein Feature, das solche Fehler erkennt – aktivieren Sie es zwingend für alle Repositories!
# 6. Monitoring & Reporting
Workflow Analytics.
# Action Usage Metrics
Überwachen Sie die Laufzeit Ihrer Workflows:
- KPI:
Workflow Duration. - KPI:
Runner Queue Time. Wenn diese steigt, brauchen Sie mehr LXC-Runner in Ihrem Cluster.
# 7. Fazit & Empfehlung
GitHub Actions ist die einfachste Methode für moderne Automatisierung.
- Empfehlung: Nutzen Sie GitHub Actions für alle Open-Source Projekte und interne Tools.
- Wichtig: Verwenden Sie für Ihre Self-hosted Runner immer Ephemeral VMs (Wegwerf-Instanzen), die nach jedem Lauf gelöscht werden, um “Leftover”-Daten und Malware-Persistenz zu vermeiden.
# Anhang: Cheatsheet (Workflow Triggers)
| Trigger | Beschreibung |
|---|---|
push |
Bei jedem Code-Commit |
pull_request |
Bei Erstellung/Update eines PR |
schedule |
Zeitgesteuert (Cron-Syntax) |
workflow_dispatch |
Manueller Start in der GUI |