Déployer — Exécution IaC et Vérification de l'état
Référence rapide
| Propriété | Valeur |
|---|---|
| Meilleur pour | Exécuter l'IaC validée contre Azure, vérifier l'état des ressources déployées |
| Entrées | prepare-plan.json + scaffold-manifest.json depuis .copilot-azure/sessions/{id}/ |
| Sorties | deploy-result.json écrit dans le répertoire de session |
| Parent | azure-app-onboard |
Quand utiliser cette compétence
Invoquée par l'orchestrateur azure-app-onboard à la Phase 4 quand scaffold-manifest.json existe avec files[] et validationResult. Non directement routable par l'utilisateur.
Retour à l'orchestrateur : Une fois terminé, retourner le contrôle à
azure-app-onboardpour la passation (Étape 10). Ne PAS démarrer de nouvelles phases.
Quand NE PAS utiliser
| Scénario | Utiliser à la place |
|---|---|
| Planifier l'architecture, mapper les services, estimer les coûts | prepare |
| Générer des fichiers IaC à partir d'un plan | azure-app-onboard Étape 7 (scaffold) |
Exécuter azd up ou déployer des templates existants |
azure-deploy |
| Déboguer une app en cours d'exécution après le déploiement | azure-diagnostics |
| Optimiser les dépenses Azure existantes | azure-cost |
Flux de travail
⛔ La délégation à un sous-agent est OBLIGATOIRE pour l'Étape 0. Lisez
subagent-preflight.md, puis envoyez commetaskavec le texte du template COMPLET et NON MODIFIÉ entre les délimiteurs<<<TEMPLATE_START>>>/<<<TEMPLATE_END>>>. Ne RÉSUMEZ pas et ne RÉÉCRIVEZ pas le template — le sous-agent a besoin de chaque instruction « Read [file] » pour produire undeploy-checklist.mdcorrect. Ajoutez les données d'artefact de session APRÈS le bloc de template. Si votre prochaine action après la lecture du template est autre chose quetask, vous l'exécutez en ligne plutôt que de déléguer.
⛔ Boucle de guérison : demandez à l'utilisateur après 3 tentatives, puis tous les 5 (compteur =
healingAttempts[].length).
⛔ Verrou régional : Avant la nouvelle tentative
az deployment, comparez--locationpar rapport àprepare-plan.json.deploymentVariables.location. Si changé → approbation requise. Mettez à jour le plan après approbation.
⛔ Après compaction ou tout
az deployment/az webapp deploy/az acr build/échec de vérification de l'état : relisezdeploy-checklist.md. S'il manque → remplissez à partir dedeploy-checklist-template.md. En cas de perte significative de contexte : relisez aussi ce SKILL.md.
| # | Étape | Action | Artefact | Référence |
|---|---|---|---|---|
| 0 | Envoyer le sous-agent preflight | ⛔ Vous DEVEZ envoyer subagent-preflight.md comme task. ⛔ agent_type: "task" — JAMAIS "general-purpose". Lisez le template, puis votre PROCHAINE action DOIT être task. Si après la lecture du template votre prochaine action est powershell, view, ou autre chose que task, ARRÊTEZ — vous l'exécutez en ligne au lieu de déléguer. Écrit deploy-checklist.md. Affichez-le immédiatement après le retour. |
deploy-checklist.md |
⛔ Vous DEVEZ lire subagent-preflight.md |
| 1 | Lire les artefacts upstream | Charger prepare-plan.json + scaffold-manifest.json. Vérifier validationResult. Résoudre subscription + variables de déploiement. |
— | — |
| 3 | Vérifications preflight | Auth, aperçu what-if obligatoire, RBAC, RG par deploy-checklist.md § Preflight. |
— | ⛔ Vous DEVEZ lire deploy-checklist.md (relire si compaction) |
| 4 | Porte d'approbation de déploiement | Présenter le résumé de coût + ressources par deploy-checklist.md § Deploy approval gate format. |
— | — |
| 5b | Écrire le squelette deploy-result.json | ⛔ Lisez deploy-schemas.ts, écrivez le squelette (status: "in-progress"). Doit exister AVANT la première commande az. |
deploy-result.json |
⛔ Vous DEVEZ lire deploy-schemas.ts |
| 6 | Exécuter le déploiement | ⛔ AVANT az deployment sub create : Générer le lien du portail — $dn="{deploymentName}"; $r="/subscriptions/{subId}/providers/Microsoft.Resources/deployments/$dn"; $l="https://portal.azure.com/#view/Microsoft_Azure_Resources/DeploymentDetails.MenuView/~/overview/id/$($r.Replace('/','%2F'))"; Write-Output "LINK=$l". ⛔ Ouvrir automatiquement le lien dans le navigateur : Start-Process $l 2>$null. Imprimer l'URL brute dans le chat (cliquable avec Ctrl).<br>Auto-générer TOUS les paramètres @secure() (openssl rand -base64 32 \| tr -d '/+='), NE JAMAIS ask_user pour les mots de passe ; à la nouvelle tentative réutiliser depuis deploy-secrets.env ou Key Vault — JAMAIS régénérer (voir deploy-safety.md § Deploy Checklist). PUIS déployer l'IaC. |
— | ⛔ Vous DEVEZ lire deploy-checklist.md § Execute deployment |
| 6b | Déployer le code applicatif | ⛔ Déployer le code pour CHAQUE service dans prepare-plan.json.services[]. Suivre deploy-checklist.md § Code deploy. |
— | ⛔ Vous DEVEZ lire deploy-checklist.md § Code deploy |
| 7 | Vérification de l'état + réactivation SCM | HTTP GET par endpoint (max 3 itérations). ⛔ Apps multi-services : Inspectez aussi le corps de la réponse pour les motifs d'erreur (connection refused, MODULE_NOT_FOUND, localhost, SET-IN-DEPLOY-PHASE) — HTTP 200 seul ne signifie pas fonctionnel quand l'app dépend d'un autre service ou de secrets KV. Puis ⛔ pour CHAQUE app App Service/Functions exécutez LES DEUX commandes — pas d'exceptions : az rest --method put --url "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app}/basicPublishingCredentialsPolicies/scm?api-version=2023-12-01" --headers "Content-Type=application/json" --body '{"properties":{"allow":false}}' puis vérifiez : az rest --method get --url "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app}/basicPublishingCredentialsPolicies/scm?api-version=2023-12-01" --query properties.allow -o tsv (doit retourner false). |
deploy-result.json complet |
⛔ Vous DEVEZ lire deploy-checklist.md § Health check |
| 8 | Finaliser les artefacts | ⛔ Lisez deploy-schemas.ts. ⛔ Relisez deploy-checklist.md § Artifact verification — suivez TOUS les 5 contrôles. ⛔ Aucun message « live »/passation jusqu'à ce que vous écrasier le squelette deploy-result.json — basculez status de "in-progress" (→ succeeded/failed) et remplissez healthStatus, endpoints, completedUtc, deploymentNames, healingAttempts. Écrivez deployment-summary.md (tableau de statut + santé + lien(s) du portail + commandes de nettoyage — même contenu que votre message de passation). Mettez à jour context.json — ajoutez "deploy" à completedPhases, currentPhase: null, lastModifiedUtc. Relisez pour confirmer status != "in-progress" et "deploy" ∈ completedPhases. ⛔ Puis ARRÊTEZ — retournez à l'orchestrateur. Pas de commandes CLI supplémentaires. |
deploy-result.json final + deployment-summary.md + mise à jour context.json |
⛔ Vous DEVEZ lire deploy-schemas.ts + ⛔ Relire deploy-checklist.md § Artifact verification |
| 9 | Gestion des erreurs + guérison | ⛔ Uniquement si les Étapes 6/6b/7 ont retourné un code de sortie non zéro ou la vérification de l'état a échoué. Ignorer complètement sur les déploiements propres. Classifier les erreurs, boucle de guérison, PLAN_LEVEL_CHANGE ré-approbation par deploy-checklist.md § During healing. ⛔ Même en cas d'échec irrécupérable : écrivez deploy-result.json avec status: "failed" et errorDetails avant de retourner à l'orchestrateur — l'artefact doit toujours exister. |
— | ⛔ Vous DEVEZ lire error-classification.md |