AWS CodeDeploy のデプロイライフサイクルイベントフックが Windows PowerShell コマンドレットを呼び出すと、エラーが返されます。しかし、コマンドレットは終了コード 0 (成功) を返し、デプロイからは成功が報告されます。PowerShell コマンドレットの終了エラーと非終了エラーが発生したときに、ライフサイクルイベントフックが CodeDeploy で失敗するようにしたいです。
簡単な説明
デフォルトでは、PowerShell コマンドレットは最後まで実行され、回復不能または終了中のエラーが発生しない限り、終了コード 0 を返します。CodeDeploy は、関連するスクリプトが 0 以外の終了コードを返さない限り、ライフサイクルイベントフックの失敗を報告しません。
非終了エラーが発生したときにライフサイクルイベントフックが失敗するようにするには、スクリプトの動作を変更します。スクリプトの動作を変更するには、コマンドレットの $ErrorActionPreference 変数を 'Stop' に設定します。そうすることで、PowerShell はコマンドレットの実行を停止し、終了エラーと非終了エラーの両方で終了コード 1 を返します。
詳細については、Microsoft Scripting ブログの「PowerShell の非終了エラーについて」を参照してください。
解決策
重要: 次の解決策は Windows PowerShell 5.1 以降で有効です。
1.次の $PSVersionTable コマンドを実行して、使用している Windows PowerShell のバージョンを確認します。
$PSVersionTable
2.お使いの Windows PowerShell のバージョンがバージョン 5.1 よりも前の場合は、PowerShell のバージョンをアップグレードしてください。手順については、Microsoft Docs ウェブサイトの「Windows PowerShell 5.1 のダウンロードとインストール」を参照してください。
3.PowerShell コマンドレットの先頭に次のコードを含めます。
$ErrorActionPreference = 'Stop'
そうすると、PowerShell はコマンドレットを停止し、終了エラーと非終了エラーの両方で終了コード 1 を返します。
関連情報
_Preference_Variables について (Microsoft のウェブサイト)
AppSpec の 'hooks' セクション
Amazon CloudWatch ツールでデプロイを監視する
Amazon CloudWatch コンソールで AWS CodeDeploy のログを確認する