J'essaie actuellement d'automatiser le déploiement d'une application nodejs vers une instance EC2 via Github et AWS Codedeploy. J'ai suivi les instructions de here aussi étroitement que possible, mais j'ai rencontré un problème avec mon événement de hook AfterInstall.Problème de NPM déployant une instance nodejs en utilisant AWS codedeploy
Voici mon fichier 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
J'invoque la Déployez via l'AWS CLI comme ceci:
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
Tout fonctionne très bien, jusqu'à atteindre la phase AfterInstall et mon « AfterInstall. sh 'est exécuté. Ce fichier ressemble à ceci:
#!/bin/bash
cd /home/ec2-user/signal/app/
npm install
et produit le journal d'erreur suivant, provoquant un échec de déploiement:
Code d'erreur: ScriptFailed
Message: Script à l'emplacement spécifié: backend /app/deploy/afterinstall.sh exécuté en tant qu'utilisateur ec2-utilisateur échoué avec le code de sortie 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
Cependant, si je ssh dans mon instance EC2, accédez soit le répertoire temporaire:
/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/
ou
cd /home/ec2-user/signal/app/
et soit exécuter manuellement 'installer NPM', ou d'exécuter mon script via. /afterinstall.sh, alors npm fonctionne bien. Pourquoi les choses sont-elles différentes pour l'agent Codedeploy? J'utilise 'runas: ec2-user', donc je suppose que les permissions sont les mêmes que lorsque je suis ssh dans la boîte en tant qu'utilisateur ec2.
Quelle chose idiote est-ce que je fais mal? Beaucoup, merci beaucoup.
Il vaut la peine de mettre en surbrillance car le message d'erreur est long. L'erreur éventuelle est la suivante: npm: commande introuvable –
Je suppose qu'elle s'exécute en tant que 'ec2-user' mais sans exécuter vos scripts de connexion tels que' .bash_profile' et '.bashrc', donc elle n'a pas de npm Sur le chemin. –
Mettez 'source/path_to_bash_profile' par-dessus votre afterinstall.sh – Chris