GitHub Actions: Tutorial für Einsteiger – Basics & Beispiele
In diesem Tutorial möchte ich dir GitHub Actions vorstellen und zeigen, wie du GitHub Actions einsetzten kannst, um CI/CD Pipelines zu erstellen, um langweilige, repetitive Aufgaben zu automatisieren.
GitHub Actions ist ein vielseitiges Werkzeug, mit dem Entwickler ihre Softwareentwicklungsprozesse effizienter gestalten können. Hauptsächlich kannst du GitHub Actions als CI/CD Pipeline (CI = Continuous Integration, CD = Continuous Delivery) einsetzen und ist daher mit z.B. Jenkins, CircleCI oder Azure DevOps vergleichbar.
Ich selber nutze GitHub Actions eigentlich in jedem Repo, welches ich in GitHub angelegt habe. Unter anderem zum Deployment von Änderungen in diesem Blog oder als komplette CI/CD Pipeline meiner JavaScript Challenge Plattform.
Was ist GitHub Actions?
GitHub Actions ist ein leistungsstarkes Automatisierungstool, das direkt in GitHub integriert ist und es Entwicklern ermöglicht, automatisierte Workflows für ihre Softwareentwicklungsprojekte zu erstellen. Mit GitHub Actions lassen sich CI/CD Pipelines einrichten, Tests durchführen, Code analysieren und vieles mehr. Es bietet eine flexible und anpassbare Möglichkeit, Entwicklungsprozesse zu automatisieren, indem verschiedene Aktionen und Workflows kombiniert werden.
Genauer gesagt kannst du eigentlich alles ausführen, was du dir so ausdenken kannst: Ausführen von Unit-Tests, Deployment in eine VM, Deployment in ein Kubernetes Cluster, Erstellen/Bauen von Apps, Deployment in verschiedenste Dienste aller gängigen Cloud Provider, Code Security Scans, etc. Diese Liste kann man quasi noch unendlich erweitern 😉
Was verbirgt sich hinter den Begriffen CI/CD (Pipeline, Tools) und DevOps eigentlich?
Ein Workflow in GitHub Actions besteht aus einer oder mehreren Aktionen, die als Schritte in einer definierten Reihenfolge ausgeführt werden. Diese Workflows werden in YAML-Dateien definiert und im Verzeichnis .github/workflows
des Repositorys gespeichert.
Der Screenshot ist aus der Ausführung des GitHub Actions Workflows dieses Blogs entstanden, wobei Änderungen im Repository automatisch auf dem Production Server ausgerollt werden. Sollte ein Fehler auftreten, wird ein Rollback auf die letzte stabile Version ausgeführt.
Und was kostet mich der Spaß? Nichts! GitHub stellt den Service für öffentliche Repos komplett kostenfrei zur Verfügung und auch für private Repositorys gibt es ein großzügiges freies Kontingent, welches eine ganze Weile reicht und sich jeden Monat zurücksetzt.
Erstellen eines GitHub Actions Workflows
Um einen neuen GitHub Actions Workflow anzulegen, kannst du einfach in deinem GitHub Repo den Tab „Actions“ nutzen oder alternativ eine YAML-Datei im Pfad .github/workflows
erstellen.
Um zu verstehen, wie ein Workflow in GitHub Actions aufgebaut ist, habe ich hier eine ganz einfache CI-Pipeline für dich, die ich Schritt für Schritt erklären werde.
name: CI Pipeline on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '20' - name: Install dependencies run: npm install - name: Run tests run: npm test
Was genau passiert hier? Die Pipeline wird jedes mal getriggert, wenn ein Push im Repository ausgeführt wird. Mehr zu Triggern und Events erfährst du später in diesem GitHub Actions Tutorial. Gehen wir die Schritte einzeln durch:
- Check out repository: Dieser Schritt checkt den Code im Repository aus.
- Set up Node.js: Setzt Node.js in der Version 20 in der aktuellen Umgebung auf.
- Install dependencies: Führt den Befehl
npm install
aus, um die Projektabhängigkeiten zu installieren. - Run tests: Führt den Befehl
npm test
aus, um die Tests des Projekts auszuführen.
An diesem Beispiel kannst du den grundlegenden Aufbau einer Pipeline erkennen. Pro GitHub Actions Workflow kannst du beliebig viele Schritte (steps) und Jobs ausführen.
Triggers & Events
GitHub Actions bietet eine flexible Möglichkeit, Workflows basierend auf verschiedenen Triggern und Ereignissen auszuführen. Diese Trigger bestimmen, wann ein Workflow gestartet wird und können auf eine Vielzahl von GitHub-Ereignissen reagieren, wie z.B. Code-Änderungen, Issues und Zeitpläne.
Code-Änderungen/neue Commits auf einem bestimmten Branch:
Dieser Workflow wird nur ausgeführt, wenn ein Commit in den develop
-Branch gepusht wird.
on: push: branches: - develop
Tags, die einem bestimmten Muster entsprechen:
Hier wird der Workflow nur gestartet, wenn ein Tag, der mit release-
beginnt (z. B. release-1.0.0
), gepusht wird.
on: push: tags: - 'release-*'
Regelmäßige Ausführung:
Dieser Workflow wird jeden Montag um 12 Uhr mittags ausgeführt.
on: schedule: - cron: '0 12 * * 1'
Sehr nützlich ist auch das Ausführen von z.B. Tests und Linting, bevor ein Pull Request bestätigt werden kann.
GitHub Marketplace
Nicht alle Actions musst du selber programmieren. Daher ist er GitHub Marketplace eine zentrale Anlaufstelle für vordefinierte Actions, die du in deine Workflows integrieren kannst, um den Entwicklungsprozess zu beschleunigen und zu vereinfachen. Hier findest du eine Vielzahl von Actions, die von der Community und GitHub selbst erstellt wurden, um gängige Aufgaben wie Testing, Codeanalyse und vieles mehr zu automatisieren.
Angenommen, du möchtest eine Action verwenden, die deinen Code automatisch auf Formatierungsfehler überprüft. Eine beliebte Action für diesen Zweck ist die Prettier-Action, die den Code mit Prettier formatiert.
Hier ist ein Beispiel, wie du diese Action in deinen Workflow integrieren kannst:
name: Format Code on: [push, pull_request] jobs: format: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v2 - name: Run Prettier uses: creyD/prettier_action@v3.3 with: prettier_options: --write **/*.js
Dieser Workflow wird bei jedem Push und jeder Pull-Request ausgeführt und überprüft, ob der JavaScript-Code korrekt formatiert ist. Die prettier_action
wird aus dem GitHub Marketplace eingebunden und mit den gewünschten Optionen konfiguriert.
Die Nutzung des GitHub Marketplace bietet erhebliche Vorteile, wie z.B. Zeitersparnis, da man sofort auf zahlreiche vorgefertigte Actions zugreifen kann, ohne eigene Lösungen entwickeln zu müssen. Darüber hinaus gewährleisten die regelmäßige Wartung und Aktualisierung der Actions eine hohe Qualität und Sicherheit. Durch die Unterstützung der GitHub Community profitierst du von ständig verbesserten und neuen Actions.
Weitere nützliche Actions
- CodeQL Analysis: Automatisiere die Code-Analyse zur Erkennung von Sicherheitslücken.
- Snyk Vulnerability Scan: Automatisierte Scan deines Codes auf Sicherheitslücken.
- Docker Build and Publish: Erstelle und veröffentliche Docker-Images direkt aus deinem Workflow.
- Slack Notifications: Sende Benachrichtigungen an Slack-Kanäle, um dein Team über den Status von Workflows zu informieren.
GitHub Actions Best Practices
Wenn du GitHub Actions einsetzt gibt es in meinen Augen ein paar Best Practices, die du beachten solltest. Dadurch kannst du Ausführungszeit einsparen und die Sicherheit deiner Workflows erhöhen.
- Secrets und Variablen einsetzen: Nutze Secrets und Umgebungsvariablen, um sensible Daten wie API-Schlüssel oder Zugangsdaten sicher zu verwalten. Hinterlege diese Informationen im Repository, ohne sie direkt im Code zu speichern, um Sicherheitsrisiken zu minimieren (zu finden in den Repo-Einstellungen unter „Secrets and variables“).
- Laufzeit optimieren: Optimiere die Laufzeit deiner Workflows, indem du unnötige Schritte vermeidest und Caching-Techniken einsetzt. Dies reduziert die Ausführungszeit und Ressourcenbelastung, wodurch deine Workflows effizienter werden.
- Workflows überwachen: Überwache deine Workflows regelmäßig, damit es nicht zu unerwarteten Fehlern kommt. Sollte ein Workflow fehlschlagen, wirst du sogar automatisch per E-Mail benachrichtigt. Behalte also auch dein Postfach im Auge.
- Versionierung der Actions beachten: Achte darauf, spezifische Versionen von Actions zu verwenden, um sicherzustellen, dass Änderungen oder Updates keine unerwarteten Probleme in deinem Workflow verursachen. Verwende feste Versionsnummern anstelle von „latest“, um Konsistenz zu gewährleisten.
- Actions klein halten: Halte deine Actions klein und spezifisch, um die Wartbarkeit und Wiederverwendbarkeit zu erhöhen. Eine modulare Struktur erleichtert das Debugging und ermöglicht es dir, einzelne Komponenten bei Bedarf schnell zu aktualisieren.
- GitHub Marketplace einsetzen: Greife auf den GitHub Marketplace zu, um vordefinierte Actions zu finden und in deine Workflows zu integrieren. Dies spart Zeit und Aufwand, da du auf geprüfte und zuverlässige Lösungen zugreifen kannst, anstatt eigene Aktionen von Grund auf neu zu erstellen.
GitHub Actions Tutorial: Fazit
Wie du siehst ist GitHub Actions extrem flexibel einsetzbar. Das Einrichten eines neuen Workflows ist manchmal etwas zeitaufwendig, spart auf lange Sicht jedoch Zeit und Nerven, da man sich repetitive Aufgaben spart und dadurch auf Fehler vermeidet. Um zu starten, empfehle ich dir den Quickstart Guide, direkt von GitHub.
Wie fandest du diesen Beitrag?
-
Pingback: Rest API Testing: So testest du Rest APIs richtig!