一人Web開発~第3夜(1) serverspec導入
サーバもプログラムと同じく、設定したらテストすべしというのが最近の流れ。テスト駆動開発の立場からすると「いやいや、設定したらテストではなく、テストを書いてから設定をするのだよ」と言われそうですが、「まず、動く」のが見たいタイプなのでとりあえずこの順番で行きます。
テストはケアレスミスのあぶり出しと、回帰テストの省力化で力を発揮してもらうことにします。
serverspec導入
serverspecはサーバの設定をテストするためのテストフレームワークです。rubyで書きます。なのでrubyを入れます。
yumで入れてもよいのかもしれませんが、chefを入れた時に一緒にrubyも入っており、あっちやこっちにrubyがあると面倒そうなので今回はchef同梱版を使っていくことにします。なお、chefとserverspecでは今のところrubyを使う予定がないので、というのもあります。
serverspecもchefで入れることにします。
# Install gem_package "serverspec" do action :install end gem_package "rspec" do action :install version "2.14.1" end
rspecをバージョン指定で入れているのは、chef同梱版を使ったら何やらコンフリクトが出たため。rspec-coreが2.4でrspeが2.3だったからなのかもしれない。複数バージョン入れれらるようなので、2.4も入れておくことにしました。
serverspec初めの一歩
テストは、platform/test/serverに置くことにします。ディレクトリ作って移動したあとに、serverspec-initを実行。
# /opt/chef/embedded/bin/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: n Input target host name: localhost + spec/ + spec/localhost/ + spec/localhost/httpd_spec.rb + spec/spec_helper.rb + Rakefile
コマンドにはパスが通ってないのでフルパスで。PATHに追加してもいいのですが、なんとなくこのままでいきます。
質問項目には適当に答えておきます。
対象ノードのはひとまずlocalhostだけにしておきます。多分増やすこともないと思うのだけれど、今後増えたら考えることにします。
SSHの設定をしておく必要があるのでお忘れなく。
~/.ssh/configを作成し、パスフレーズなしで鍵ペアを作成して認証できるようにしておくことくらいです。
鍵はテスト専用のを作るのがよいと思います。
Host localhost HostName localhost Port 22 IdentityFile ~/.ssh/id_test User root
# ssh-keygen -f id_test # cat id_test.pub >> authorized_keys
次は実際にテストを書いてみます。