JenkinsとOpenStack Plugin

Jenkinsはよく用いられるCIツールです。Jenkinsにはビルドやテストを実際に実行するスレーブを自動的に追加して、ビルドを実行する機能が備わっています。Jenkinsは様々なプラグインが揃っているのが特徴で、AWSやOpenStack等のクラウド上にスレーブを追加するプラグインもあります。JenkinsのOpenStackをプラグインを利用すればビルド実行時にスレーブを自動追加する事が可能となります。

Openstack pluginのインストール

Jenkinsの管理 > プラグインの管理でOpenStack Cloud Pluginを検索してインストールします。JCloud PluginをOpenStackに特化させた軽量版です。

https://wiki.jenkins-ci.org/display/JENKINS/Openstack+Cloud+Plugin

OpenStack内のスレーブとJenkinsマスターとの接続

OpenStack上に作成されるインスタンスはJenkinsマスターと接続しますが、その場合の接続方法をSSHかJNLP接続の2種類から選択できます。SSHの場合はインスタンス作成時のKeypairと接続のSSHキーを合わせておくと、起動後にマスター側からインスタンスに対してSSH接続がされ、マスターに接続されます。OpenStackの場合はJenkinsとスレーブが同じNW内にあるか、同一のRouterに接続されたネットワークであればSSHで通信できます。外部NWにJenkinsのマスターが配置されている場合はNAT構成となるためJNLPの機能でスレーブとなるインスタンスからマスターに接続します。今回のOpenStack Cloud Plugin を利用して、OpenStackにスレーブを立てる場合は一般的にはJNLPを使った接続になると思います。

JNLP接続の場合

JNLP接続は起動時のcloud-initで実行されるスクリプトが実行され、作成されたインスタンスからマスターに接続します。スクリプトの中でマスターから接続用のソフトをDownload後、自身のホストネームでマスターに対して接続します。以下サンプルスクリプトです。ユーザーデーターのスクリプトはJenkinsの管理>Managed filesから追加する事が出来ます。見ていただくとわかりますが、Javaの実行ファイルですので起動するイメージには事前にJavaをインストールして置く必要があります。

#!/bin/bash

sudo yum -y install wget
sudo wget http://jenkins.aramaki.com/jnlpJars/slave.jar
sudo var=`curl http://169.254.169.254/latest/meta-data/hostname | cut -d"." -f1`
sudo java -jar slave.jar -jnlpUrl http://jenkins.aramaki.com/computer/${var}/slave-agent.jnlp

認証がセットアップされている場合は、接続スクリプトに認証情報を埋め込む方法もありますが、今回はAnonymous接続でのスレーブ接続を許可しておき、認証無しで接続出来るようにしておきます。

スクリーンショット 2015-06-27 15.24.40

Openstackプラグインの設定

Jenkinsの管理 > システムの管理を選択します。ページ下部の追加を選択して、Cloud(OpenStack)を選択します。End Point URLはOpenStackのKeystoneのURLです。IdentityはProject:UserIDを入力します。Test Connectionを選択すると接続を確認できます。

スクリーンショット 2015-06-27 10.51.57

Cloud Instance Templatesをクリックすると、仮想マシンテンプレートの設定が行えます。正常にOpenStackに接続できていればImage/Hardware/Network等の情報は自動的にOpenStack側から引っ張ってきますので適切な物を選択します。LabelsにこのOpenStack連携を示す文字列を入力しておきます。詳細は後述しますが、このラベルを元に、起動されるインスタンスでジョブが実行されることになります。SSH Credentialsはマスターからこのスレーブに接続する場合の証明書 or User情報を指定します。JNLPでは無く、SSH接続を行う場合に重要です。通常はこの後出てくるキーペアと対になっている証明書を選択します。証明書は事前にJenkinsの設定>グローバルセキュリティでUploadしておきます。

スクリーンショット 2015-06-27 14.44.09

高度な設定を選択するとさらに細かい設定が可能です。SSH/JNLP接続を選択や、Security Groupの指定等が可能です。JNLP接続の場合は先ほど示したScriptをUser Dataで選んでおきます。

スクリーンショット 2015-06-27 14.52.04

保存を選択します。

動作の確認

ビルドを開始する前に作成した設定で正常にスレーブが追加されるかを確認します。Jenkinsの管理 > ノードの管理を選択します。グレーの枠でProvision via OpenstackPluginと出てきますので、先ほど作成したテンプレートを選択します。正常にビルドされて、接続さされれば設定は問題ありません。いつまでたってもX印が消えない場合はノードを選択してログをクリックすると情報が表示されます。

スクリーンショット 2015-06-27 14.57.54

ビルドでのインスタンスの作成

ビルドの中でインスタンスを作成します。新規ジョブ>フリースタイルプロジェクトのビルドの画面を選びます。ビルド環境でOpenStack Instance Creationを選択しておくとビルド実行時にインスタンスが作成されます。注意するのは実行するノードを制限を選択して、先ほどテンプレートで追加しておいたのラベルを指定しておくことです。指定が無いと、アイドルのノードでビルドが実行されてしまいせっかく作成したノードを利用しません。

スクリーンショット 2015-06-27 15.12.47

広告
JenkinsとOpenStack Plugin

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中