Azure Pipeline affiche trop tôt qu'un déploiement est terminé?
Avec Azure DevOps et Azure App Services, vous êtes peut être tombé sur un problème perturbant : La build indique que le déploiement d'un site est terminé, mais celui-ci utilise toujours la précédente version de votre application.
Quelle est l'origine de ce problème?
Cela fait déjà deux ou trois fois que l'on m'expose se problème et celui-ci a toujours été lié à une configuration inappropriée des slots d'Azure App Service. Bien souvent, on crée un slot de warmup. Ce slot est destiné à recevoir les nouvelles versions de l'application, et précharger celle-ci avant d'intervertir celle-ci avec le slot de production. Ce swap de slot permet d'éviter les temps d'indisponibilité de l'application.
Historiquement, il était courant d'utiliser Azure pour automatiser ce swap (la configuration se faisant au niveau du slot de warmup). À l'époque, peu d'outils savaient déclencher le swap.
Vous l'aurez compris, si vous utilisez ce type de configuration, un Pipeline Azure DevOps n'est pas en mesure de savoir qu'un swap a lieu (ni même que celui-ci est terminé).
Comment s'en sortir?
Afin d'éviter ce genre de désagrément, il faut donc modifier son Pipeline et lui confier la responsabilité du swap.
Dans un premier temps, il est impératif de désactiver le swap automaric. Cela se fait en sélectionnant le slot de warmup. On doit ensuite aller dans General Settings. "Auto swap enable" doit être sur Off.
Côté Azure DevOps, on peut ajouter une tâche AzureAppServiceManage à son Pipeline YAML.
steps:
- task: AzureAppServiceManage@0
displayName: 'Swap Slots'
inputs:
azureSubscription: AzureDevOps
WebAppName: BugsHunterBlog
ResourceGroupName: BugsHunterBlog
SourceSlot: 'core-warmup'
Si vous utilisez les Pipelines classiques de Release, il suffit d'ajouter une tâche "Azure App Service Manage" sur le Stage dédié à l'environnement de production.
Concernant la configuration de cette tâche, il n'y a qu'à choisir l'action "Swap slots". Le reste de la saisie dépendra de l'application Azure. Attention cependant à bien cocher la case "Swap with production" soit cochée (sans quoi, il faudra indiquer le slot de destination).
Et voilà, maintenant le statut de votre Pipeline reflètera l'état exact de votre application.