web-dev-qa-db-ja.com

シェルスクリプトでnpmを実行できない

継続的デプロイメントのコンテキストでは、リモートサーバーでアプリを更新して再起動するためにシェルスクリプトを実行しています

スクリプトは次のとおりです。

ssh user@myserver <<'ENDSSH'
cd /opt/myapp
git pull
npm i
forever stop src
npm run staging
ENDSSH

出力は次のとおりです。

stdin: is not a tty
Already up-to-date.
-bash: line 3: npm: command not found
-bash: line 4: forever: command not found
-bash: line 5: npm: command not found

注意:

  • リモートサーバーにsshしてそれらのコマンドを手動で入力すると、すべてが機能します

  • nodeとnpmはnvmとともにリモートサーバーにインストールされますwhich npm与える/root/.nvm/versions/node/v6.10.0/bin/npm

10
Jordane

nodeおよびnpm/root/.nvm/versions/node/v6.10.0/binにインストールされている場合、これをスクリプトに追加すると問題が解決します。

PATH="/root/.nvm/versions/node/v6.10.0/bin:$PATH"

または、次のような絶対パスを使用してみることもできます。

/root/.nvm/versions/node/v6.10.0/bin/npm install

などNodeがソースからではなくバイナリパッケージからインストールされている場合、npmバイナリは#!/usr/bin/env nodeとなる可能性があります。これは、Nodeの正しいバージョンがPATHにある場合、は機能しません-この回答を参照してください)より詳しい情報:

Nodeがソースからインストールされた場合、npmnodeバイナリへの絶対パスを持つ正しいシバン行を持ち、nodeがPATHにありません。

5
rsp

次のようにNVMスクリプトをソースする必要があるバージョンをハードコーディングするのではなく、@ rspが提案したことを行わないでください。

. /root/.nvm/nvm.sh

デフォルトのバージョンを設定すると、NVMがバージョンを解決するはずです。これにより、新しいNodeJSバージョンに更新したからといって、そのスクリプトに戻ることはありません。

2

私はジェンキンスで同じ問題に直面していました。

次の行は.bashrcファイルの一番下にありましたが、私は.bashrcファイルの一番上に置きました

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
1
Shree Prakash