В настоящее время я пытаюсь автоматизировать развертывание приложения nodejs в экземпляре EC2 через Github и AWS Codedeploy. Я как можно точнее следовал инструкциям здесь, но я наткнулся на загвоздку с моим событием перехвата AfterInstall.
Вот мой yml-файл:
version: 0.0
os: linux
files:
- source: /backend
destination: /home/ec2-user/signal
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStop:
- location: backend/app/deploy/stop.sh
timeout: 10
runas: ec2-user
BeforeInstall:
- location: backend/app/deploy/beforeinstall.sh
timeout: 1200
runas: ec2-user
AfterInstall:
- location: backend/app/deploy/afterinstall.sh
timeout: 1200
runas: ec2-user
ApplicationStart:
- location: backend/app/deploy/start.sh
timeout: 60
runas: ec2-user
ValidateService:
- location: backend/app/deploy/validate.sh
timeout: 60
runas: ec2-user
Я вызываю развертывание через интерфейс командной строки AWS следующим образом:
aws deploy create-deployment --application-name Signal --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name Production --description "Deployment" --github-location repository=githubusername/repository,commitId=ABCD123 --ignore-application-stop-failures
Все работает нормально, пока я не дойду до фазы AfterInstall и мой «afterinstall.sh» не будет выполнен. Этот файл выглядит так:
#!/bin/bash
cd /home/ec2-user/signal/app/
npm install
И создает следующий журнал ошибок, вызывающий неудачное развертывание:
Код ошибки: ScriptFailed
Сообщение: сценарий в указанном месте: backend / app / deploy / afterinstall.sh, запускаемый от имени пользователя ec2, завершился неудачно с кодом выхода 127
LifecycleEvent - AfterInstall
Script - backend/app/deploy/afterinstall.sh
[stderr]/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/afterinstall.sh: line 7: npm: command not found
Однако, если я подключусь к своему экземпляру ec2 по ssh, перейдите в любой каталог temp:
/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/
or
cd /home/ec2-user/signal/app/
и либо вручную запустить npm install
, либо запустить мой сценарий через ./afterinstall.sh
, тогда npm
будет работать нормально.
Почему для агента Codedeploy все по-другому? Я использую runas: ec2-user
, поэтому я предполагаю, что разрешения и т. Д. Такие же, как когда я вставляю ssh в поле как ec2-user
.
Что за идиотизм я делаю не так? Огромное спасибо.
ec2-user
, но не запускает ваши сценарии входа в систему, такие как.bash_profile
и.bashrc
, поэтому у него нет npm на пути. - person Mark B   schedule 02.12.2015source /path_to_bash_profile
поверх afterinstall.sh - person Chris   schedule 02.12.2015