Подтвердить что ты не робот

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.

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

4b9b3361

Ответ 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