Packerで作ったAMIにServerspecを適用してちゃんとできたか確認する


  • shellなりcloud-initなりでプロビジョニング
  • ローカルにあるServerspecのテストケース一式をアップロード
  • ExecでServerspecを実行する

こんな手順。

なお、Packerはプロバイダに依存せずプロビジョニングができるので、AWSのAMIだけでなくOpenStackやら何やらにも使えるのでは。

設定.json

settei.json
{
...
  "provisioners": [
    {
      "type": "shell",
      "script": "provisioners/setup.sh",
      "execute_command": "{{ .Vars }} sudo -E sh '{{ .Path }}'"
    },
    {
      "type": "file",
      "source": "serverspec",
      "destination": "/tmp"
    },
    {
      "type": "shell",
      "script": "provisioners/run-serverspec.sh",
      "execute_command": "{{ .Vars }} sudo -E sh '{{ .Path }}'"
    }
  ]
}

sudo 云々は公式にある sudoさせる設定。

Serverspecする

プロジェクトの serverspec/ 以下に serverspec-init などで Exec 設定のプロジェクトを用意しておこう。

run-serverspec.sh はこんな感じで。

run-serverspec.sh
#!/bin/bash

yum -y -q install rubygem-bundler
cd /tmp/serverspec
bundle install --path vendor/bundle
bundle exec rake spec

rm -rf /tmp/serverspec
yum -y -q remove rubygem-bundler

参考