Amazon Web Service CodeDeploy проблем appspec.yml
У меня есть приложение Node.js, которое автоматически развертывается в Amazon Web Service через Codeship с помощью CodeDeploy системы развертывания AWS.
Во время процесса развертывания я установил в своем appspec.yml текущее запущенное веб-приложение для остановки. После завершения развертывания я хочу снова запустить веб-приложение.
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, я также попытался внести следующие изменения:
- Не указывать параметр runas для каждого крючка
- Ссылка на script внутри развернутого каталога
- Ссылка на script вне развернутого каталога
- У параметра версия изначально установлено значение 0.0
К сожалению, очень мало он-лайн с точки зрения устранения проблем appspec.yml, кроме документации AWS.
Какая очевидная вещь я делаю неправильно?
Ответы
Ответ 1
Кэш ApplicationStop
вызывается из ранее установленного развертывания, прежде чем пытаться запустить текущий файл развертывания appspec.yml
.
Чтобы этого не произошло, вам придется удалить любое ранее установленное развертывание с сервера.
- Остановить агент развертывания кода -
sudo service codedeploy-agent stop
- удалить все развертывания в
/opt/codedeploy-agent/deployment-root
- Перезапустить агент развертывания кода -
sudo service codedeploy-agent start
Ответ 2
В форумах разработчиков AWS есть другой способ, который, на мой взгляд, предпочтительнее.
Используйте параметр -ignore-application-stop-failures с инструментом CLI во время развертывания, он отлично работал у меня.
Пример из форума:
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"
https://forums.aws.amazon.com/thread.jspa?threadID=166904