Jenkinsで、npm: コマンドが見つかりません

Jenkinsジョブを実行したら、npm loginの箇所で、「npm: コマンドが見つかりません」エラーになってしまいました。

結論からいうと、nvmでインストールしたnpmだったので、JenkinsでnpmへのPATHが通っていませんでした。

npm: コマンドが見つかりません

GitHub - ninton/jquery.jpostal.js: 郵便番号から住所入力するjQueryプラグイン
郵便番号から住所入力するjQueryプラグイン. Contribute to ninton/jquery.jpostal.js development by creating an account on GitHub.

Jpostalは郵便番号から住所を自動入力するjqueryプラグインで、筆者が開発しています。Jpostalは、githubでソース公開、npmでもソース公開、Google Cloudでホスティングしています。

最近、郵便データの更新処理からGoogle CloudへのデプロイをJenkins化したんですね。その作業中のことです。

自分のPCのターミナルでは、githubへのpushや、npmへの公開、Google Cloudへの自動デプロイまで、問題なく実行できました。

あともう少しね

npm_publish.sh

#!/bin/bash -ue

expect -c "
  set timeout 10
  spawn ./bin/npm_login.sh
  expect \"Username:\"
  send \"$NPM_USER\n\"
  expect \"Password:\"
  send \"$NPM_PASS\n\"
  expect \"Email: (this IS public)\"
  send \"$NPM_EMAIL\n\"
  expect eof
  exit
"

cd jquery.jpostal.js
npm publish

Code language: Bash (bash)

npm_login.sh

#!/bin/bash -ue

npm login
Code language: Bash (bash)

ところが、Jenkinsジョブで実行すると、npm_login.shの3行目で、

npm: コマンドが見つかりません

と表示されてしまいました。

何かインストールを忘れてない?

Jenkinsサーバでコマンドが不足していることが原因で、Jenkinsジョブが動かないことは、よくあることです。Jenkinsサーバにsshログインして、該当するシェルスクリプトを実行してみました。すると、最後まで実行できました。

npmはnvmでインストールしました。npmが動くか確認してみると、問題ないようです。

$ npm -v
6.13.4

$ which npm
/home/jenkins/.nvm/versions/node/v12.16.1/bin/npmCode language: Bash (bash)

Jenkinsサーバのターミナルも問題ないようね

JenkinsのConfigureのExecute Shellで、npm -vを試しました。

npm -v
exit 0Code language: Bash (bash)

Configureを保存して、Build Nowして、Console Outputを見ると、「npm: not found」

+ npm -v
/tmp/jenkins7559008830890794218.sh: 2: /tmp/jenkins7559008830890794218.sh: npm: not foundCode language: Bash (bash)

JenkinsのConfigureのExecute Shellで、npm -vを試しました。

echo "which npm"
which npm
exit 0Code language: Bash (bash)

Configureを保存して、Build Nowして、Console Outputを見ると、「which npm」でエラー終了しているようです。

ここいたって、ようやく、JenkinsでnpmへのPATHが通っていないことに気づきました。

つまり、凡ミス?

Jenkinsは ~/.bashrc を読み込まないのね

PATHを通す

JenkinsのManage Jenkins>Configure SystemのGlobal propertiesでPATHを設定してもいいでのすが、将来nvmでnodeバージョンを切り替えたら、PATHも変更する必要があります。

nvm-wrapper プラグイン

nvm-wrapper
NVM wrapper plugin

Jenkinsプラグインのnvm-wrapperを使います。

JenkinsのManage Jenkins>Manage PluginsのAvailableタブで、nvm-wrapperを検索して、インストールします。

次に、各Jobごとに設定します。

nvmを使いたいJobのConfigureを表示します。

Build Environmentの「Run the build in an NVM manage environment」にチェックを付けます。

Node versionに「v12」と入力します。「v12.18.3」のようにきっちり指定してもいいですし、ざっくり「v12」でもいいです。

BuildのExecute shellで

which npm
npm -v
node -vCode language: Bash (bash)

と入力して、Build Now します。

Console outputを見ると、無事、npmやnodeを使えるようになりました。

/home/jenkins/.nvm/versions/node/v12.19.0/bin/npm
+ npm -v
6.14.8
+ node -v
v12.19.0

タイトルとURLをコピーしました