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 ?

Date de la dernière mise à jour : 17/09/2019

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 lors de l'exécution. Toutefois, l'applet de commande renvoie un code de sortie 0 (réussite) et le déploiement indique la réussite.

Comment m'assurer que les erreurs avec et sans fin d'exécution de l'applet de commande PowerShell entraîneront l'échec des hooks d'événement de cycle de vie dans CodeDeploy ?

Brève description

Par défaut, les applets de commande PowerShell renvoient le code de sortie 0, sauf si une erreur irréparable ou avec fin d'exécution s'est produite (par exemple, lors de la division par 0). Si une applet de commande PowerShell rencontre une erreur réparable (par exemple, une tentative de lecture d'un répertoire inexistant), l'applet de commande s'exécute toujours jusqu'à la fin et renvoie un code de sortie de valeur 0. Toutefois, CodeDeploy, ne signale pas une défaillance du hook d'événement de cycle de vie, sauf si le script associé renvoie un code de sortie différent de 0. Pour plus d'informations, consultez Présentation des erreurs sans fin d'exécution dans PowerShell.

Pour que les hooks d'événement de cycle de vie échouent lorsque des erreurs sans fin d'exécution se produisent, modifiez le comportement du script en définissant la variable $ErrorActionPreference.

Résolution

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

1.    Exécutez la commande $PSVersionTable pour savoir quelle version de PowerShell vous avez, puis mettez à niveau votre version de PowerShell si nécessaire.

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

$ErrorActionPreference = 'Stop'

Si vous affectez à $ErrorActionPreference la valeur Stop (Arrêt), PowerShell arrête l'exécution de l'applet de commande et renvoie le code de sortie 1 pour les erreurs avec fin d'exécution et sans fin d'exécution.