181
189

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

開発者(個人)のためのJenkins - Slave編

Last updated at Posted at 2014-10-04

はじめに

「開発者(個人)のための」としているのは、別に自分でやっても良いんだけど Jenkins に任せられるなら任せたい、くらいのモチベーションを表現したつもりです。

ここでは、スレーブの作り方と使い方を簡単にまとめてみました。

環境

  • Ubuntu 14.04 LTS
  • Jenkins 1.580, 1.582
    • 途中から 1.582 に Upgrade しました

スレーブの設定方法

まずはスレーブを作ってみる

とりあえず作るなら、localhost だけで十分です。

スレーブの新規作成

SlaveSetting-First-001.png

SlaveSetting-First-002.png

SlaveSetting-First-003.png

スレーブの設定

SlaveSetting-First-004.png

赤枠で囲んでいる部分が、手を加えている場所です。

  • 「リモートFSルート」はディレクトリを指定します。存在しないディレクトリでも構いません。勝手に作ってくれます。
  • 「ラベル」は空白区切りで複数指定できます。私はついついコンマ区切りと間違えてしまいます。
  • 起動方法は、「SSH経由でUnixマシンのスレーブエージェントを起動」を選択し、「ホスト」をlocalhost、「認証情報」は『localhostに存在するアカウント』を登録しています。
    • 認証については、こちらに少しだけ書いてます。

設定が終われば保存します。
masterと同じ数値が出ていますが、localhostなので当然ですね。

スレーブの起動を確認

SlaveSetting-First-005.png

新しくスレーブが追加されています。

スレーブ作成に必要なもの

先ほど作ったスレーブのログを見るとよく分かるのですが、

SlaveSetting-Config-001.png

赤枠で囲んだ部分で書いてある通り、java -jar slave.jar が、slave の起動方法です。
java -jar slave.jar さえ実行できればスレーブが構築できるわけです。

slave.jar は、「SSH経由でUnixマシンのスレーブエージェントを起動」であれば、Jenkinsが勝手に配置してくれます。

基本的には、スレーブ化したいマシンにSSHログインすれば良いので、上記の設定で localhost や、認証をそれぞれ置き換えるだけですが、
次のような場合は、「SSH経由でUnixマシンのスレーブエージェントを起動」ではうまくいきません。

Proxy経由でスレーブマシンと接続する場合

「SSH経由でUnixマシンのスレーブエージェントを起動」ではProxyやSocksなどの設定ができません。
そのため、Proxy経由の場合は、「マスターでコマンドを実行してスレーブを起動」で、slave.jar をたたく必要があります。

SlaveSetting-Config-002.png

jenkins master マシンの、~/.ssh/config で、ProxyCommand で Proxy 設定を済ませている必要があります。
また、-t オプションが必要かもしれません。

/etc/profile や ~/.bashrc で設定した環境変数を使用したい場合

結論から述べると、こんな感じで設定すればできます。

SlaveSetting-Config-003.png

「SSH経由でUnixマシンのスレーブエージェントを起動」にせよ「マスターでコマンドを実行してスレーブを起動」にせよ、
non-interactive モードでSSH接続するため、/ect/profile.bashrc といったファイルは読み込まれません。

そもそもJenkinsは、Jenkins上で設定したこと以外は何の設定もされない、という状態が基本です。PATH や JDK や Maven のバージョンなどが、環境によってバラバラになるのを防ぐため、Jenkinsで設定できるようになっています。
スレーブ固有の設定は、スレーブごとに設定できるようになっています。
(キャプチャ画像でチラチラ見えている、「環境変数」がまさにそれです)

とはいえ、いちいちGUIで設定するのも面倒なのと、手元でコツコツ整えた環境のままスレーブ化したい場合も多いので、↑の方法を用いることもあります。

スレーブ用マシンを自動構築するプラグイン

Docker Plugin

Dockerコンテナをスレーブとして生成するプラグインです。

コンテナはスレーブを必要とするタイミングで自動起動され、不要になり次第停止します。
8月末に出た docker 1.2 が動かなかったのですが、10/3 に更新されたDocker Plugin 0.8 では修正されています。

私はてっきり、Jenkinsサーバー上に Docker が無いと使えないものかと思っていましたが、Docker daemon の-H オプションで指定したポートを使ってAPIをコールし、コンテナを起動する仕組みのようなので、別のサーバー上のDockerもスレーブ化できるかもしれません。

Amazon EC2 Plugin

AWS EC2 をスレーブとして構築できるプラグインです。
設定したスレーブが使用されるタイミングでEC2が生成されます。
不要な時は、Jenkinsの画面から削除することも可能です。
VPCも使えます。

懸念点として、Access KEY と Credential KEY を Jenkinsの設定にベタ書きする必要があります。

使用するスレーブを指定する

基本

ジョブの設定から「実行するノードを制限」をチェックします。

SlaveJob-Config-001.png

式とある通り、&&|| などでコントロールすることも可能です。
このラベルとは、スレーブの名前も含みます。

ラベル名には、UseProxy とか、Ubuntu とか、Java8 とか、環境や用途をつけると便利です。

NodeLabel Parameter Plugin で、パラメータで指定する

文字列でパラメータ化した値を使おうとしてもうまくいきません。
スレーブの指定をパラメータ化したい場合は、別途プラグインを使用する必要があります。

NodeLabel Parameter Plugin をインストールすると、パラメータに「Node」と「Label」の項目が追加されます。

これらのパラメータを使用すると、「実行するノードを制限」の設定は無視されます。

Node

SlaveJob-Config-002.png
SlaveJob-Config-003.png
SlaveJob-Config-004.png

実行するノードをプルダウン形式で選択できるようになります。
選択肢はスレーブ名になるようです。

Label

SlaveJob-Config-005.png
SlaveJob-Config-006.png

使用するノードを入力して指定します。
Show nodes で確認できるようです。最近追加されたんでしょうか。便利になりましたね。

まとめ

スレーブがその威力を発揮するのは、「マルチ構成プロジェクト」を使用する時だと思います。お手軽な並列実行機能です。
また、スレーブを外部サーバーに立てれば、お手軽な負荷分散もできます。

「誰かが作った秘伝のタレなマシンじゃないとビルドできない」 + 「Jenkins がなぜが動かない」という絶望下でも、スレーブを使えば Jenkins で自動化することも可能です。

181
189
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
181
189

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?