Pipelines en workflows¶
Elke deployment draait vanuit een entry pipeline in de configuratierepository: Azure DevOps YAML onder pipelines/,
of een GitHub Actions workflow onder .github/workflows/. Entry pipelines zijn dun. Ze geven een paar parameters door aan
een herbruikbaar template in de coderepository, en dat template roept de Xebia.Mcp module aan. Azure DevOps en GitHub Actions
worden functioneel identiek gehouden (docs/PIPELINE_SYNCHRONIZATION.md en .github/workflows/COUNTERPARTS.md in de
coderepository).
Entry pipelines¶
Entry (ADO pipelines/ en GitHub .github/workflows/) |
Roept template aan (coderepository) | Gebruik voor |
|---|---|---|
hub.yaml |
ADO .azure-devops/pipelines/templates/stage-mcp-hub.yaml, GitHub .github/workflows/stage-mcp-hub.yaml |
Elke hub-wijziging: firewall, App Gateway, policies, features, tags, management groups |
hub-destroy.yaml |
idem, met destroy: true |
Een hub afbreken (in de referentierepository alleen canary) |
spoke.yaml |
stage-mcp-spoke.yaml |
Spokes aanmaken of wijzigen |
spoke-destroy.yaml |
stage-mcp-spoke.yaml, met destroy: true |
Spokes verwijderen |
infrastructure.yaml |
stage-infrastructure.yaml |
De job runners deployen of bijwerken |
container.yaml |
stage-container.yaml |
Het mcp container image bouwen |
De coderepository heeft daarnaast:
update-spn.yaml: slaat het secret van de deployment-SPN op in de hub Key Vault en roteert het;test.yaml: stresstest van de runner;pull-request.yaml(ADO) enci.yml(GitHub): CI voor de code zelf, zie Nieuwe functionaliteit bouwen;report-version.yaml(alleen Azure DevOps, gepland): rapporteert de gepinde codeversie van klantrepositories aan de platformstatus-API (scripts/version-watcher);trigger-sync.yaml(alleen GitHub): synct de code naar klant-remotes, zie Releasen en Code synchronisation.
Welke platformomgeving target elke entry?
Elke entry geeft per stage of job één mcp.json mee. Controleer dit voordat je draait, zeker bij de spoke pipelines:
spoke-destroy moet dezelfde mcp.json gebruiken als de spoke-run die de spoke heeft aangemaakt. In de
referentieconfiguratierepository target spoke.yaml prod, terwijl spoke-destroy.yaml canary target.
Parameters die je gaat wijzigen¶
Dit zijn template-parameters. In de referentieconfiguratierepository zijn de meeste hard-coded in de entry-YAML. Om er een te wijzigen pas je het entry-bestand aan in een pull request, of maak je er een run-time parameter van (zie Mode en whatIf tijdens het draaien beschikbaar maken).
| Parameter | Waarden | Effect |
|---|---|---|
mode |
Plan, Apply, ApproveModifications, ApproveDestroys |
Plan plant alleen. Apply plant en past toe zonder te stoppen. ApproveModifications stopt voor goedkeuring als een plan iets aanmaakt, wijzigt of verwijdert. ApproveDestroys stopt alleen als het plan iets verwijdert. |
whatIf |
true, false |
true: Terraform plant nog steeds, maar de apply-stap wordt overgeslagen. Zie hieronder de uitzondering voor spokes. |
approveLayers (alleen hub) |
lijst met layernamen, standaard [] |
Beperkt goedkeuringen tot deze layers. Leeg betekent dat elke layer goedkeuring kan vereisen. |
destroy |
true, false |
Plant en past een destroy toe. Wordt gezet door de *-destroy entry-bestanden. |
spokeGlob (alleen spoke) |
wildcardpatroon, relatief aan <env-folder>/spokes/ |
Selecteert de spoke-bestanden, bijv. team-a/canvas_app1_dev.json of team-a/*. Niet hoofdlettergevoelig. |
environments (alleen spoke) |
geordende lijst van spoke-omgevingen | Welke spoke-omgevingen draaien en in welke volgorde. Een gematcht bestand waarvan de environment niet in de lijst staat laat de config test falen. |
imageRef |
bijv. mcp:latest |
De container image tag waarin de jobs draaien. |
Uitzondering voor spokes bij whatIf
De spoke subscription layer wordt tijdens de Plan-stap altijd geplant en toegepast, ook met whatIf: true
(Invoke-XebiaSpokePlanAction.ps1). Alleen de spoke canvas layer houdt zich aan whatIf. Op dit moment maakt de subscription layer
alleen een subscription-alias aan als azureSubscriptionId leeg is.
Controleer voordat je draait
In de referentieconfiguratierepository (xms-cloud-platform-config) gebruikt hub.yaml mode: Apply met
whatIf: false, dus canary en prod passen toe zonder goedkeuring. spoke.yaml gebruikt mode: Apply met whatIf: true,
dus die plant alleen de spoke canvas. Bepaal welk gedrag je wilt en pas de entry-bestanden aan voordat je erop vertrouwt.
Wat een hub-run doet¶
-
Prepare. Draait de unit tests en de config tests (Pester):
- firewall-JSON tegen
src/Xebia.Mcp/Files/json/firewallschema.json, IP group-verwijzingen en prioriteiten; - App Gateway- en WAF-JSON tegen hun schema's;
- de DNS baseline.
Het bouwt ook de region matrix. Een falende config test stopt de run voordat Terraform start. 2. Voor elke layer, in layervolgorde: 1.
<layer>_plan:terraform plan. Het plan-bestand en een JSON-samenvatting worden gepubliceerd als artifacts<layer>_<region>_<level>en<layer>_<region>_<level>_json. De samenvatting verschijnt als waarschuwing:Plan: X to add, Y to change, Z to destroy.2.<layer>_analyseen<layer>_approve: alleen in deApprove*modes. Ze pauzeren voor goedkeuring als het plan bij de mode past. 3.<layer>_apply: past het opgeslagen plan-bestand toe, dus wat je hebt goedgekeurd wordt exact toegepast. Wordt overgeslagen inPlanmode. 3. Clean: geeft de reservering van de runner vrij. - firewall-JSON tegen
Een plan dat resources verwijdert markeert de plan-taak als Succeeded with issues (oranje). Zie dat als signaal om het plan te lezen.
Wat een spoke-run doet¶
Om de identity, service connections, codetoegang en integraties voor spoke-deployments voor te bereiden, zie De spoke pipeline voorbereiden en Spoke-integraties voorbereiden.
- Prepare: draait de unit tests en de hub config tests (dus een kapotte firewall-JSON blokkeert ook spoke-runs), daarna de
spoke config tests. Het zoekt
*.jsononder<env-folder>/spokes/die bijspokeGlobpassen en groepeert ze per spoke- omgeving. De run faalt als:- de glob geen enkel bestand matcht;
- een gematcht bestand niet geldig is volgens
spokeschema.json; - de
environmentvan een gematcht bestand niet inenvironmentsstaat; - de
managementGroupIdvan een gematcht bestand geenidis in<env-folder>/<targetRegions.primary>/foundation.auto.tfvars.
- Per spoke-omgeving, in de volgorde van
environments, en pas nadat de vorige is geslaagd of overgeslagen:- Plan: plant en past toe de subscription layer, en plant daarna de spoke canvas.
- Analyse en Approve: alleen
Approve*modes. - Apply: past het plan van de spoke canvas toe.
- Clean.
Wat de apply aanmaakt, staat beschreven in Spoke canvas. Om daarna te zien of een spoke nog overeenkomt met zijn bestand, zie Configuratie-driftdetectie.
Goedkeuringsmomenten¶
Hoe de beslissing wordt genomen:
- Hub: per layer leest de analyse-stap de plansamenvattingen van de regio's van die layer en vraagt om goedkeuring als een
plan bij de mode past (
Invoke-XebiaHubAnalyseAction.ps1). Bekijk de Bekende problemen: in de versie die je pint leest de analyse-stap mogelijk alleen de samenvatting van de laatste regio. - Spoke: één analyse-stap per spoke-omgeving-stage. Die leest elke plansamenvatting die in die run is gedownload, inclusief plannen van de subscription layer en van eerdere omgevingen. Goedkeuring geldt dus per omgeving-stage, niet per spoke.
Waar je goedkeurt:
- Azure DevOps: de
<layer>_approvejob is eenManualValidation@1server job. Het template stelt geenapproversen geennotifyUsersin, dus niemand krijgt een melding. Houd de run in de gaten. - GitHub Actions: de goedkeuringsjob gebruikt de GitHub environment
approval-required. Maak deze environment aan in de configuratierepository en voeg required reviewers toe. Zonder reviewers gaat de job door zonder te wachten.
Mode en whatIf tijdens het draaien beschikbaar maken¶
Azure DevOps (pipelines/hub.yaml):
parameters:
- name: mode
type: string
default: Plan
values: [Plan, Apply, ApproveModifications, ApproveDestroys]
- name: whatIf
type: boolean
default: false
stages:
- template: .azure-devops/pipelines/templates/stage-mcp-hub.yaml@mcp-code
parameters:
# ...existing parameters...
mode: ${{ parameters.mode }}
whatIf: ${{ parameters.whatIf }}
GitHub Actions (.github/workflows/hub.yaml):
on:
workflow_dispatch:
inputs:
mode:
type: choice
options: [Plan, Apply, ApproveModifications, ApproveDestroys]
default: Plan
jobs:
canary:
uses: xmms/xms-cloud-platform-code/.github/workflows/stage-mcp-hub.yaml@release/v4.12
with:
# ...existing inputs...
mode: ${{ inputs.mode }}
Doe hetzelfde op beide platformen om de pariteit te bewaren.
Een pipeline draaien¶
Azure DevOps: Pipelines → de entry pipeline (bijvoorbeeld hub) → Run pipeline → kies de branch → vul de
parameters in (bijvoorbeeld spokeGlob) → Run. Open een plan-job om het Terraform-plan te lezen, of download het plan-artifact.
GitHub Actions: Actions → de workflow (bijvoorbeeld spoke) → Run workflow → kies de branch → vul de
inputs in → Run workflow. De planuitvoer staat in de joblogs en de geüploade artifacts.
Vereisten voor de pipelines¶
Azure DevOps
- Service connections met de namen uit
pipelines/variables.yaml(bijvoorbeeld<env>.serviceConnectionNameHuben<env>.serviceConnectionNameSpoke). - Een GitHub Enterprise service connection voor de
mcp-coderepository resource (endpoint:in elk entry-bestand; in de referentierepositoryxebia-managed-services-eu.ghe.com). - De agent pools
<AgentPool>(Managed DevOps Pool) en<AgentPool>-CTR(container jobs), aangemaakt door deinfrastructurepipeline.
GitHub Actions
- Een federated credential (OIDC) op de service principals in
mcp.json(Azure.TerraformState.Hub.ServicePrincipalIden.Spoke.ServicePrincipalId). - Repository-variabele
cloud_platform_gh_app_iden secretcloud_platform_gh_app_private_key: de GitHub App die de coderepository uitcheckt (.github/actions/checkout-mcp-code). - De environment
approval-required.
Een nieuwe platformomgeving opzetten (volgorde)¶
- Maak de Terraform state storage account(s), de spoke state container en de deployment service principal(s) aan, en geef ze toegang. Dit zijn vereisten die de pipelines niet aanmaken.
- Maak
<env-folder>/mcp.json,global.auto.tfvarsen de regio-tfvars aan. - Draai
infrastructure: job runners, plus de blob container in het hub state storage account. - Draai
container: hetmcpimage. - Draai
hub(eerst in Plan mode, daarna Apply). - Draai
spokevoor elke spoke.