ローカルにtest kitchen環境を作りました。
具体的には、Vagrantを使ってMac上でCentOSを動かし、その中でDockerを立ちあげtest kitchenします。
どこも汚さないので、カジュアルにレシピを書いてテストできます。
そもそもtest kitchenとは
こちらで詳しく紹介されてます。
http://qiita.com/eielh/items/64e197f4f1eaf5ff6097
今回の環境構成
・Mac OSX 10.10
・Vagrant 1.7.4
・CentOS 6.7
・Docker 1.7.1
構築手順
vagrantのインストール
CentOS環境を構築するにあたって、まずはvagrantをインストールします。
homebrewを使うと簡単にインストールできます。
brew install vagrant
test kitchenを走らせるCentOSの構築
bootstrap.shとsetup.shを用意しておけば初回のvagrant up実行時に、
自動でtest kitchen環境が構築されるので、かなり便利です。
VagrantFileの作成
まずは好きなディレクトリ配下でvagrant initしてください。
cd hogehoge
vagrant init
これにより、VagrantFileが作成されました。下記2点を修正してください
・・・省略・・・
config.vm.box = "bento/centos-6.7"
・・・省略・・・
config.vm.provision :shell, :path => "bootstrap.sh"
bootstrap.sh
bootstrap.shファイルを作成します。
vagrantユーザで環境を作成するために必要です。
これをやらないとすべてrootユーザで作成されてしまいます。
sudo -u vagrant sh /vagrant/setup.sh
setup.sh
bootstrap.shからこのsetup.shが呼び出されます。
下記の手順がすべて自動実行されます。
#!/usr/bin/env bash
curl -L -O https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.10.0-1.el6.x86_64.rpm
sudo rpm -ivh chefdk-0.10.0-1.el6.x86_64.rpm
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
echo 'export PATH=/opt/chefdk/bin:$PATH' >> ~/.bash_profile
rm chefdk-0.10.0-1.el6.x86_64.rpm
sudo yum -y install git docker-io.x86_64 docker-io-devel.x86_64
gem install berkshelf knife-zero knife-ec2 test-kitchen kitchen-docker serverspec
sudo usermod -aG docker vagrant
sudo service docker start
完成したtest kitchen環境を使ってみる
まずはログイン
vagrant ssh
sampleをとってきてkitchen testしてみます。
git clone https://github.com/hiramotoys/cookbook-sample.git
cd cookbook-sample
kitchen test
kitchen testは結構時間がかかります。
環境構築に成功していれば、dockerが立ち上がって、そこにレシピが適用され、serverspecが実行されるはずです。
参考 kitchen testが実行される環境の選択方法について
今回使ったcookbook-sample/.kitchen.ymlを参照してください。そこに、
driver:
name: docker
というのが書かれてあります。ここを変更することで、docker以外の環境でtest kitchenできます。
ハマりどころ
dockerで動かすレシピ適用先のゲストkernelが、vagrantで動かしているホストのkernelよりも新しすぎる場合、
kernel too old と怒られます。
docker上でubuntu14などの新しめのディストリを使う場合は注意してください。
gemはtest-kitchenという名前だが、実行コマンドは、「kitchen test」です。