Geht es um den Aufbau automatisierter CI/CD Pipelines für Azure, so denken die meisten wohl eher an Azure DevOps. Aber auch mit GitHub lässt sich so etwas erreichen – und zwar völlig kostenlos. Das Werkzeug dazu heißt GitHub Actions. Zu GitHub Actions selbst will ich hier gar nicht so viel schreiben – es gibt bereits einige Blogartikel und co. dazu. Ich verweise aber gerne auf mein Video, welches ich dazu gemacht habe:
Nun kam von einem meiner geschätzten Kollegen zu Recht die Frage, wie man denn in dieser (ersten, im Video gezeigten) Variante mehrere ARM Templates bereitstellen kann. Und dazu möchte ich hier die passende Antwort liefern…
Eine Variante wäre sicherlich, in diesem Skript
https://github.com/HaikoHertes/ActionsDemo/blob/master/.github/workflows/DeployARMtoAzure.yml#L23
mehrfach das „az deployment group create“ aufzurufen – aber dann müssten man wissen, wie viele Templates es sind und das Skript würde auch schnell sehr lang.
Als aus meiner Sicht bessere Lösung habe ich ein PowerShell Skript geschrieben, dass in der Verzeichnisstruktur des Repositories einen Ordner „arm\“ erwartet und darin Unterordner mit den Namen der gewünschten Resource Groups. Diese werden falls nötig vom Skript angelegt. Außerdem sucht das Skript Templates im Format XYZ.json und dazugehörige Parameter-Files im Format XYZ.parameters.json. Diese Templates werden nun alphabetisch geordnet mittels ARM bereitgestellt – egal, wie viele es sind. Dabei werden aus einer Datei „tags.txt“ falls gewünscht die Tages im Format
Tag = Wert
geladen und bei der Bereitstellung der RGs und Ressourcen mit angewendet. Die zu verwendende Location (nur eine pro RG ist erlaubt, aber das entspricht weitgehend dem üblichen Vorgehen) wird ebenfalls aus einer TXT-Datei location.txt gelesen.
Im GitHub Repo müssen zwei Secrets hinterlegt werden:
Einmal ein Secret für die Credentials (wie man die anlegt zeige ich im Video ab 20:27) und einmal die Subscription ID der zu verwendenden Subscription. Ergo ist ein Repo pro Subscription nötig…
Das PowerShell Script selbst könnt ihr hier herunterladen:
https://github.com/HaikoHertes/ActionsDemo.v2/blob/master/DeployARMtoAzure.ps1
Alternativ könnt ihr gleich mein ganzes Demo Repo auf GitHub clonen:
https://github.com/HaikoHertes/ActionsDemo.v2 bzw
https://github.com/HaikoHertes/ActionsDemo.v2.git
Wichtig: Damit mit -Tag bzw. -Tags auch die tags gleich mit bereitgestellt werden können braucht man das Az Modul in Version 4.1.0 und das wiederum ist derzeit nur im Ubuntu-20.04 Image auf GitHub enthalten. Siehe dazu auch hier:
https://github.com/marketplace/actions/azure-powershell-action
https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu2004-README.md
https://github.com/actions/virtual-environments/tree/master/images