質問: シェルスクリプトの中にNodeJsをインストールするコマンドが書いてあり、 Jenkinsのジョブを実行するとそのスクリプトが実行されます。 Jenkinsのジョブを使用して実行すると コンソール出力に下記のメッセージが出ていてNodeJsがインストールされません。 ``` sudo: no tty present and no askpass program specified ``` しかし、vncを使用して遠隔ログインしターミナルを立ち上げて シェルスクリプトを実行するとエラーが出ずインストールが完了します。 vncログインしたものと全く同じログインをしたユーザーの環境上で Jenkinsは起動しているのですが、Jenkins自体は別の権限?で動作しているのでしょうか? ■環境 MacOSX:10.10.3 【追記】 大事なことを書き忘れてました visudoで下記を追加はしたのですが失敗します。 ``` $ sudo /usr/sbin/visudo ------------------------ # Defaults requiretty # tty無しの場合sudoさせない Defaults:jenkins !requiretty # ユーザjenkinsはtty無しでsudo可能 jenkins ALL=(ALL) NOPASSWD:ALL # ユーザjenkinsはパスワード無しでsudo可能 ```
回答: Jenkinsのジョブはデフォルトだとjenkinsというユーザで実行されているようなので、jenkinsというユーザの権限を確認してみてください(デフォルトだとルート権限は無いと思います)。また、Jenkinsのジョブの実行ユーザはシェルの中でwhoamiコマンドを叩くなどすれば確認出来ます。 なお、該当エラーメッセージへの対処方法は以下が参考になると思います。