Pipelines en scripts van de bibliotheek¶
De repository automatiseert testen, documentatie, release en oplevering. Deze pagina somt de pipelines in pipelines/ en
de scripts in scripts/ op, zodat het beherende team weet wat wanneer draait. De releaseflow zelf staat in
Release en documentatie, de tests in Testen.
Referentieontwerp, jouw deployment kan afwijken
De pipelines zijn Azure Pipelines-definities die op private agents draaien en een service connection naar een test- subscription gebruiken. Namen van pools, service connections en subscriptions zijn specifiek voor het beherende team en worden hier niet genoemd.
Pipelines¶
| Pipeline | Trigger | Doel |
|---|---|---|
CI for Terraform (CI-terraform.yaml) |
Pull requests die modules/terraform, examples/terraform of tests/terraform wijzigen, en een wekelijkse schedule |
Genereert de moduledocumentatie, maakt de gedeelde resources aan, draait de Terratest-tests |
CI for Bicep (CI-bicep.yaml) |
Pull requests die modules/bicep, examples/bicep of tests/bicep wijzigen, en een wekelijkse schedule |
Hetzelfde voor Bicep, met Pester |
Release (release.yaml) |
Elke push naar main |
Maakt de nieuwe versietags per module aan |
Manual deploy and destroy (deploy_destroy_manual.yaml) |
Handmatig | Deployt of verwijdert één voorbeeld, om een module te bouwen en uit te proberen |
IaC accelerator for Terraform and for Bicep (terraform_iac_accelerator.yaml, bicep_iac_accelerator.yaml) |
Handmatig | Deployt het acceleratorproject naar de dev- of prod-testsubscription |
De pipelines gebruiken vier gedeelde templates in pipelines/templates/: één om de gedeelde resources aan te maken
(dependencies.yaml), één om documentatie te genereren en te committen (docs.yaml), en één voor elk van het deployen van Terraform- en Bicep-
voorbeelden (terraform.yaml, bicep.yaml).
CI-pipelines¶
Beide CI-pipelines hebben dezelfde drie jobs:
flowchart LR
docs["docs: generate and commit documentation"] --> shared["shared_resources: create dependencies"]
shared --> deploy["deployment: run the tests"]
| Job | Wat het doet |
|---|---|
| docs | Draait op elke branch behalve main. Werkt de templateindex in de hoofd-README bij, genereert de moduledocumentatie opnieuw (terraform-docs voor Terraform, het script Set-Module voor Bicep) en commit de gewijzigde README.md- en main.json-bestanden terug naar de branch met het bericht Updated documentation [skip ci]. |
| shared_resources | Maakt de Terraform state storage aan met een Bicep-template, draait terraform apply voor dependencies/ en exporteert de output shared_resources als JSON voor de volgende job (Gedeelde resources). |
| deployment | Schrijft de JSON naar shared_resources.json, draait de tests, zet de resultaten om naar een JUnit-rapport (de Terraform-logparser van Terratest, de Pester JUnit-export) en publiceert de testresultaten. De job heeft een timeout van 180 minuten. |
De tests draaien parallel: Terratest met -parallel 10, Pester met één threadjob per testbestand.
Wat wordt getest. Een geplande run en een handmatige run testen alles. Een pull request draait alleen de tests van de modules die hij
wijzigt. Die worden gevonden aan de hand van de gewijzigde bestanden in modules, examples en tests. Wijzigt de pull request iets
anders (bijvoorbeeld een pipeline of een script), dan draaien alle tests. Wijzigingen aan Markdown-bestanden en aan iac_accelerator/ tellen
niet als zodanige wijzigingen. De wekelijkse run (dinsdag, vroeg in de ochtend, UTC) draait altijd op main, ook als er niets is gewijzigd.
Parameters voor een handmatige run.
| Pipeline | Parameter | Betekenis |
|---|---|---|
| CI for Terraform | SpecificTest |
De naam van één test (bijvoorbeeld TestKeyVault). De standaardwaarde * draait alle tests. |
| CI for Terraform | DocsOnly |
Genereer alleen de documentatie en sla de tests over |
| CI for Bicep | SpecificTest |
Een filter op testbestanden (bijvoorbeeld keyVault.Tests.ps1). Standaard draait alles. |
| CI for Bicep | SkipTests, SkipDocs |
De tests of de documentatie overslaan |
| CI for Bicep | moduleName |
De module waarvoor documentatie wordt gegenereerd, of all |
Releasepipeline¶
De releasepipeline draait voor elke push naar main en niet voor pull requests. Hij checkt de repository uit met twee commits aan
historie en draait scripts/New-Release.ps1, dat alle modulemappen doorloopt en een tag aanmaakt voor elke module die
is gewijzigd. Zie Release en documentatie en Versiebeheer.
De pipeline draait geen tests. De tests draaien op de pull request en elke week.
Handmatig deployen en verwijderen¶
| Parameter | Betekenis |
|---|---|
action |
apply of destroy |
template_path |
Het pad om vanuit te deployen. Het moet terraform of bicep bevatten. De standaardwaarde is de map met Terraform-voorbeelden. |
enable_policy_scan |
Draai de policycontrole na de deployment |
De pipeline maakt eerst de gedeelde resources aan en deployt daarna het voorbeeld. Voor Terraform draait hij init (met de state
storage als backend), validate, plan en apply of destroy. Voor Bicep draait hij az deployment sub create, en voor destroy verwijdert
hij de resource group die de deployment teruggaf.
Scripts¶
Alle scripts zijn PowerShell.
| Script | Doel |
|---|---|
New-Release.ps1 |
Doorloopt elke modulemap en roept er New-ModuleRelease voor aan. Lege mappen worden overgeslagen. |
New-ModuleRelease.ps1 |
Voor één module: controleert of de module in aanmerking komt voor een release, berekent de doelversie en maakt de tag aan en pusht die. |
Set-Module.ps1 |
Genereert wat te genereren valt voor een Bicep-module: de gecompileerde main.json, de README.md, en ontbrekende bestanden en mappen. Met opties sla je elk van de drie over, en -Recurse behandelt alle modules in een pad. |
New-TerraformModule.ps1 |
Zet een nieuwe Terraform-module op: de map, _header.md, CHANGELOG.md, version.json, main.tf, lege variabelen- en outputbestanden, het docs-voorbeeld, een Terratest-test en een voorbeeld, met de modulenaam ingevuld. |
Set-XmtIndex.ps1 |
Genereert de templateindex in de hoofd-README opnieuw: een tabel met elke module en een link voor elke technologie die hem heeft. |
Publish-ModuleToACR.ps1 |
Publiceert de Bicep-modules van een module naar een container registry, voor één versie of alle versies, vanuit de git-tags. |
helper/ |
Functies die de bovenstaande scripts gebruiken: versieberekening, wijzigingsdetectie, tags aanmaken, README-generatie voor Bicep en controles op gerefereerde modules. Templates voor nieuwe modules staan in helper/module_templates. |
Publish-ModuleToACR.ps1 controleert of de tag bestaat, of de module een main.bicep heeft en of de registry bereikbaar is
met push-rechten. Hij slaat versies over die de registry al heeft en publiceert de andere als
modules/<technology>/<module>:<version>, met een link naar de README bij die tag als documentatie. De pipeline die hem voor
elke afnemer aanroept, staat buiten deze repository (Release en documentatie).
Versieberekening in het kort¶
De scripts vergelijken de bestanden van de laatste commit met het filter in version.json om te bepalen of een module is gewijzigd. Daarna
bouwen ze de versie op uit de MAJOR.MINOR van version.json en een berekende PATCH: gereset naar 0 als version.json
is gewijzigd, anders de hoogste bestaande patch plus één. Details staan in Versiebeheer.
Ontwikkelomgeving¶
De map .devcontainer/ definieert een development container met Terraform, terraform-docs, Azure CLI met Bicep, PowerShell,
Go, Git en Docker-in-Docker. Het setupscript logt in met een service principal, maakt de gedeelde resources aan en schrijft
shared_resources.json voor de Terraform- en Bicep-tests, en installeert Pester. Contributors gebruiken hem om tests lokaal te draaien.
Geautomatiseerde updates van de accelerator¶
Een geplande workflow draait elke week Renovate op de repository, beperkt tot iac_accelerator/. Het houdt de moduleversies
en providers in de accelerator actueel en opent een pull request per updategroep. Afnemers krijgen dezelfde opzet in hun kopie
van de accelerator (Houd modules actueel).