chef
docker
test-kitchen

kitchen-docker を断念した人は kitchen-dokken を試してみよう

More than 1 year has passed since last update.

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 を想定していることが多いと思うので、そういった場合の受け入れテストとしては使えない。