きっかけ
- サーバーのセットアップ後の serverspec を自動化できないかなと思った
- serverspec を実行するトリガーをサーバー再起動などのタイミングで行えるようにしたい
- 以前にも同じようなことをしたが、今回は監視対象(テスト対象)側にトリガーがあるのが相違点
こんな感じで出来れば
準備
ポイントを列挙。
jenkins サーバー
- jenkins のインストール
- ruby のインストール
- serverspec のインストール
/etc/sudoers
にDefaults:jenkins !requiretty
を設定する- jenkins ユーザーの公開鍵生成
- API を利用するための token を生成する
サーバー
serverspec を使ってテストをするサーバーは以下のような設定を施しておく。
- jenkins ユーザーの作成
/etc/sudoers
にjenkins 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¶m=param"
jenkins 側で以下のようにビルドのパラメータ化
を設定しておく。
ジョブのコピー
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 での構築直後のテストを自動化
- テストにパスしたホストを監視サーバーに自動で追加する