dockerにitamaeレシピを適用してserverspecでテストする
やりたいことは表題の通り。結果はGitHubに。
docker
まずはDocker for Macをインストール。アイコンかわいい。
起動したら適当なイメージを落としとく。
$ docker pull ubuntu:xenial
gems
適当なディレクトリを切ってGemfile
を作成。
# Gemfile source "https://rubygems.org" gem "itamae" gem "serverspec" gem "docker-api"
itamae
知らない間にジェネレータが出来ていたので、それを使って適当なroleを作ってレシピを書く。
$ bundle exec itamae g role sample_role
# roles/sample_role/default.rb user "sample_user"
Dockerイメージを指定してワザマエ。
$ bundle exec itamae docker --image=ubuntu:xenial roles/sample_role/default.rb INFO : Starting Itamae... INFO : Recipe: /Users/joe/Workspace/src/github.com/Joe-noh/docker_itamae_serverspec/roles/sample_role/default.rb INFO : user[sample_user] exist will change from 'false' to 'true' INFO : Image created: sha256:6908edb854d7c123c8985da5a475a74f2f5e3437458cb229ae4abac6d14ed116
レシピを適用した状態のイメージがつくられる。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 6908edb854d7 About a minute ago 122.7 MB
serverspec
spec_helper.rb
で、バックエンドに:docker
を指定する。使うdocker imageは環境変数経由で渡すことにした。
# spec/spec_helper.rb require "serverspec" require "docker" set :backend, :docker set :docker_image, ENV['DOCKER_IMAGE']
さきほど書いた適当なレシピに合わせたテストを書く。
# spec/sample_spec.rb require "spec_helper" describe user('sample_user') do it { should exist } end
$ docker images
したときに表示されたIMAGE IDを指定してテストを実行する。
$ DOCKER_IMAGE=6908edb854d7 be rspec . Finished in 2.44 seconds (files took 0.53189 seconds to load) 1 example, 0 failures
通った。眠い。