Posted at

ローカルでtest kitchenする方法

More than 3 years have passed since last update.

ローカルに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を使うと簡単にインストールできます。


sh

brew install vagrant



test kitchenを走らせるCentOSの構築

bootstrap.shとsetup.shを用意しておけば初回のvagrant up実行時に、

自動でtest kitchen環境が構築されるので、かなり便利です。


VagrantFileの作成

まずは好きなディレクトリ配下でvagrant initしてください。


sh

cd hogehoge

vagrant init

これにより、VagrantFileが作成されました。下記2点を修正してください


sh

・・・省略・・・

config.vm.box = "bento/centos-6.7"

・・・省略・・・

config.vm.provision :shell, :path => "bootstrap.sh"



bootstrap.sh

bootstrap.shファイルを作成します。

vagrantユーザで環境を作成するために必要です。

これをやらないとすべてrootユーザで作成されてしまいます。


sh

sudo -u vagrant sh /vagrant/setup.sh



setup.sh

bootstrap.shからこのsetup.shが呼び出されます。

下記の手順がすべて自動実行されます。


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環境を使ってみる

まずはログイン


sh

vagrant ssh


sampleをとってきてkitchen testしてみます。


sh

git clone https://github.com/hiramotoys/cookbook-sample.git

cd cookbook-sample
kitchen test

kitchen testは結構時間がかかります。

環境構築に成功していれば、dockerが立ち上がって、そこにレシピが適用され、serverspecが実行されるはずです。


参考 kitchen testが実行される環境の選択方法について

今回使ったcookbook-sample/.kitchen.ymlを参照してください。そこに、


sh

driver:

name: docker

というのが書かれてあります。ここを変更することで、docker以外の環境でtest kitchenできます。


ハマりどころ

dockerで動かすレシピ適用先のゲストkernelが、vagrantで動かしているホストのkernelよりも新しすぎる場合、

kernel too old と怒られます。

docker上でubuntu14などの新しめのディストリを使う場合は注意してください。

gemはtest-kitchenという名前だが、実行コマンドは、「kitchen test」です。