5

現在、GithubとAWS Codedeployを使用してnode2sアプリケーションをEC2インスタンスに配置する作業を自動化しようとしています。私はhereの指示にできるだけ近づけましたが、私はAfterInstallフックイベントで困ったことがあります。私はそうのようなAWS CLIを経由してデプロイを呼び出すAWSコード化を使用してnodejsインスタンスをデプロイするNPMの問題

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 

は、ここに私のYMLファイルである私はAfterInstall相と私の「afterinstallに達するまで

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 

すべてが、正常に動作します。 sh 'が実行されます。

#!/bin/bash 
cd /home/ec2-user/signal/app/ 
npm install 

を、失敗した展開引き起こし、次のエラーログを生成します: そのファイルは次のようになります

エラーコード:はScriptFailed

メッセージ:指定された場所にスクリプト:バックエンドを/app/deploy/afterinstall.shユーザーec2-userが終了コード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であれば0

しかし、tempディレクトリのいずれかに移動します。

/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/ 

または

cd /home/ec2-user/signal/app/ 

と手動 'NPMインストール' を実行、または経由して私のスクリプトを実行します。 /afterinstall.shを実行すると、npmはうまく動作します。

なぜコードデプロイエージェントでは違いがありますか?私は 'runas:ec2-user'を使っているので、ec2ユーザとしてssh'edされているときと同じ権限があると思います。

私は間違っていますか? 多くの、多くのありがとうございます。

+0

エラーメッセージが長いため、強調表示するだけの価値があります。最終的なエラーは次のとおりです: npm:コマンドが見つかりません –

+0

'ec2-user'として動作していますが、' .bash_profile'や '.bashrc'などのログインスクリプトを実行していないと推測されていますので、npmパス上に。 –

+0

'source/path_to_bash_profile'をafterinstall.shの上に置きます。 – Chris

答えて

12

mbairdとChrisのコメントに正確に記されているように、私のPATHは設定されていませんでした。したがって、npm、node、pm2、...はすべて失敗しました。

私は、Codedeployの展開プロセスのすべてのステップで自分のパスを再確立する必要があるように見えました。だから私のstop.sh/beforeinstall.sh/afterinstall.sh/start.shの上部に、私が含ま:

source /home/ec2-user/.bash_profile 

と人生は良好でした。 それから、私は右の作業ディレクトリでノードを起動していないpm2で他の問題に遭遇しましたが、コード化されたスクリプトに同様の調整を行うことでそれが機能しました。

これはすべての後見で明らかでしたが、私は非常に助けに感謝しています。君たちありがとう!

+1

私が同じものを探しているように見えるので、あなたが言いたい調整を分かち合いますか? – Galya

+1

これは正解です。 #!/ bin/bashを削除してソース行に置き換えてください。私は1時間に1つの壁に私の頭を叩いた。 –

-2

ホストエージェントは、環境をかなり剥ぎ取った根を使用します。終了コード127は、OSがスクリプトをロードするために必要なファイルを見つけられないことを示します(スクリプトの実行に必要なスクリプトかもしれません)。

最高のことは、ルートとしてnpmがインストールされていることを確認することです。

ホストエージェントはサービスとして起動したときに/ etc/profileを取得するので、npmを取得するために必要なものを追加することもできます。

+2

ノードをrootとして実行しないでください。 –

関連する問題