Node.jsアプリケーションこれは自動的にAmazon WebServiceにデプロイされますから CodeshipCodeDeploy AWSデプロイメントシステム。
デプロイプロセス中に、現在実行中のWebアプリケーションを停止するようにappspec.ymlで設定しました。デプロイが完了したら、Webアプリケーションを再起動したいと思います。
os: linux
files:
- source: /
destination: /var/www/app2
hooks:
AfterInstall:
- location: bash_scripts/stop_forever.sh
runas: ec2-user
ApplicationStart:
- location: bash_scripts/start_forever.sh
runas: ec2-user
ただし、デプロイ中にappspec.ymlファイルからこれらのスクリプトのいずれかを正常に呼び出すことはまだできていません。
AWSデプロイメントエージェントログに表示されている現在のエラーは
Error CodeScriptMissing
Script Name /var/scripts/stop_forever.sh
MessageScript does not exist at specified location: /var/scripts/stop_forever.sh
Log TailLifecycleEvent - ApplicationStop
これは、これらのスクリプトを別の場所で実行しようとしていた古いバージョンのappspec.ymlファイルを参照しているようです。デプロイされたパッケージのappspec.ymlファイルの内容を変更しましたが、このエラーメッセージは各デプロイで同じままです。
上記のappspec.ymlファイルに加えて、次の変更も試みました。
残念ながら、appspec.ymlのトラブルシューティングに関しては、 AWSドキュメント 以外にオンラインはほとんどありません。
私が間違っていることは何ですか?
ApplicationStop
フックは、現在のデプロイメントappspec.yml
ファイルを実行する前に、以前にインストールされたデプロイメントから呼び出されています。
これを防ぐには、以前にインストールしたデプロイメントをサーバーから削除する必要があります。
Sudo service codedeploy-agent stop
/opt/codedeploy-agent/deployment-root
の下のすべての展開をクリアしますSudo service codedeploy-agent start
AWS開発者フォーラムに文書化されている別の方法があります。これが望ましいと思います。
デプロイメントの実行中にCLIツールで--ignore-application-stop-failuresオプションを使用すると、完全に機能しました。
フォーラムからの例:
aws deploy create-deployment --application-name APPLICATION --deployment-group-name GROUP --ignore-application-stop-failures --s3-location bundleType=tar,bucket=BUCKET,key=KEY --description "Ignore ApplicationStop failures due to broken script"