My Custom Plaster Template

Um meine PowerShell Projekte endlich etwas zu vereinheitlichen, stand schon länger das Erstellen eines Custom Plaster Template auf meiner ToDo Liste. Das Plaster Projekt selbst kenne ich schon etwas, habe aber leider bisher nicht die Zeit gefunden mich damit genauer zu beschäftigen. Somit hatte also am Ende der Langstreckenflug nach New Orleans etwas sehr Positives… Nämlich die Einarbeitung in dieses geniale Tool.

Was ist Plaster

Die eigene Projektbeschreibung bedarf keiner weiteren Erläuterung:

Plaster is a template-based file and project generator written in PowerShell. Its purpose is to streamline the creation of PowerShell module projects, Pester tests, DSC configurations, and more. File generation is performed using crafted templates which allow the user to fill in details and choose from options to get their desired output.

Nachdem das Plaster Modul aus der PowerShell Gallery gezogen ist (ab PowerShell 5), kann man auch bereits ohne weitere Konfiguration mit dem Standard-Template sein erstes Projekt erzeugen:

Ausführliche Dokumentation zu dem Plaster Cmdlet`s findet sich im GitHub Projekt.

Mit meinem Custom Plaster Template sieht der Aufruf ähnlich aus. Nur der Pfad zu dem eigenen Template muss mitgegeben werden:

Custom Plaster Template - Execution

Das Ergebnis ist dann ein Verzeichnis mit allen nötigen Unterordnern und den gewünschten Files darin, welche auch teilweise inhaltlich durch token replacement auf das neue PowerShell Modul angepasst wurden:

Was soll mein Custom Plaster Template beinhalten

Da ich sehr gerne mit VSCode an meinen Skripten arbeite, sollte gleich bei der Projekterstellung eine tiefe Integration erfolgen. Dafür soll in jedem Fall die Nutzung von Pester Tests und Read the Docs Dokumentationen vereinfacht werden.

VSCode Integration

Der einfachste Weg, die Nutzung solcher Tools zu vereinfachen ist die Einbindung als Tasks in VSCode.

Meine Tasks:

  • Pester Test
  • Read The Docs Generierung
  • Module Manifest File aktualisieren
    • Patch
    • Minor
    • Major

Aber auch eine kleine Grundkonfiguration für den VSCode Workspace sollte beinhaltet sein.

VSCode Tasks

Für mein task.json habe ich mich der Vorlage aus dem Standard-Template bedient und dieses um meine zusätzlichen Tasks erweitert.

Ist das neue Projekt in VSCode geöffnet, lassen sich die Tasks über die Befehlsleiste aufrufen:

Custom Plaster Template - VSCode Tasks

Für die UpdateManifestData Tasks wird ein Skript (Update-ModuleManifestData.ps1) im Ordner helper verwendet. Dieser Ordner wird ebenfalls automatisch am Ziel erstellt.
Durch das Update-ModuleManifestData.ps1 Script wird aber nicht nur die Versionsnummer laut den Vorgaben hochgezählt, sondern auch alle Funktionen aus den psm1-Files des Projekts exportiert.

Ich verwende üblicherweise pro Funktion ein eigenes psm1 File, welches analog zur Funktion benannt ist. Darauf ist auch das Update-ModuleManifestData.ps1 Skript ausgelegt.

Die Ausgabe des Taks UpdateManifestData-Patch sieht dann mit der einen Funktion „myFirstProject“ so aus:

Custom Plaster Template - VSCode Task UpdateManifestData-Patch Output

VSCode Settings

Da es sich bei den Files in den erzeugten Projekten hauptsächlich um PowerShell Skripte handeln wird, bietet es sich an dies in den Workspace Settings als Standard festzulegen.

Pester

Wie bereits in einem vorherigen Abschnitt ausgeführt, ist das wichtigste für mich die Integration über die VSCode Tasks. Somit kann jederzeit schnell auf die Tests zugegriffen werden.

Um das zu ermöglichen, wird in meinem Custom Plaster Template ein Basis-Test für das neue Modul erstellt.  Der Task zum Aufruf der Pester Tests ist ja bereits über das tasks.json erzeugt.

Für einen Basis-Test habe ich mich dem genialen Skript von Kevin Marquette’s blog bedient. Die spezifischen Pester Tests können dann später einfach hinzugefügt werden.

Ausgabe des Test Tasks mit Hilfe von Pester sieht dann so aus:

Custom Plaster Template - VSCode Task Test Output

Read the Docs

Auf Read the Docs bin ich ursprünglich durch den Artikel Switching to reStructuredText and ReadTheDocs for GitHub Project Documentation von Chris Wahl gekommen. Ich finde das eine tolle Möglichkeit, schnell und unkompliziert eine Basis-Doku zu erstellen und aktuell zu halten.
Zur Generierung der Files für die Dokumentation verwende ich zum einen eine etwas angewandelte Version des Skripts von Chris Wahl und zum anderen eine index.rst die als Template für ein token replacement dient.

Custom Plaster Template Manifest

Um mein Custom Plater Template zu erstellen bin ich wie folgt vorgegangen:

  • Basis-Template erzeugen

  • Benötigte Schritte aus dem Default Template kopieren und für eigene Template adaptieren (eine weitere gute Quelle sind die zusätzlichen Beispiele im GitHub Projekt)

  • Benötigte Files in das Projekt kopieren

Es ist erforderlich, dass jedes Template in einem eigenen Order abgelegt wird.

Das fertige Schema der Projekts wird in der plasterManifest.xml festgehalten:

Meine Plaster  Konfiguration auf GitHub

Alle von mir verwendeten Skripte und Konfigurationen sind auch in meinem GitHub Projekt zu diesem Beitrag zu finden.

My PlasterConfig Project

 

 

Weitere Infos

Hat Ihnen der Beitrag gefallen?

Nutzen Sie gerne für Ihren nächsten Amazon Einkauf diesen Affiliate Link und unterstützt Sie damit den Author des Artikels: http://amzn.to/2pAgZOD

Um schnell und einfach Ihre Lieblings Blogs und Autoren zu unterstützen, ist der Dienst Flattr ebenfalls eine tolle Möglichkeit!

Vielen Dank!

No Responses

Leave a Reply

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen