ようへいの日々精進XP

よかろうもん

jenkins の API を使って serverspec を実行する

きっかけ

  • サーバーのセットアップ後の serverspec を自動化できないかなと思った
  • serverspec を実行するトリガーをサーバー再起動などのタイミングで行えるようにしたい
  • 以前にも同じようなことをしたが、今回は監視対象(テスト対象)側にトリガーがあるのが相違点

こんな感じで出来れば

f:id:inokara:20130729011828p:plain


準備

ポイントを列挙。

jenkins サーバー

  • jenkins のインストール
  • ruby のインストール
  • serverspec のインストール
  • /etc/sudoersDefaults:jenkins !requiretty を設定する
  • jenkins ユーザーの公開鍵生成
  • API を利用するための token を生成する

サーバー

serverspec を使ってテストをするサーバーは以下のような設定を施しておく。

  • jenkins ユーザーの作成
  • /etc/sudoersjenkins ALL=(ALL) NOPASSWD:ALL を設定する
  • jenkins サーバーの jenkins ユーザー公開鍵を対象サーバーに作った jenkins ユーザーの authorized_keys に登録

jenkins の API について

jenkins は API を使って以下のようなことが出来る。詳しくはこちらを。今回、利用する API を記載。

ビルドの実行

curl -X POST "http://jenkins-server:8080/job/genarate_spec/build?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ビルドをパラメータ付きで実行する

ビルドをパラメータ付きで実行したい場合には buildWithParameters を利用する。

curl -X POST "http://jenkins-server:8080/job/serverspec/buildWithParameters?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&param=param"

jenkins 側で以下のようにビルドのパラメータ化を設定しておく。

f:id:inokara:20130728233038p:plain

ジョブのコピー

original というジョブを hogehoge という名前のジョブを生成する。

curl -d "name=hogehoge&mode=copy&from=original" http://1jenkins-server:8080/createItem

ジョブの登録

以下のジョブを登録する。

serverspec の対象となるホストを追加するジョブ

serverspec を使ってテストをするホストを追加するジョブを以下のように設定する。

設定項目 設定内容 備考
プロジェクト名 genarate_spec 適宜設定する
ビルドのパラメータ化 テキスト 以下を参照
ビルド シェルの実行 以下を参照

ビルドのパラメータ化 で以下を設定する。

設定項目 設定内容 備考
名前 host_name API の URL パラメータとして渡す
デフォルト値 localhost 適宜設定する
説明 任意で設定

シェルの実行 で以下を設定する。

念の為にもろもろをフルパスで記載。

serverspec を実行するジョブ

serverspec を実行するジョブを以下のように設定する。

設定項目 設定内容 備考
プロジェクト名 serverspec 適宜設定する
ビルドのパラメータ化 テキスト 適宜
ビルド シェルの実行 以下を参照

ビルドのパラメータ化 で以下を設定する。

設定項目 設定内容 備考
名前 host_name API の URL パラメータとして渡す
デフォルト値 localhost 適宜設定する
説明 任意で設定

シェルの実行 で以下を設定する。

ジョブをビルドする

テスト

以下のように serverspec のテストを設定する。今回は簡素なテストだが環境に合わせたテストを設定する。

ジョブをビルドする(serverspec を実行する)

ジョブをビルドするタイミングは以下のタイミングを想定する。

  • サーバーの初期設定直後
  • サーバーが再起動し直後

これらを想定して以下のようなシェルスクリプトを記載し rc.local に適宜設定する。

rc.local に以下のように設定する。

サーバー再起動してみる

サーバーを再起動したタイミングで以下のジョブが実行される。

  • serverspec の対象となるホストを追加する(すでに存在する場合には何もしない)
  • serverspec を実行する

ということで

ダラーッと書いてきたが、jenkins を利用することで、サーバー構築直後や再起動直後のサーバーのテストを自動化することができたような気がするので、今後、以下のようなことをやってみたい。

  • chef での構築直後のテストを自動化
  • テストにパスしたホストを監視サーバーに自動で追加する