12

У меня есть приложение Node.js, находящийся автоматически развернут на Amazon Web Service через Codeship с помощью CodeDeploy системы развертывания AWS.Amazon Web Service CodeDeploy appspec.yml проблемы

Во время процесса развертывания я установил в своем 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 параметров для каждого крюка
  • REFERENCING скрипт внутри развернутого каталога
  • Реферирование сценария вне развернутого каталога
  • Имея версии параметра первоначально установлен в 0.0

К сожалению, очень мало онлайн с точки зрения appspec.yml поиска неисправностей, кроме AWS documentation.

Какая очевидная вещь я делаю неправильно?

ответ

21

Крючок ApplicationStop вызывается из ранее установленного развертывания, прежде чем пытаться запустить текущее развертывание файла appspec.yml.

Чтобы предотвратить это, вам необходимо удалить любое ранее установленное развертывание с сервера.

  • Остановите код развертывания агента - sudo service codedeploy-agent stop
  • очистить все внедрений под /opt/codedeploy-agent/deployment-root
  • Restart код Deploy агента - sudo service codedeploy-agent start
16

Существует еще один способ документирована в форумах разработчиков АМС, которые я думаю, предпочтительнее.

Используйте параметр -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

+1

любая идея, если этот флаг может быть использован в любом случае при развертывании с помощью CodeDeploy консоли или через службу третьей стороны (например, CircleCI), что Безразлично» t использовать cli для этого? – Vee6

Смежные вопросы