Hello, Itamae from docker!!
Itamae の plugin 書いててそろそろ test 欲しいなあとおもって2年くらいたちましたが、 ようやく Docker 使って test 書きました。
方向性
ここでテストを実施するとして何に対しておこなうのかというのを考えましたが、E2Eのテストだけで良いだろうという方向でテストを書くようにしています。
VMを立てて実行することにはチョット大袈裟だろうということでもっと簡単に、楽にということで docker
を選択しています。
itamae で E2E のテストなのでここでは serverspec を利用してテストを行います。
E2E のテスト準備として docker
内で最初に目的のレシピを実施し、そのレシピが正しく動作しているかをテストしています。
準備とテスト実施
準備として以下の gem
を追加しますが、 docker-api.gem の方はなくてもとくに問題ないです。
serverspec
の対象バックエンドで docker
が指定できるようになりますが、 docker
内 (docker run -t hoge bundle exec serverspec
など) で serverspec
を実施すれば実行できますので、好みで追加しましょう。
spec.add_development_dependency "docker-api"
spec.add_development_dependency "serverspec"
次に Dockerfile
を作成します。ここでは単純に必要な準備を実施、テストしたいディレクトリの追加、 bundler
を利用して gem
のインストールを実施してから、対象のディレクトリで itamae
の local
を指定して対象の docker
にレシピ適用します。そのあと docker run
や serverspec
を実施することでテストをすることが可能となります。
FROM ruby
RUN echo "gem: --no-rdoc --no-ri" >> /.gemrc
RUN gem install bundler
ADD . /app
WORKDIR /app
RUN bundle install
RUN bundle exec itamae local samples/recipe.rb
CMD bundle exec rake
itamae-plugin-resource-pip
itamae-plugin-resource-pip でできるようになってます。 とくに docker.io とかで公開していませんので、以下に例を
cd /path/to/itamae-plugin-resource-pip
docker build -t katsyoshi/itamae-plugin-resource-pip .
docker run -t katsyoshi/itamae-plugin-resource-pip bundle exec rake
おわり
これやろうと思って調べてたらみつからずに Dockerfile
書き終えて、travis を追加しようとしたときに、@sue445 さんがやってたのをみつけてしまった。。。