継続的デプロイメントのコンテキストでは、リモートサーバーでアプリを更新して再起動するためにシェルスクリプトを実行しています
スクリプトは次のとおりです。
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
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がソースからインストールされた場合、npm
はnode
バイナリへの絶対パスを持つ正しいシバン行を持ち、node
がPATHにありません。
次のようにNVMスクリプトをソースする必要があるバージョンをハードコーディングするのではなく、@ rspが提案したことを行わないでください。
. /root/.nvm/nvm.sh
デフォルトのバージョンを設定すると、NVMがバージョンを解決するはずです。これにより、新しいNodeJSバージョンに更新したからといって、そのスクリプトに戻ることはありません。
私はジェンキンスで同じ問題に直面していました。
次の行は.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