Mein Event-Hook für den Bereitstellungs-Lifecycle in AWS CodeDeploy ruft ein Windows PowerShell-cmdlet auf, das Fehler zurückgibt. Das cmdlet gibt jedoch den Beendigungscode 0 (erfolgreich) zurück, und die Bereitstellung meldet einen Erfolg. Ich möchte sicherstellen, dass Fehler beim Beenden und beim Nicht-beenden des PowerShell-cmdlets dazu führen, dass meine Lebenszyklusereignis-Hooks in CodeDeploy fehlschlagen.
Kurzbeschreibung
Standardmäßig werden PowerShell-cmdlets bis zum Ende ausgeführt und geben einen Exit-Code von 0 zurück, es sei denn, es tritt ein nicht behebbarer oder abschließender Fehler auf. CodeDeploy meldet keinen Fehler im Lifecycle-Event-Hook, es sei denn, das zugehörige Skript gibt einen anderen Exit-Code als 0 zurück.
Damit Lifecycle-Event-Hooks fehlschlagen, wenn nicht-beendete Fehler auftreten, ändere das Verhalten des Skripts. Um das Verhalten des Skripts zu ändern, konfiguriere die Variable $ErrorActionPreference im cmdlet auf „Stop“. PowerShell stoppt dann die Ausführung des cmdlets und gibt den Exit-Code 1 für Fehler beim Beenden und Nicht-beenden zurück.
Weitere Informationen findest du im Scripting-Blog unter Nicht beendende Fehler in PowerShell im Microsoft verstehen.
Behebung
Wichtig: Die folgende Methode funktioniert mit Windows PowerShell 5.1 und höher.
1. Überprüfe, welche Windows PowerShell-Version du verwendest, indem du den folgenden $psVersionTable-Befehl ausführst:
$PSVersionTable
2. Wenn deine Version von Windows PowerShell älter als Version 5.1 ist, aktualisiere deine PowerShell-Version. Genauere Anweisungen findest du unter Windows PowerShell 5.1 herunterladen und installieren auf der Microsoft Docs-Website.
3. Füge den folgenden Code am Anfang deines PowerShell-cmdlets ein:
$ErrorActionPreference = 'Stop'
PowerShell stoppt jetzt das cmdlet und gibt den Exit-Code 1 für Fehler beim Beenden und Nicht-beenden zurück.
Ähnliche Informationen
about_Preference_Variables auf der Microsoft-Website
AppSpec-Abschnitt „Hooks“
Überwachung von Bereitstellungen mit Amazon CloudWatch-Tools
Anzeigen von AWS CodeDeploy-Protokolle in der Amazon CloudWatch-Konsole