GitHub-Aktionen ist die beliebteste CI/CD-Plattform im Jahr 2026 – integriert in GitHub, mit einem riesigen Marktplatz vorgefertigter Aktionen. Dieser Leitfaden erstellt eine vollständige Pipeline vom Testen bis zur Bereitstellung, vollständig in YAML-Dateien in Ihrem Repository.
📋 Table of Contents
- So funktionieren GitHub-Aktionen
- Grundlegender CI-Workflow
- Matrix-Builds (Testen mehrerer Versionen)
- Caching-Abhängigkeiten
- Docker-Images erstellen und pushen
- Bereitstellung mit Umgebungen und Genehmigungen
- Geheimnisse verwalten
- Wiederverwendbare Workflows und zusammengesetzte Aktionen
- Optimierungstipps
- Häufig gestellte Fragen
- Fazit
So funktionieren GitHub-Aktionen
Arbeitsabläufe leben in.github/workflows/*.yml. Jeder Workflow wird bei Ereignissen (Push, Pull Request, Zeitplan) ausgelöst und enthältArbeitsplätze die auflaufen Läufer (Von GitHub gehostete VMs). Jobs enthaltenSchritte – entweder Shell-Befehle oder wiederverwendbareAktionen.
Grundlegender CI-Workflow
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build
Matrix-Builds (Testen mehrerer Versionen)
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm ci
- run: npm test
# Runs 9 combinations (3 OS x 3 Node versions) in parallel
Caching-Abhängigkeiten
steps:
- uses: actions/checkout@v4
# setup-node has built-in caching
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm' # caches ~/.npm automatically
# Or cache manually for other tools
- uses: actions/cache@v4
with:
path: |
~/.cache/pip
.venv
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
Docker-Images erstellen und pushen
name: Build and Push
on:
push:
branches: [main]
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
Bereitstellung mit Umgebungen und Genehmigungen
jobs:
deploy:
runs-on: ubuntu-latest
needs: [test] # only deploy if tests pass
environment:
name: production # can require manual approval in repo settings
url: https://example.com
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /app
docker compose pull
docker compose up -d
Geheimnisse verwalten
Speichern Sie Geheimnisse inRepo-Einstellungen, dann Geheimnisse und Variablen, dann Aktionen. Referenzieren Sie sie als${{ secrets.NAME }}. Sie werden in Protokollen maskiert und niemals angezeigt. Verwenden Sie umgebungsspezifische Geheimnisse für die Bereitstellung und Produktion.
steps:
- run: ./deploy.sh
env:
API_KEY: ${{ secrets.API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
Wiederverwendbare Workflows und zusammengesetzte Aktionen
# Call a reusable workflow to avoid duplication
jobs:
call-shared:
uses: ./.github/workflows/shared-test.yml
with:
node-version: '20'
secrets: inherit
# shared-test.yml declares:
# on:
# workflow_call:
# inputs:
# node-version:
# type: string
Optimierungstipps
- Verwenden Sie
needs:um die Auftragsreihenfolge zu steuern und unabhängige Aufträge parallel auszuführen - Cache-Abhängigkeiten – die größte Beschleunigung für die meisten Pipelines
- Veraltete Ausführungen abbrechen:
concurrency: { group: ${{ github.ref }}, cancel-in-progress: true } - Verwenden Sie Pfadfilter: Workflows nur ausführen, wenn sich relevante Dateien ändern
- Pin-Aktionsversionen (
@v4) für Stabilität und Sicherheit
Häufig gestellte Fragen
F: GitHub Actions vs. GitLab CI vs. Jenkins?
A: GitHub-Aktionen, wenn Ihr Code auf GitHub ist – tiefe Integration und ein riesiger Marktplatz. GitLab CI für von GitLab gehosteten Code. Jenkins für maximale Kontrolle/Selbsthosting oder komplexe Unternehmensanforderungen. Aktionen sind für GitHub-Projekte am einfachsten.
F: Ist GitHub Actions kostenlos?
A: Öffentliche Repos erhalten unbegrenzte Freiminuten. Private Repos erhalten ein monatliches kostenloses Kontingent und zahlen dann pro Minute. Für die meisten kleinen Projekte und Open Source ist es praktisch kostenlos.
F: Wie beschleunige ich langsame Arbeitsabläufe?
A: Cache-Abhängigkeiten (größter Gewinn), Jobs parallel mitneeds:ausführen , verwenden Sie Pfadfilter, um irrelevante Ausführungen zu überspringen und veraltete Ausführungen mit Parallelitätsgruppen abzubrechen. Profilieren Sie zuerst, welche Schritte am langsamsten sind.
F: Wie benötige ich eine Genehmigung, bevor die Produktion bereitgestellt wird?
A: Verwenden Sie GitHub-Umgebungen mit den erforderlichen Prüfern. Konfigurieren Sieproduction Umgebung in den Repo-Einstellungen so festlegen, dass eine manuelle Genehmigung erforderlich ist – der Bereitstellungsjob wird angehalten, bis ein genehmigter Prüfer dies bestätigt.
F: Kann ich Workflows nach einem Zeitplan ausführen?
A: Ja – verwenden Sieon: schedule: - cron: '0 0 * * *' für geplante Läufe (nächtliche Builds, Bereinigungsjobs, regelmäßige Überprüfungen). Die Cron-Syntax steuert das Timing.
Fazit
GitHub Actions macht CI/CD mit allem, was in YAML in Ihrem Repo definiert ist, zugänglich. Dieser Leitfaden behandelt das Wesentliche – CI-Workflows mit Matrix-Builds, Abhängigkeits-Caching, Docker-Image-Erstellung und Bereitstellung mit Umgebungsgenehmigungen. Der riesige Markt an vorgefertigten Aktionen bedeutet, dass Sie selten Dinge von Grund auf neu schreiben. Beginnen Sie mit einem einfachen Test-Workflow, fügen Sie inkrementell Build- und Deployment-Jobs hinzu, puffern Sie intensiv, um die Geschwindigkeit zu erhöhen, und nutzen Sie Umgebungen, um Produktionsbereitstellungen zu steuern. Es ist der schnellste Weg zu professionellem CI/CD für GitHub-gehostete Projekte.
🔗 Share this article
✍️ Leave a Comment