LoginSignup
3

More than 5 years have passed since last update.

PackerとServerspecを連携させる

Posted at

Packerで作ったイメージにserverspecでテストしたい

PackerとAnsibleを実行してAMIを作るビルドジョブを用意していました。
このジョブの最後の処理でserverspecを噛まして、テストを流し込みたい。

背景

Ansibleは確かにロール単位で見るととてもシンプルでテスト不要だなぁというのは感じるところだけど、ロールを組み合わせてプロビジョニングしていると、あれとこれの組み合わせでこう動いてくれるよね?っていう確認はやっぱり必要なわけ。
例えば、nginx -> APP serverの疎通確認とか。
そんな観点のテストにserverspec流して自動化してしまおうというのが事の発端。
この記事を書いた時にやっていた事を思い出しながら書いてます。

Packer with serverspec

先にディレクトリ構成とpacker.jsonを記載する。

ディレクトリ構成

├── packer.json
├── provisioners
├── scripts
│   ├── serverspec.sh
├── serverspec
│   ├── Gemfile
│   ├── Gemfile.lock
│   ├── Rakefile
│   └── spec
│       └── AMI-TYPE
│           └── hoge_spec.rb
│       └── spec_helper.rb
└── variables
    └── packer.json

packer.json

    {
      "type": "ansible-local"
    },
    {
      "type": "file",
      "source": "serverspec",
      "destination": "/tmp"
    },
    {
      "type": "shell",
      "execute_command": "sh {{ .Path }} -t AMI-TYPE-A",
      "script": "{{user `script_dir`}}/serverspec.sh"
    },

どう動かしているのか

Ansibleのプロビジョニングが完了したら、serverspecをプロビジョニング先のマシンで実行しています。
流れはこんな感じ。

  1. Ansibleのプロビジョニング実行
  2. serverspecディレクトリを丸ごとプロビジョニング先のマシンへ転送
  3. serverspec実行シェルを起動

Packerでゴールデンイメージを作っているのですが、くそ時間がかかるのでAMIを分割して作成していく方式を取っているため、AMI-TYPEなんていうものを用意しています。

serverspec.shの中身はごくごくシンプルで、bundle installbundle exec rake spec:hogeを実行しているだけです。
こんな感じで簡単にserverspecを連携させることが出来るので、滅茶苦茶楽出来ましたとさ。

実際運用させてみて

楽だし安心感ある。
ゴールデンイメージ運用しているから、各コミットの安全性が担保されるのは良い、自信を持ってリリースが出来ます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3