ジョブの実行ユーザについて

3,375 views
Skip to first unread message

Toshiaki Kuroiwa

unread,
Feb 21, 2011, 3:07:00 AM2/21/11
to huds...@googlegroups.com
はじめまして、黒岩と申します。

ひと月前から、少しずつ
Jenkins(Hudson)環境を構築し、ビルドを整備しております。
CIツール自体、触るのが初めてで、試行錯誤しながら
ちょっとずつ、ジョブを増やしているところです

そこで、質問があるのですが

◆質問

ジョブの実行ユーザを指定したいのですが
指定することは可能でしょうか?
(パスワードが見えないようにrunasやsuコマンドを使わないで)

既存のビルド環境に対して、Jenkins を入れています。
1サーバ上に、複数ユーザ(ビルド環境)あり
現在は
・ノード1=ユーザ1@サーバA
・ノード2=ユーザ2@サーバA
のように、ユーザ単位ごとに(Jenkinsでいう)ノードを作成しております。

※ジョブを実行するユーザは、slave.jarを実行しているユーザという認識です

ノードという名称から
ノード=1サーバなのかな?というように予想しているのですが
ユーザを指定して実行することはできないのでしょうか?

・slave.jarをrootで実行することはセキュリティの関係で望ましくないと思っています。
・複数ノードに同じサーバを指定すると問題があるのでは?と、不安です。

以上、よろしくお願いします。

◆ 環境
Hudson 1.393
Master: Windows Server2008R2 SP1
Slave1: Solaris 10 x86
Slave2: Ubuntu Linux 10.x

--
==========
▲ Twitter
http://twitter.com/rkiashi
▲ Skype
toshiaki.kuroiwa

Akiko Takano

unread,
Feb 21, 2011, 5:36:02 AM2/21/11
to huds...@googlegroups.com
こんばんは。

わたしは1つのサーバに対し、それぞれ別のアカウントでスレーブのジョブを実行させています。
同じサーバであっても、

サーバA_user1
サーバA_user2

みたいな感じで、スレーブノードとしては2つ作成しています。
で、SSHでスレーブを起動するところで、サーバAのUser1, 2のそれぞれにSSH公開鍵で接続し、スレーブを
起動しています。
(あ、でも、マスターノードがWindowsなんですね)

通常のジョブを サーバA_user1で実行し、エラーがあった時の特殊なジョブを サーバA_user2で行う、みたいなことをしています。


2011年2月21日17:07 Toshiaki Kuroiwa <toshiaki...@gmail.com>:

Toshiaki Kuroiwa

unread,
Feb 21, 2011, 7:18:06 PM2/21/11
to huds...@googlegroups.com
おはようござます。

黒岩です。

なるほど、sshでジョブを実行されているのですね
ssh でのリモート実行に、あまりなじみがなかったので
ちょっと苦手意識?があって、避けていたかも
試しにやってみます

JNLP で、ノードを登録すると
ノードの管理に登録されるのが
ちょっと、うれしくて(関係ないノードを登録したりと)
最近はノード登録に、はまってしまいました

2011年2月21日19:36 Akiko Takano <akiko...@gmail.com>:

Akiko Takano

unread,
Feb 21, 2011, 8:48:45 PM2/21/11
to huds...@googlegroups.com
黒岩さん:

JNLPでの登録って、楽しいですよね。
わたしも『すごい~!』と思っていますし、Windowsスレーブを設定する場合は、ほぼJNLPを使っています。

ただ、スレーブの側のトラブルで、スレーブ側のプロセスが落ちてしまったときは、マスターからSSHを使ってスレーブのプロセスを起動してあげるようにしておくと、ジョブの中断が避けられるかなと思っています。

逆に、Unix系のOSでJNLPでスレーブ化したことがないので質問です。(自分でやってみればいいのですが...)
スレーブのOSのShutdownをおこなうと、JNLPで上がったプロセスは落ちてしまうと思っています。
そうなると、起動したときに、また設定し直しになるんでしょうか。

狭い経験しかないので、いろいろみなさんからも教えていただけると幸いです。

2011年2月22日9:18 Toshiaki Kuroiwa <toshiaki...@gmail.com>:

Toshiaki Kuroiwa

unread,
Feb 23, 2011, 10:18:28 AM2/23/11
to huds...@googlegroups.com
こんばんわ、黒岩です
(メールがチェックできず、返信が遅くなりました)

ssh は、まだ試せておりません。。。
もう少し余裕ができたら、触ってみたいと思っています

> ただ、スレーブの側のトラブルで、スレーブ側のプロセスが落ちてしまったときは、マスターからSSHを使ってスレーブのプロセスを起動してあげ

スレーブ側が落ちるのは想定していませんでした。
ジョブ自体はスレーブ(JNLPプロセス?)が
子プロセスで実行しているのと予想しているので
ジョブに失敗(ジョブのプロセスが落ちる)しても
JNLPプロセス自体は、動作しているかな、と考えております。

> スレーブのOSのShutdownをおこなうと、JNLPで上がったプロセスは落ちてしまうと思っています。
> そうなると、起動したときに、また設定し直しになるんでしょうか。

OS起動時に スレーブ登録するようにしています
(Solaris と Ubuntu Linux で実装し動作させています
/etc/rc2.d などに登録しています。)

■ 参考: スレーブの起動
http://wiki.hudson-ci.org/display/HUDSON/Distributed+builds#Distributedbuilds-Launchslaveagentheadlessly
$ java -jar slave.jar -jnlpUrl
http://yourserver:port/computer/slave-name/slave-agent.jnlp

ただし、ジョブを実行するユーザを指定したいので
/etc/rc2.d に登録したプログラムは root で実行されるので
userA でジョブを実行したい場合、起動スクリプト内で
su - userA -c "java -jar slave.jar -jnlpUrl
http://xxxx:port/computers/slave/slave-agent.jnlp"
と、記述しています。

2011年2月22日10:48 Akiko Takano <akiko...@gmail.com>:

Akiko Takano

unread,
Feb 23, 2011, 7:18:26 PM2/23/11
to huds...@googlegroups.com
黒岩さん、みなさん、おはようございます。

お返事ありがとうございます。
init.d でスレーブの起動をするんですね。

わたしの環境のスレーブはheadlessなので、てっきり『JNLPはブラウザ立ち上げてダウンロードしないといけないので、うちでは駄目かなあ.....』と思っていましたが、なるほど、サイレントでも大丈夫なんですね。

お恥ずかしいですが、勉強になりました。

ポートの制限や環境によって、ベストな方法を検討してみたいと思います。

Reply all
Reply to author
Forward
0 new messages