Packer、Vagrant、Chef Soloで構築した環境をserverspecでテストする
こんにちは、@oko_changです。
伊藤直也さんのブログにあるこちらの記事は読んでいたのですが、自分でもう少し整理したかったので今回はその内容を残しておきます。
構成
OSXに以下のツールをインストールしてありま、レシピの適用とテスト先のサーバがAWS上のEC2インスタンスといって感じです。
- Packer
- Vagrant
- Chef SoloやJenkins
また、今回の内容はこちらのリポジトリにまとめておきました。
環境構築
実作業
リポジトリの初期化
リポジトリ初期化ついでにknifeコマンドでChefリポジトリのテンプレートを作成します。
$ knife solo init serverci.okochang.com $ cd serverci.okochang.com $ touch README.md
bundle
今回の作業で必要となるソフトウェアを管理するためにGemfileを作成します。
最終的にjenkinsでテストするのでci_reporterが必要。
$ bundle init $ vi Gemfile $ bundle install --path vendor/bundle
Packer
まずは最初にPackerを使って基本となるAMIを作成しておきます。
ここで使ったjsonファイルもリポジトリにあげています。
$ vi packer.json $ packer build packer.json ==> Builds finished. The artifacts of successful builds are: --> amazon-ebs: AMIs were created: ap-northeast-1: ami-b5c0b1b4
Vagrant
次に先ほど作成されたAMIから起動するVagrantfileを作成&更新をします。
Packerのjsonファイルと同様にVagrantfileもリポジトリにアップしています。
$ vagrant init centos $ vi Vagrantfile
serverspec
次にserverspecのテストを作りますので、初期化します。
$ bundle exec serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 1 Vagrant instance y/n: y Auto-configure Vagrant from Vagrantfile? y/n: n Input vagrant instance name: serverci.okochang.com + spec/ + spec/serverci.okochang.com/ + spec/serverci.okochang.com/httpd_spec.rb + spec/spec_helper.rb + Rakefile
最終的にci_reporterで出力を出すための設定を追記しておきます。
$ vi Rakefile
テストコードも忘れずにアップデートします。
$ vi spec/default/httpd_spec.rb
chef
次に今回のサーバ構築に使用するChefのレシピを作成します。
$ bundle exec knife cookbook create httpd -o site-cookbooks $ vi site-cookbooks/httpd/recipes/default.rb $ vi site-cookbooks/httpd/templates/default/httpd.conf.erb $ vi nodes/serverci.okochang.com.json
テスト実行
あとは以下のようにvagrant upしてプロビジョニングとテストを実行します。
テストが終わったら忘れずに環境を削除しておきます。
※[fog][WARNING] Unable to load the 'unf' gem.のエラー、unfを入れても解決出来てなくて強引にsedで回避しているのなんとかしなきゃ。
$ vagrant up --provider aws $ vagrant ssh-config --host=serverci.okochang.com > vagrant-ssh.conf $ sed -i -e "1d" vagrant-ssh.conf $ bundle exec knife solo bootstrap serverci.okochang.com -F vagrant-ssh.conf $ bundle exec rake spec $ rm vagrant-ssh.conf $ vagrant destroy serverci.okochang.com
残りの作業
Jenkinsでテストを自動化するところのまとめ