chef cookbook の文法チェックをする: knife cookbook test + Travis CI

昨日は chef cookbook のテストのひとつとして、foodcritic を取り上げました。
参考にした記事 には、実はもうひとつ続きがあるので、それを紹介します。
もちろん、単なる紹介では面白くないので「簡単に使える」ようなパッケージも用意しています。

今回紹介するのは knife cookbook test による文法チェックです。
みなさん、knife cookbook test してますか? ちなみに僕はこの記事を読んで初めてその存在を知りました。
knife cookbook test はレシピやテンプレートの文法を確認してくれます。

手動で実行するには

$ knife cookbook test some_cookbook -o .

のように実行します。cookbook が配置されているディレクトリ(cookbooks や site-cookbooks)で実行するのがポイントです。

もちろん、cookbook を書き換える度にこれを手動で実行するのは面倒ですから、Travis CI で使えるようにしましょう。
前回と同じ順序で進めていきます。

必要なファイルを作る

まずは .travis.yml です。

language: ruby
gemfile:
   - tests/support/Gemfile
rvm:
  - 1.9.2
  - 1.9.3
script: bundle exec rake chef:tests

rake で実行するタスクを chef:foodcritic から chef:tests に変更しました。

次に tests/support/Gemfile です。

source "https://rubygems.org"

gem 'rake'
gem 'rake-chef-syntax'
gem 'rake-foodcritic'

rake-chef-syntax を追加しています。

最後に Rakefile です。

#!/usr/bin/env rake

require 'rake-foodcritic'
require 'rake-chef-syntax'

namespace :chef do
  task :tests => [:foodcritic, :syntax_check]
end

Rakefile では rake-chef-syntax を読み込んでいます。
また、chef:foodcritic と chef:syntax_check を続けて実行するために chef:tests というタスクを定義しています。

最後に git push して github に反映させれば Travis CI がテストを走らせてくれます。
実際の実行の様子はこちらでどうぞ。