mmag

ハマったことメモなど

dockerにitamaeレシピを適用してserverspecでテストする

やりたいことは表題の通り。結果はGitHubに

docker

まずはDocker for Macをインストール。アイコンかわいい。

docs.docker.com

起動したら適当なイメージを落としとく。

$ 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

通った。眠い。