Kitchen を使う準備
Kitchen とは
Vagrant、EC2、Docker Engine など、任意のインスタンスを立てて、その中で Cookbook の動作を試行できるツールです。
http://kitchen.ci/
...
情報 |
---|
Docker Engine は Linux でのコンテナ型の仮想化を提供するツールです。 ハイパーバイザ型がマシンそのものをエミュレートするのに対し、コンテナ型の仮想化ではホストマシンのカーネル上に独立したユーザー空間を構築するのにとどまります。 
ハイパーバーザ型と比較すると、コンテナ型の仮想化はホストのもつリソースをほぼそのまま扱えるため、より軽量・高速に仮想化を実現できます。 また、Docker Engine ではコンテナの差分管理が可能です。 たとえば、いちど CentOS をインストールしたコンテナをつくってしまえば、CentOS + apache や CentOS + MySQL などのコンテナを構築するときに毎回 CentOS をインストールする必要はありません。 
Kitchen で Docker Engine を利用するには、kitchen-docker のインストールが必要です。 ChefDK を利用している場合は、次のコマンドでインストールできます。(開発環境にはインストール済みです) コード ブロック |
---|
chef gem install kitchen-docker |
|
.kitchen.yml の編集
Kitchen でインスタンスを立てて Recipe を実行するには、.kitchen.yml を編集します。
Section |
---|
Column |
---|
コード ブロック |
---|
| ---
driver:
name: docker
provisioner:
name: chef_zero
platforms:
- name: centos
driver_config:
image: centos:centos6
forward: 8080
suites:
- name: default
run_list:
- tar
- java
- jenkins
attributes:
|
|
Column |
---|
driver標準では vagrant ですが、開発サイクルを早くまわすために、より軽量・高速な docker を使用します。 driver_configkitchen-docker の設定を書きます。 image ベースとする docker image の名前を指定します。 利用できる image 名は Dockerfile の FROM 句 で指定できるものと同じです。 forwardホストマシンにフォワーディングするポート番号を指定します。 この例では jenkins が使用する 8080 ポートがホストマシンから見えるように指定しています。 run_list実行する Recipe を指定します。 この例では自作した jenkins Cookbook の Recipe を指定しています。 ただ、Jenkins の動作には Java が必要ですので、Opscode Community の java Cookbook、tar Cookbook(java Cookbook の動作に必要) も指定しています。 ※ 外部の Cookbook を使用するには後述する Berksfile の編集が必要です。 attributesRecipe にわたす Attribute (Recipe に対するパラメータのようなもの)を指定します。今回は |
|
...
Berkshelf とは
Cookbook の依存関係を解決してくれるツールです。
http://berkshelf.com/
...
Ruby の Bundler と似ているらしいです。(Ruby わからないですし、Bundler も使ったことないですが)
Berksfile の編集
Opscode Community の Cookbook であれば、次のように名前を指定するだけで OK です。
...
ヒント |
---|
Opscode Community 以外の Cookbook を使うには次のように書きます。 コード ブロック |
---|
# ローカルファイルシステム
cookbook 'pvpnet', path: '/Users/reset/code/riot-cookbooks/pvpnet-cookbook'
# Git リポジトリ
cookbook 'mysql', git: 'git://github.com/opscode-cookbooks/mysql.git' |
|
Kitchen インスタンスの起動とプロビジョニング
次のコマンドを実行すると、.kitchen.yml に基づいたインスタンスが起動し、Recipe が実行されます。
...
ヒント |
---|
どうしてもうまくいかない場合は Kitchen インスタンスを破棄してからプロビジョニングを行います。 コード ブロック |
---|
$ kitchen destroy
$ kitchen setup |
|
kitchen の主なコマンド
コード ブロック |
---|
# インスタンスの生成
kitchen create
# Chef-Solo のインストールと初回のプロビジョニング
kitchen setup
# プロビジョニング
kitchen converge
# Serverspec の実行
kitchen verify
# ssh ログイン
kitchen login
# インスタンスの破棄
kitchen destroy |
Web ブラウザで Jenkins にアクセス
docker コマンドでコンテナのポートを確認します。
...