LoginSignup
9
8

More than 5 years have passed since last update.

Jenkins 経由でNodejsインストール・JSファイル実行・権限設定 メモ

Last updated at Posted at 2015-08-21

インストールに失敗しまくったのでメモ

●Jenkins側の設定画面を開く
●ビルド手順の追加⇒シェルの実行
●シェルスクリプトの中に who am i と記述する。
 これでJenkinsが何ていうユーザーのどの権限で実行されているかわかる
●ジョブの実行

●Jenkinsの起動しているマシンにて、ターミナルを開く
sudo visudo を実行。
●編集モードに切り替えて下記追加、
 ユーザー名の部分に who am i コマンドで表示されたユーザーを記入する

Defaults:ユーザー名 !requiretty   # ユーザjenkinsはtty無しでsudo可能
ユーザー名 ALL=(ALL) NOPASSWD:ALL # ユーザjenkinsはパスワード無しでsudo可能

追記1

 このままだとnode コマンド実行するとエラーになる。

 どうやらパスが通ってないみたい

 最初、Jenkinsのシェルスクリプトに

export= /usr/local/bin
echo $PATH

 としたら 

/usr/local/bin 以外なくなってしまった。

 これの影響だと思うけど、

cp コマンドが not found になる。

上書きになったみたい、ほんとは 

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 

ってなる予定だったのに・・・

だもんで

export= /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
echo $PATH

に変更
 これで、

node [javascriptファイル]

が動いたし、cpのコマンドエラーもなくなりました。

※(注)
 自分のMacには.bash_profileなかったけど
 本来は下記の型のように.bash_profileにちゃんと環境変数を設定する必要があると思う。
 Jenkinsのあるサーバーは勝手にいじっていい環境じゃないので今は上記で対応
 http://qiita.com/nbkn/items/01a11392921119fa0153

追記2

Jenkinsのジョブが完了しませんでした。

■問題点

node **.js
と実行するとファイルサーバーが起動中となり
コマンドラインにレスポンスが返ってこないため
Jenkinsのジョブがいつまでも実行中となり
ファイルサーバー起動中はジョブが終了となりません。

■解決
 バックグラウンド実行すれば完了した。
 コマンドラインは奥が深いなあ、おもしろい

node **.js &

追記3

 プロセスをkillする方法も書いておく、
 nodeは基本的に2重起動できない

pkill -kill -f node

追記4

 バックグラウンドで実行する時に、プロセスをKillしないよう記述しないと
 Jenkinsはジョブ実行中に起動したプロセスをすべてKillする。

BUILD_ID=dontKillMe 

を入れないとJenkinsは起動したプロセスをすべてkillするため修正

BUILD_ID=dontKillMe node **.js &

■下記の方のページを参照
 http://d.hatena.ne.jp/penkoba/20130622/1371894105

「これは https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller に書いてある通り、
この変数をなにか適当な値で上書きしないとJenkinsのProcessTreeKillerという仕組みによって
ビルドのジョブが完了した時点でその中で起動したプロセスはすべて殺されてしまいます。」との事

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8