chef cookbook の静的解析テストをする: foodcritic + Travis CI

いつまでもブログのトップが去年を振り返るのままではとてもいかんと思いました。(挨拶)

今日は chef cookbook のテストをする foodcritic について書きます。
とは言え、これを読むシェフ通の方々は既に foodcritic のことぐらいご存知ですよね。

$ gem install foodcritic

して

$ cd some_cookbook
$ foodcritic .

として使うアレです。chef cookbook をルールにもとづいて静的解析してくれる便利ツールですね。

いままで名前は知っていたものの、cookbook はちゃんと動いているしなあ…と放っておいたのですが、
一念発起して使ってみることにしました。
cookbook を書き換えるたびに foodcritic を実行するのは面倒くさいので、
Travis CI を使って自動化します。

必要なファイルを作る

まず .travis.yml を作ります。

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

参考にした記事では Gemfile はサブディレクトリに設置していたのでマネしました。

次に、その tests/support/Gemfile を作ります。

source "https://rubygems.org"

gem 'rake'
gem 'rake-foodcritic'

ここでは rake-foodcritic パッケージを指定します。
元記事では Rakefile にゴリゴリとコードを書いていましたが、DRY に他の cookbook でも使いまわすために gem 化したものです。
ちなみに foodcritic の API を呼んでいるので、こちらの方がやや低コストに実行できます。

最後に Rakefile を作ります。中では rake-foodcritic を呼ぶだけです。

#!/usr/bin/env rake

require 'rake-foodcritic'

あとは Travis CI のサイトで、cookbook リポジトリのテストを有効にして git push すれば完了です。
実際の実行の様子はこちらで確認できます。