Dans un contexte de déploiement continu, un script Shell est exécuté pour mettre à jour et redémarrer mon application sur le serveur distant
le script est:
ssh user@myserver <<'ENDSSH'
cd /opt/myapp
git pull
npm i
forever stop src
npm run staging
ENDSSH
la sortie est:
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
Remarque:
tout fonctionne si je ssh sur le serveur distant et saisis ces commandes manuellement
le noeud et npm sont installés avec nvm sur le serveur distant which npm
donner /root/.nvm/versions/node/v6.10.0/bin/npm
Si vos node
et npm
sont installés dans /root/.nvm/versions/node/v6.10.0/bin
puis l'ajout à votre script devrait résoudre le problème:
PATH="/root/.nvm/versions/node/v6.10.0/bin:$PATH"
Vous pouvez également essayer d'utiliser des chemins absolus comme:
/root/.nvm/versions/node/v6.10.0/bin/npm install
etc. mais notez que si vous avez votre Node installé à partir des paquets binaires et non des sources, alors votre ligne Shebang dans le binaire npm
sera probablement #!/usr/bin/env node
qui ne fonctionnera pas lorsque la version correcte de Node dans le CHEMIN - voir cette réponse pour plus d'informations:
Lorsque Node a été installé à partir des sources, alors npm
aura une ligne Shebang correcte avec un chemin absolu vers le binaire node
et peut être utilisé wven lorsque node
n'est pas dans le CHEMIN.
Ne faites pas ce que @rsp a suggéré, plutôt que de coder en dur la version, vous devriez source le script NVM comme ceci:
. /root/.nvm/nvm.sh
NVM devrait résoudre la version pour vous si vous définissez la version par défaut, de cette façon vous ne reviendrez pas à ce script simplement parce que vous avez mis à jour vers une version plus récente de NodeJS.
J'étais confronté au même problème à Jenkins.
Les lignes suivantes étaient en bas du fichier .bashrc, je viens de mettre en haut du fichier .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