hatenob

プログラムって分からないことだらけ

一人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

次は実際にテストを書いてみます。