Provisioning¶
Hoe de code een platformomgeving provisioned, van de build-infrastructuur tot en met de laatste layer. De volgorde staat beschreven in de platform deploy flow; deze pagina legt elk onderdeel uit.
Stap voor stap, inclusief het state storage account en de service connections: Pipelines en agents voorbereiden.
Infra: de job runners¶
De infrastructure pipeline (stage-infrastructure.yaml → Invoke-XebiaInfrastructure) deployt de build-infrastructuur
vanuit src/Xebia.Mcp/Files/bicep/deploy/initialize/main.bicep naar de subscription en resource group in
mcp.json → Azure.JobRunner:
| Resource | Geconfigureerd via (mcp.json) |
|---|---|
| Virtual network, subnets en NAT gateway | Azure.JobRunner.IpAddressPrefixes (Vnet, AgentSubnet, PepSubnet, CaeSubnet, DnsResolverSubnet) |
| Azure Container Registry | – |
Managed DevOps Pool <AgentPool> |
AzureDevops.AgentPool, Azure.JobRunner.MaximumAgents, Azure.JobRunner.Sku |
Container Apps environment (voor container jobs, pool <AgentPool>-CTR) |
– |
| DNS resolver | – |
Daarnaast maakt de pipeline de blob container aan in het storage account voor de hub Terraform state
(Initialize-XebiaMcpTerraformStateContainer). Het storage account zelf, de spoke state container en de
deployment service principals zijn vereisten; geen enkele pipeline maakt ze aan.
In de referentieconfiguratierepository wordt infrastructure.yaml door CI getriggerd bij wijzigingen in het bestand zelf of in
pipelines/variables.yaml, en draait canary en prod met sequentiële locking.
Container: het mcp image¶
De container pipeline (Invoke-XebiaContainer -Action Prepare|Build) bouwt src/Dockerfile vanuit de gepinde codeversie
en pusht het image naar de ACR van de job runner. Het image bevat PowerShell 7, Terraform, de Azure CLI, de Xebia.Mcp
module en de hub Terraform (tijdens de build gekopieerd uit infra/). De imagenamen komen uit
AzureDevops.ContainerImageName (normaal ["mcp"]).
Tags worden gezet door Get-XebiaMcpContainerTags.ps1; zie Releasen. De entry
pipelines draaien op imageRef: mcp:latest.
Layers, per omgeving en regio¶
De hub pipeline provisioned de hub layers voor één platformomgeving (één mcp.json) per stage:
- Omgeving. De naam van de platformomgeving is de naam van de map die
mcp.jsonbevat, bijvoorbeeldcanaryofprod. Die naam wordt gebruikt in de state key en alsconfig_pathaan Terraform meegegeven. -
Regio's. De region matrix wordt opgebouwd uit
<env-folder>/global.auto.tfvars(Get-XebiaRegion.ps1,Set-XebiaRegionMatrix.ps1):primary_region = "weu" active_regions = ["weu", "neu"] active_regions_names = ["westeurope", "northeurope"]primary_regionmoet inactive_regionsstaan. Level 1 draait in de primaire regio, level 2 in de overige regio's, level 3 in alle regio's en level 4 (postdeployment) alleen in de primaire regio. 3. Layers. Voor elke layer en regio plant de module Terraform vanuitterraform/cloud-platform/deploy/<layer>met de var-bestanden van die regio en omgeving, en slaat de state op in<env>-<region>-<layer>.tfstate. Zie Deployment layers.
flowchart TB
mcp["environments/prod/mcp.json"] --> env["Omgeving = prod<br/>config_path = environments/prod"]
env --> g["global.auto.tfvars<br/>primary_region, active_regions"]
g --> r1["weu (primair)"]
g --> r2["neu"]
r1 --> l1["foundation, connectivity (level 1)"]
r2 --> l2["foundation, connectivity (level 2)"]
r1 --> l3["firewall, identity, management (level 3)"]
r2 --> l3
r1 --> l4["postdeployment (level 4)"]
Spokes¶
De spoke pipeline provisioned spokes met de Terraform in src/Xebia.Mcp/Files/terraform/spoke-canvas/:
| Stap | Terraform root | State key |
|---|---|---|
| Subscription | deploy/subscription |
<wl>_<env>_Subscription.tfstate |
| Spoke canvas | deploy/spoke |
spoke_<wl>_<env>.tfstate |
<wl> en <env> zijn de workloadShortName en environment van de spoke-JSON, in kleine letters. Zie
Spoke-config.
De subscriptionstap komt eerst, zodat het spoke canvas altijd een subscription heeft om in te werken. Het is bewust een aparte stap, in plaats van een pool met vrije subscriptions: zie Subscription provisioning. Wat de canvasstap aanmaakt, staat in Spoke canvas; de Terraform-inputs en -outputs staan in de modulereferentie.
Lokaal provisionen¶
dev/dev.ps1 draait dezelfde functies lokaal, in de dev container, tegen MCP_CONFIG (standaard
config/Demo/canary/mcp.json). WhatIf staat aan, tenzij je -SkipWhatIf meegeeft.
pwsh ./dev/dev.ps1 -Action Test
pwsh ./dev/dev.ps1 -Action Infrastructure -SkipWhatIf
pwsh ./dev/dev.ps1 -Action Container -SkipTests
Voor hub layers en spokes, zie Eén layer lokaal draaien;
de hub- en spoke-acties van dev.ps1 werken op main nog niet (Bekende problemen).