Am Puls von Microsoft

Wir basteln uns ein Blog mit GitHub Issues, Actions, Pages und PowerShell

Wir basteln uns ein Blog mit GitHub Issues, Actions, Pages und PowerShell

Manchmal muss man sich das Szenario ein wenig zurechtbiegen, bis es zu einem selber passt. So war es dieses Mal mit diesem PowerShell und GitHub Bastelprojekt der Fall. Ich wollte mich schon immer einmal mit PowerShell und GitHub Actions beschäftigen und daraus gewisse Lernerfolge ziehen. Man kann schließlich nie genug Wissen sammeln.

So entstand die Idee dieses kleinen Projektes. Es geht darum, dass mittels GitHub Action ein PowerShell (Docs) Skript gestartet wird, welches aus GitHub Issues (Tickets) eine Art Blog erstellt und dieses als sogenannte GitHub Page kostenfrei auf der erst kürzlich von Microsoft erworbenen Kollaborationsplattform hostet (Newsmeldung).

GitHub Issue Action PowerShell Blog Converter Beispiel

Begriffserklärungen

PowerShell

Microsoft stellte bereits 2006 die erste Version des nun bereits zur siebten Version weiterentwickelten PowerShell Frameworks nebst dazu passender Skriptsprache vor. PowerShell zielt vor allem auf die Bereiche der Automation von Abläufen sowie dem Konfigurieren und Verwalten von Diensten und Systemen ab. Durch die enge Verbindung mit .NET steht auch dessen großer Funktionsumfang bei der Erstellung von PowerShell Skripten zur Verfügung.

Seit Version 6 setzt das Framework auf .NET Core als Unterbau. Somit steht es neben dem vom Start aus unterstützten Windows auch auf macOS und Linux Systemen zur Verfügung.

In unserem kleinen Bastelprojekt steht vor allem die Automatisierung von immer wiederkehrenden Abläufen und Prozessen im Vordergrund.

GitHub Repository

Dies ist im Grunde nichts GitHub-eigenes, sondern gehört zum Standard der verteilten Versionsverwaltung von Git.

Man kann es als Hülle eines Projektes ansehen. Auf GitHub ist somit alles auf Repository-Basis ausgelegt und alle folgenden Begriffe haben jeweils eine eindeutige Zuordnung zu einem Repository.

Eine technisch weiterführende Erklärung ist auf der offiziellen Git Seite nachlesbar.

GitHub Issue

Ein Issue, in anderen Umgebungen auch „Ticket“ genannt, ist ein kategorisierbarer und mit weiterführenden Informationen anreicherbarer Vorfall. Dies können neben einem Fehlverhalten einer Software auch Funktionswünsche, aber auch beispielsweise Diskussionen über gewisse Vorgehen sein. Dies ist in der Softwareentwicklung und Projektverwaltung ein obligatorisches Vorgehen.

Eine tiefere Erklärung hierzu kann man in der entsprechenden GitHub Hilfeseite nachlesen.

GitHub Page

Bei einer GitHub Page handelt es sich um die Möglichkeit, eine statische Webseite kostenfrei je Repository (Erklärung) auf GitHub zu hosten. Außerhalb dieses Projektes können das zum Beispiel quelloffene Blogplattformen wie Jekyll oder Hugo sein. Je nach Einstellung wird der Inhalt des docs/ Ordners des Repositories hierfür verwendet.

Wie auch im Punkt zuvor findet man nahegehender Informationen in den GitHub Help Center.

GitHub Action

Eine GitHub Action ist ein Prozess, der automatisch bei frei zu definierenden Ereignissen innerhalb des GitHub Repositories auftreten kann.

In unserem Projekt ist dies das Event „Issue opened“. In diesem Falle führt die im Repository hinterlegte GitHub Action ein Workflow aus, welcher aus den im weiteren Verlauf des Beitrags erklärten Schritten besteht.

Da man je nach GitHub Account zwar unterschiedlich viele, jedoch nie unendliche Actions-Laufzeit Freiminuten hat, setzt unser Workflow auf einen Linux-Host anstelle Windows.

Hintergrund hierfür ist, dass laut der offiziellen Abrechnungsübersicht eine Minute auf Linux auch als eine Minute abgerechnet wird, wohingegen jedoch 2, respektive 10 Minuten von der freien Quota abgezogen werden, wenn unser Workflow auf Windows beziehungsweise macOS Maschinen ausgeführt wird.

Weiterführende Erklärungen kann man auf GitHub nachlesen.

Projekt

Struktur

  • .github/workflows – beinhaltet den GitHub Actions Workflow
  • templates/ – enthält alle Vorlagen für die Erstellung des Blogs
  • docs/ – wird mit den Blog-Seiten vom Skript gefüllt

Ablauf 

Da dieses Projekt als Hauptlernkontext die PowerShell Automatisierung besitzt, lag der Fokus auf die Erstellung dieses.

Herausgekommen ist ein an sich recht simples Skript, welches jedoch viele Eigenschaften aufweist, welche man in der Zukunft auch in anspruchsvolleren Szenarien gut gebrauchen kann. Hierzu zählen neben Dateisystemzugriff auch Stringmanipulationen sowie Schleifen- und Bedingungsanweisungen.

Das Skript alleine ist, so wie es auf GitHub zum Herunterladen bereitsteht, für sich lauffähig. Es kann, wenn man keine GitHub Actions nutzen möchte, auch lokal auf dem eigenen Rechner in der PowerShell Konsole ausgeführt werden.

GitHub PowerShell To Blog Converter Action YAML Datei

Durch die Benutzung von GitHub Actions wird ein hoher Grad an Event-basierter Automatisierung erreicht. In unserem Fall wird ein Workflow mit folgenden Schritten in Gang gesetzt:

  1. Klonen / Herunterladen des Repositories auf GitHub Server
  2. Ausführen des eigentlichen PowerShell Skriptes
  3. Pushen / Hochladen des aktualisierten Repositories

Arbeitsweise des Skriptes

Das Skript an sich greift auf den Middleware Dienst RSSHub zu, um eine auf XML basierende Liste aller Issues (Beispiel) des angegebenen Repositories zu erhalten. Auf Basis dieser Daten werden durch im template/-Order hinterlegten und mit Platzhalter versehenen Vorlagen alle benötigten html-Seiten für den Blog automatisch erstellt und im docs/-Order abgelegt.

GitHub Issue Action PowerShell Blog Converter Skript

Wer dieses Skript nachbauen möchte, dem sei angeraten, die offizielle GitHub API mit einem persönlichen Token zu verwenden. Dieser Schritt wurde der Einfachheit halber in diesem Projekt durch die Benutzung des Mittelsmanndienstes ersetzt.

Bitte beachtet

Wie auch sonst bei unseren Wochenendprojekten auf Dr. Windows handelt es sich auch bei diesem hier um eine Machbarkeitsstudie. Sie ist weder fehlerfrei noch ideal und sollte somit in keiner Weise außerhalb einer Beispiels- und Lernumgebung eingesetzt werden.

Ich freue mich über jegliche Beteiligung am Projekt, was die Qualität des PowerShell-Skriptes anbelangt.

Über den Autor

Tobias Scholze

Tobias Scholze

Bayrischer Open Source- und Community-Enthusiast, Verfechter des neuen Microsoft und Wandler zwischen den Betriebssystemwelten. #communityrocks Von Herzen ein Nerd mit der festen Überzeugung, dass man gemeinsam und durch den Einsatz von moderner IT die Welt für jeden ein Stückchen besser machen kann.

Anzeige