GitHub Actions Cheatsheet - Standardstruktur und eine Liste der nützlichsten Aktionen

Ein wenig über häufige GitHub Actions und deren Struktur.

Inhaltsverzeichnis

GitHub Actions ist eine Automatisierungs- und CI/CD-Plattform innerhalb von GitHub, die verwendet wird, um Ihren Code basierend auf Ereignissen wie Pushes, Pull Requests oder nach einem Zeitplan zu erstellen, zu testen und zu deployen.

Zusätzlich zum Standard-GitHub können Sie GitHub Actions in einem selbstgehosteten Gitea-Server verwenden.

github actions flow

Diese Zusammenfassung behandelt die GitHub-Actions-Struktur, eine kurze Beschreibung und die häufigsten Aktionen, die in Open-Source- und kommerziellen Workflows verwendet werden. Aktionen umfassen offizielle, Community- und Drittanbieter-Tools und unterstützen die Automatisierung von Builds und Tests bis hin zum Deployment, Release-Management, QA und Benachrichtigungen.

Grundlegende Konfigurationsstruktur

GitHub Actions Workflows werden in YAML-Dateien definiert, die sich im Verzeichnis .github/workflows innerhalb des Repositorys befinden.

name: Workflow-Name
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Node.js einrichten
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Tests ausführen
        run: npm test
  • Der on-Block spezifiziert Auslöseereignisse.
  • Jeder job wird auf seinem eigenen Runner ausgeführt.
  • steps können Shell-Befehle ausführen oder wiederverwendbare Aktionen aufrufen.

Kernkomponenten von Workflows

Komponente Beschreibung
Workflow Automatisierter Prozess (YAML), der durch ein Ereignis ausgelöst wird
Ereignis Aktivität, die den Workflow auslöst (push, pull_request, etc.)
Job Serie von Schritten, die auf einem Runner ausgeführt werden, können sequenziell oder parallel ausgeführt werden
Schritt Jeder Befehl oder Aktion in einem Job
Runner VM oder Container, in dem Jobs ausgeführt werden
Aktion Wiederverwendbare Erweiterung/Zusatz, die eine Aufgabe kapselt

Auslöseereignisse

  • push
  • pull_request
  • schedule (unter Verwendung der Cron-Syntax)
  • workflow_dispatch (manueller Auslöser, ermöglicht Eingabeparameter)
  • release, issue, etc.

Beispiel:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Bereitstellungsumgebung'
        required: true
        default: 'production'
        type: string

Nützliche integrierte Aktionen

Aktion Zweck Häufige Parameter
actions/checkout Repository-Code auschecken ref, token, submodules, persist-credentials
actions/setup-node Node.js-Umgebung einrichten node-version, cache, architecture, check-latest
actions/setup-python Python einrichten python-version, architecture
actions/cache Abhängigkeiten zwischenspeichern path, key, restore-keys
docker/build-push-action Docker-Images erstellen & pushen context, file, platforms, tags, push, build-args
actions/upload-artifact Build-Artifacts hochladen name, path, if-no-files-found
actions/download-artifact Artifacts herunterladen name, path
github/email-actions E-Mail-Benachrichtigungen senden to, subject, content, attachments
peter-evans/create-pull-request PRs über Workflow erstellen branch, title, body, labels, base
actions/github-script Beliebigen JavaScript in Ihrem Workflow ausführen script, github-token

Aktion-Parameter

Allgemeine Parameter für jeden Aktionaufruf:

- name: Eine Aktion oder ein Schritt
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: Argumente, die an die Aktion übergeben werden (siehe Dokumentation der Aktion für alle Optionen)
  • env: Umgebungsvariablen für den Schritt
  • if: bedingte Ausführung
  • run: Shell-Befehle (wenn keine Aktion verwendet wird)
  • shell: Shell, die zum Ausführen des Schritts verwendet wird
  • continue-on-error: Fortfahren, auch wenn der Schritt fehlschlägt

Definieren von benutzerdefinierten Aktionseingaben

In Ihren Aktionsmetadaten (action.yml):

inputs:
  example-input:
    description: 'Eine Beispiel-Eingabe'
    required: false
    default: 'default-value'

Wenn in einem Workflow verwendet:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

Wird als Umgebungsvariable INPUT_EXAMPLE_INPUT abgerufen, wenn die Aktion ausgeführt wird.

Beispiel: Workflow mit manuellen Parametern

name: Bereitstellen
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Bereitstellungsumgebung'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Code auschecken
        uses: actions/checkout@v4
      - name: In Umgebung bereitstellen
        run: echo "Bereitstellen in ${{ github.event.inputs.environment }}"

Aktion Marketplace

  • Tausende wiederverwendbare Aktionen sind im GitHub Marketplace verfügbar.
  • Kategorien umfassen: Cloud-Bereitstellungen, Benachrichtigungstools, Test-Frameworks, Code-Analysen und mehr.
  • Erkunden Sie: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact und viele andere.

Schnelle Tipps

  • Platzieren Sie Workflow-Dateien in .github/workflows.
  • Verwenden Sie workflow_dispatch mit inputs für manuelle und parametrisierte Ausführungen.
  • Verwenden Sie die cache-Aktion, um die Installation von Abhängigkeiten zu beschleunigen.
  • Verwenden Sie die Job-matrix, um mehrere OS/Laufzeitversionen zu testen.
  • Verwenden Sie Geheimnisse für sensible Daten, die als ${{ secrets.SECRET_NAME }} referenziert werden.

Dieses Cheat-Sheet behandelt die Grundlagen der Verwendung, Konfiguration und Erweiterung von GitHub Actions für Automatisierung, CI/CD und mehr. Für weitere Details und Updates sollten Sie immer die offizielle GitHub-Dokumentation und die Aktions-Repositorys prüfen.

Häufig verwendete GitHub Actions

Hier ist eine praktische Liste von häufig verwendeten GitHub Actions, die bei der Automatisierung von CI/CD, Tests, Builds, Bereitstellungen und Workflow-Aufgaben helfen:

Offizielle Kern-Actions

Aktion Zweck Wichtige Beispielparameter
actions/checkout Checkt Repository-Code aus ref, submodules
actions/setup-node Einrichtung der Node.js-Umgebung node-version, cache
actions/setup-python Einrichtung der Python-Umgebung python-version
actions/setup-java Einrichtung von Java JDK distribution, java-version
actions/cache Caching von Abhängigkeiten und Build-Ergebnissen path, key, restore-keys
actions/upload-artifact Hochladen von Build-Artifakten name, path
actions/download-artifact Herunterladen von Artifakten aus dem Workflow name, path
actions/github-script Ausführen von JavaScript mit GitHub-Kontext und API script
actions/create-release Erstellen eines GitHub-Releases tag_name, release_name
actions/upload-release-asset Hochladen von Assets zu einem Release upload_url, asset_path
actions/labeler Automatisches Anwenden von Labels auf Issues/PRs repo-token, configuration-path

Beliebte Community- und Drittanbieter-Actions

Aktion Zweck
docker/build-push-action Docker-Images bauen und hochladen
actions/setup-go Einrichtung der Go-Umgebung
super-linter/super-linter Universelles automatisiertes Code-Linting
trufflesecurity/trufflehog Scannen auf Geheimnisse und Anmeldedaten
peaceiris/actions-gh-pages Bereitstellung statischer Seiten für GitHub Pages
JamesIves/github-pages-deploy-action Projekte für GitHub Pages bereitstellen
peter-evans/create-pull-request Pull-Requests automatisch erstellen
softprops/action-gh-release GitHub-Releases erstellen und hochladen
ad-m/github-push-action Änderungen zurück zum GitHub-Repository pushen
actions/setup-dotnet Einrichtung von .NET SDK
azure/login Authentifizierung bei Azure
google-github-actions/auth Authentifizierung bei Google Cloud

Test-, QA- und Berichts-Actions

Aktion Zweck
actions/setup-ruby Einrichtung der Ruby-Umgebung
codecov/codecov-action Hochladen von Code-Abdeckungsberichten an Codecov
coverallsapp/github-action Hochladen von Abdeckungs-Ergebnissen an Coveralls
dorny/test-reporter Anhängen von Testergebnissen an GitHub Checks
stefanzweifel/git-auto-commit-action Automatisches Committen und Pushen von Dateiänderungen

Bereitstellungs- und Benachrichtigungs-Actions

Aktion Zweck
appleboy/scp-action Hochladen von Dateien mit SCP
SamKirkland/FTP-Deploy-Action Bereitstellen von Dateien über FTP/FTPS
cypress-io/github-action Ausführen von Cypress End-to-End-Tests
slackapi/slack-github-action Senden von Nachrichten an Slack
dawidd6/action-send-mail Senden von E-Mails während Workflow-Läufen

Utility- und Workflow-Management-Actions

Aktion Zweck
peter-evans/repository-dispatch Auslösen externer Repository-Workflows
fregante/setup-git-user Festlegen von Git-Benutzeranmeldedaten für Commits
andymckay/labeler Labeln von Issues und PRs basierend auf Pfaden
actions/configure-pages Konfigurieren der Veröffentlichung auf GitHub Pages
EndBug/add-and-commit Hinzufügen & Committen von Dateien innerhalb eines Workflows
dangoslen/changelog-enforcer Überprüfen, ob ein Changelog für PRs aktualisiert wurde

Wie man mehr findet

Es gibt viele GitHub Actions, die Workflow-Automatisierung ermöglichen, wie z.B. automatisierte Tests, Bereitstellung in die Produktion, Benachrichtigungen und Integrationen mit anderen Diensten. Der GitHub Marketplace listet Tausende von Actions in Kategorien wie Tests, Sicherheit, Bereitstellung, Benachrichtigungen, Code-Qualität und Integrationen auf. Kuratierte Listen wie “Awesome Actions” sind auch eine großartige Inspirationsquelle und zum Entdecken.