2017-04-13 3 views
4

In einem kontinuierlichen Einsatz Kontext betreibe ich ein Shell-Skript ausgeführt meine app auf dem Remote-Server zu aktualisieren, neu zu startenKann nicht npm in einem Shell-Skript

das Skript ist:

ssh [email protected] <<'ENDSSH' 
cd /opt/myapp 
git pull 
npm i 
forever stop src 
npm run staging 
ENDSSH 

der Ausgang ist:

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 

Hinweis:

  • alles funktionieren, wenn ich auf dem Remote-Server ssh und diese Befehle manuell

  • Knoten und npm mit NVM auf dem Remote-Server which npm/root/.nvm/versions/node/v6.10.0/bin/npm

+0

So sieht es aus, als ob Sie versuchen, npm mit NVM zu verwenden. Haben Sie versucht, den nvm-Befehl im Skript auszuführen, um die Version auszuwählen? Bevor npm läuft? – wheeler

+0

@wheeler hat 'nvm --version' im Skript hinzugefügt. hab '-bash: Zeile 3: nvm: command not found' – Jordane

+0

Bei Ausführung in 'continuous deployment context' welchen Benutzer verwendest du - den selben, den du als ssh verwendest? Stellen Sie sicher, dass Knoten für CI-Benutzer verfügbar ist, indem Sie 'node --version' eingeben. – GreensterRox

Antwort

2

geben installiert eingeben Wenn Ihr node und npm installiert sind in /root/.nvm/versions/node/v6.10.0/bin dann, diese zu Ihrem Skript soll das Problem lösen:

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

Alternativel y Sie können versuchen, absolute Pfade wie mit:

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

usw. aber Anmerkung, dass, wenn Sie Ihren Knoten aus den Binärpaketen installiert und nicht aus Quellen dann in der npm binären Ihre shebang Linie wird #!/usr/bin/env node wahrscheinlich die nicht funktionieren, wenn die richtige Version von Knoten in der PATH - diese Antwort für weitere Informationen siehe:

Wenn Node von den Quellen installiert wurde, dann wird npm eine korrekte Shebang-Linie mit absolutem Pfad zur node Binärdatei haben und kann verwendet werden, wenn node nicht im PATH ist.

+0

'PATH ="/root/.nvm/versionen/node/v6.10.0/bin: $ PATH "' löste mein Problem – Jordane

0

Sie nicht tun, was @rsp vorgeschlagen, anstatt hart codierte die Version Sie wie diese Quelle NVM Skript sollte:

. /root/.nvm/nvm.sh 

NVM für die Version beheben sollten, wenn Sie die Standardeinstellung ein, auf diese Weise werden Sie nicht zu diesem Skript zurückkehren, nur weil Sie auf die neuere NodeJS-Version aktualisiert haben.