Comment puis-je faire en sorte que les erreurs avec et sans fin d'exécution de l'applet de commande PowerShell entraînent l'échec des hooks d'événement de cycle de vie dans CodeDeploy ?

Dernière mise à jour : 03/02/2022

Mon hook d'événement de cycle de vie de déploiement dans AWS CodeDeploy appelle une applet de commande Windows PowerShell qui renvoie des erreurs. Toutefois, l'applet de commande renvoie un code de sortie 0 (réussite) et le déploiement indique avoir réussi. Comment m'assurer que les erreurs avec et sans fin d'exécution de l'applet de commande PowerShell entraînent l'échec de mes hooks d'événement de cycle de vie dans CodeDeploy ?

Brève description

Par défaut, les applets de commande PowerShell s'exécutent entièrement et renvoient un code de sortie 0, sauf si une erreur irréparable ou avec fin d'exécution se produit. CodeDeploy ne signale aucun échec de hook d'événement de cycle de vie, sauf si le script associé renvoie un code de sortie différent de 0.

Pour faire échouer les hooks d'événement de cycle de vie en cas d'erreurs sans fin d'exécution, modifiez le comportement du script. Pour modifier le comportement du script, définissez la variable$ErrorActionPreference de l'applet de commande sur « Stop ». PowerShell arrête alors l'applet de commande et renvoie un code de sortie 1 pour les erreurs avec et sans fin d'exécution.

Pour plus d'informations, consultez l'article Présentation des erreurs sans fin d'exécution dans PowerShell sur le blog de Microsoft dédié au scripting.

Résolution

Important : la résolution suivante fonctionne avec Windows PowerShell 5.1 et les versions ultérieures.

1.    Vérifiez la version de Windows PowerShell que vous utilisez en exécutant la commande $PSVersionTable suivante :

$PSVersionTable

2.    Si votre version de Windows PowerShell est antérieure à la version 5.1, mettez-la à niveau. Pour obtenir des instructions, consultez l'article Télécharger et installer Windows PowerShell 5.1 sur le site web de documentation technique Microsoft.

3.    Incluez le code suivant au début de votre applet de commande PowerShell :

$ErrorActionPreference = 'Stop'

PowerShell arrête désormais l'applet de commande et renvoie un code de sortie 1 pour les erreurs avec et sans fin d'exécution.