Boehrsi.de - IT und Gaming Blog

GitHub Actions - Automatisierung leicht gemacht

Erstellt am event Uhr von account_circle Boehrsi in label Development
GitHub Actions - Automatisierung leicht gemacht Bild

Auch wenn ich auf meinem Server ein On-Premise Git Setup habe, welches kleine Aufgaben automatisiert übernimmt, so habe ich mittlerweile immer mehr GitHub Repositories und auch solche wollen automatisiert werden.
Für diese Zweck bietet GitHub mit seinem Actions Setup eine sehr gute und flexible Lösung, welche euch nicht nur viel Arbeit abnehmen kann, sondern auch sehr einfach zu nutzen ist. Aufgrund der Größe der Plattform gibt es bereits jetzt extrem viele Actions, die ihr nur eurem Repository hinzufügen müsst und schon geht es los. Ich nutze GitHub Actions z.B. um für meine Status Seite open_in_new (GitHub Repository open_in_new) automatisiert nach einem Push die Build und Deploy Schritte auszuführen.

Das Hinzufügen einer solchen Action ist ziemlich einfach, da man einfach nur im GitHub Marketplace open_in_new die passende Action raus suchen und folgend einige wenige Schritte befolgen muss. In meinem Fall sehen selbige wie folgt aus.

  • Die Hugo Action open_in_new öffnen um weitere Informationen zu erhalten
  • .github/workflows/gh-pages.yml Datei in eurem Repository erstellen, da es sich hier um eine Action mit Bezug auf GitHub Pages handelt
  • Entsprechend der Anleitung auf der Marketplace Seite die Action konfigurieren. Dies unterscheidet sich je nach Action

Die Schritte belaufen sich im Prinzip also auf das erstellen einer oder mehrerer Dateien und das Einfügen einer kleinen Konfiguration. Selbige besteht wie man es bei anderen Automatisierungstools kennt aus verschiedenen Bereichen.

name: github pages

on:
  push:
    branches:
      - main  # Set a branch to deploy

Generelle Informationen wie der Name der Action eröffnen die Datei, gefolgt vom Trigger. Der Trigger definiert wann und wo die Action ausgeführt wird. Wo ist in diesem Kontext z.B. der zu verwendende Branch.

jobs:
  deploy:
    runs-on: ubuntu-18.04

Weiter geht es mit dem eigentlichen Job. Jobs müssen in einer Umgebung laufen, also auf einer virtuellen Maschine mit einem Betriebssystem. Ist diese definiert können die eigentlichen Schritte der Automatisierung definiert werden.

steps:
      - uses: actions/checkout@v2
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.77.0'
          extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public

Die Steps können andere Scripte / Actions laden oder direkt Befehle ausführen. In meinem Beispiel sieht man das im ersten Schritt das Repository inklusive Submodules geholt wird und im zweiten Schritt die eigentliche Hugo Action geladen und konfiguriert wird.
Nachdem alles vorbereitet ist wird im dritten Schritt der Bauprozess des Static Site Generators Hugo angestoßen. Im vierten und letzten Schritt erfolgt dann das Deployment. Dafür wird der secrets.GITHUB_TOKEN genutzt, um der Action zu erlauben Dinge in mein Repository zu pushen. Dankenswerterweise ist dieser Token automatisch und ohne euer zutun vorhanden und kann direkt genutzt werden (weitere Informationen zum GITHUB_TOKEN open_in_new). Den gesamten Code meiner gh-pages.yml findet ihr hier open_in_new.

Mit diesen Schritten sollte der nächste Push automatisiert eine GitHub Pages Seite erzeugen, die mehr oder weniger sofort verfügbar ist. Den Zustand der Ausführung einer Action könnt ihr in eurem Repository im Actions Tab sehen. Nötig war dafür nur eine Datei an der richtigen Stelle zu erzeugen, ein paar wenige Werte anzupassen und der Rest passiert automatisch. Ich freue mich in diesem Flow vor allem über die automatische Erstellung etwaiger Secrets, denn selbiges ist sonst gerne ein Punkt wo Fragen und Probleme auftreten. Ebenso gut finde ich, dass das Gesamtkonzept einfach auf gut formatierten Dateien aufgebaut ist. Falls gewünscht könnt ihr natürlich auch mehrere Actions für verschiedene Anforderungen in einem Repository nutzen.

Bei Interesse stöbert doch einfach mal im Marketplace, vielleicht gibt es interessante oder für eure Aufgaben schon passende Actions. Falls nicht könnt ihr natürlich auch ein neues Repository erstellen und selber eine Action schreiben. In diesem Bereich kann ich euch allerdings keine Tipps geben, da ich noch keine Erfahrung mit der Entwicklung von Actions sammeln konnte.

Falls ihr übrigens keine Aktionen auf GitHub selbst ausführen wollt, sondern bei Events auf GitHub eure eigenen Systeme benachrichtigen wollt, schaut euch doch mal die verfügbaren Webhooks open_in_new an. Mit Actions und Webhooks in Kombination könnt ihr ein durchaus interessantes Automatisierungssystem ohne großen Aufwand umsetzen.

Related Links
Kommentare  
Kommentar erstellen
Mit dem Abschicken des Kommentars erklären sie sich mit der in der Datenschutzerklärung dargelegten Datenerhebung für Kommentare einverstanden. Spam, unangebrachte Werbung und andere unerwünschte Inhalte werden entfernt. Das Abonnieren via E-Mail ist nur für E-Mail Adressen erlaubt die Sie rechtmäßig administrieren. Widerrechtliche Abonnements werden entfernt.