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/npm
Code language: Bash (bash)

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

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

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

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

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

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

echo "which npm" which npm exit 0
Code 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 -v
Code 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をコピーしました