AWS CodeDeploy 中的部署生命週期事件掛接呼叫會傳回錯誤的 Windows PowerShell cmdlet。不過,cmdlet 會傳回 0 (成功) 的結束代碼,且部署報告成功。我想要確保終止和非終止 PowerShell cmdlet 錯誤都會導致我的生命週期事件勾點在 CodeDeploy 中失敗。
簡短說明
根據預設,PowerShell cmdlets 會執行到完成,並傳回結束代碼 0,除非發生無法復原或終止錯誤發生。除非關聯的指令碼傳回與 0 不同的結束代碼,否則 CodeDeploy 不會報告生命週期事件掛接失敗。
若要在發生非終止錯誤時使生命週期事件掛接失敗,請變更指令碼的行為。若要變指令碼的行為,請將 cmdlet 中的 $ErrorActionPreference 變數設定為 '停止'。PowerShell 接著會停止執行 cmdlet,並同時針對終止和非終止錯誤傳回結束代碼 1。
如需詳細資訊,請參閱 Microsoft Scripting Blog 上的瞭解 PowerShell 中的非終止錯誤。
解決方法
**重要事項:**下列解析度適用於 Windows PowerShell 5.1 及更高版本。
1. 請執行下列 $PSVersionTable 命令,驗證您正在使用的 Windows PowerShell 版本:
$PSVersionTable
2. 如果您的 Windows PowerShell 版本早於 5.1 版本,請升級您的 PowerShell 版本。如需指示,請參閱 Microsoft Docs 網站上的下載並安裝 Windows PowerShell 5.1。
3. 在 PowerShell cmdlet 的開頭包含下列程式碼:
$ErrorActionPreference = 'Stop'
PowerShell 現在會停止 cmdlet,並同時針對終止和非終止錯誤傳回結束代碼 1。
相關資訊
Microsoft 網站上的 about_Preference_Variables
AppSpec 的「勾點」區段
使用 Amazon CloudWatch 工具監控部署
在 Amazon CloudWatch 主控台中查看 AWS CodeDeploy 日誌