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 для каждой ловушки
  • Ссылка на скрипт внутри развернутого каталога
  • Ссылка на скрипт вне развернутого каталога
  • Если для параметра версия изначально установлено значение 0,0

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

Что, очевидно, я делаю неправильно?


person Peter Bridger    schedule 13.01.2015    source источник


Ответы (2)


Ловушка ApplicationStop вызывается из ранее установленного развертывания перед попыткой запустить текущий appspec.yml файл развертывания.

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

  • Остановить агент развертывания кода - sudo service codedeploy-agent stop
  • очистить все развертывания в /opt/codedeploy-agent/deployment-root
  • Перезапустите агент развертывания кода - sudo service codedeploy-agent start
person user3802205    schedule 13.01.2015

На форумах разработчиков 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

person Chad Van Klompenburg    schedule 23.01.2015
comment
есть идеи, можно ли каким-либо образом использовать этот флаг при развертывании через консоль CodeDeploy или через стороннюю службу (например, CircleCI), которая не использует для этого cli? - person Vee6; 29.08.2017