Test Kitchen ドライバに kitchen-dokken を使う
確認環境
- Ubuntu 16.04, macOS Sierra
- ChefDK v2.3.4
- (テスト対象: Ubuntu 16.04)
kitchen-dokken
Chef Cookbook のテストフレームワークである Test Kitchen のドライバの一つで、docker を使った仮想環境で Cookbook テストができるもの。デフォルトのドライバである Vagrant よりも高速に仮想環境を立ち上げられる。
kitchen-docker ? dokken ?
kitchen-docker
ではなく、kitchen-dokken
。パット見で野良ドライバに見えてしまいそうだが、ChefDK にも同梱されておりちゃんとメンテされているドライバである。kitchen-docker のハマりどころに対応した、provisioner の限定されたドライバになっている。
※ 自分は kitchen-docker の service
周りでハマることが多かった (Errno::ENOENT: No such file or directory - /sbin/status
や service :enable
系) が、kitchen-dokken では解消できた
VM ではないのでコレひとつで完全なテスト環境になるものではないが、kitchen-docker
よりはコンテナ固有の問題にハマりにくく、特定のケースでは kitchen-vagrant
の良い代替になると思われる。
設定
ローカルテストおすすめ設定
なるべく余計なところでハマらないように
-
pid_one_command
を指定する - カスタマイズされた dokken-images を使う
- privileged コンテナを使う
- verifer には InSpec を使う
- (kitchen-dokken に限らないが) ChefDK パッケージで一式インストールする
---
driver:
name: dokken
chef_version: latest
transport:
name: dokken
provisioner:
name: dokken
verifier:
name: inspec
platforms:
- name: ubuntu-16.04
driver:
image: dokken/ubuntu-16.04
privileged: true
pid_one_command: /sbin/init
suites:
- name: default
run_list:
- recipe[mycookbook::default]
verifier:
inspec_tests:
- test/smoke/default
注意
Verifier
https://github.com/someara/kitchen-dokken#tmpfs-on-tmp にあるように、Bats や Serverspec を使う場合は verifier
の指定がいる。
verifier:
root_path: '/opt/verifier'
sudo: false
あくまでコンテナ
環境が docker コンテナゆえに daemon 系プログラムや networking の挙動は期待通りにならないかもしれない。Chef を使うときは VM を想定していることが多いと思うので、そういった場合の受け入れテストとしては使えない。