想定としては、
- 192.168.1.18みたいなネットワーク上のサーバーがあってそれがテストの対象
- 自分のPC(vagrantでCENTOSを入れて、そこでrubyが動いている状態)
サーバー:192.168.1.18
ユーザー:serverspec
自分のPC:127.0.0.1:2222
ユーザー:vagrant
まず自分のPCにログインして公開鍵を作成する。
cd ~/.ssh/
ssh-keygen -t dsa
ここは何も入力せずにエンターキー3回
id_dsa
id_dsa.pub
の2つのファイルが生成される
次にサーバーにログインして、
mkdir .ssh
chmod 700 .ssh
cd .ssh/
この.ssh
ディレクトリに先ほど作成したid_dsa.pub
をWinSCP等を用いてコピーする。
コピーしたら、以下を実行。
cat id_dsa.pub >> authorized_keys
chmod 600 authorized_keys
id_dsa.pub
は消してよい。
引き続きルートになってsshの設定を変更する。
su -
cd /etc/ssh/
vim sshd_config
以下2か所のコメントアウトを外す。
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
保存したら、sshdを再起動。
service sshd restart
いったん自分のPCへ戻る。sshのコンフィグファイルを作成する。
cd ~/.ssh/
vim config
以下を記入して保存
Host my-host
HostName 192.168.1.18
Port 22
User serverspec
IdentityFile ~/.ssh/id_dsa
ここでssh接続をテストしてみる。
ssh my-host
でつながればOK.
再び開発サーバーにログインする。
ルートになって、sudo設定を行う。
su -
visudo
viの編集画面になるので、以下を追記
serverspec ALL=(ALL) ALL
ここで一旦ルートを抜ける
適当なディレクトリを作ってそこで作業する。
cd /share
mkdir serverspec
cd serverspec
vim Gemfile
以下を書き込みます。
source 'https://rubygems.org'
gem 'serverspec'
gem 'rake'
gem 'highline'
保存して、以下実行。
bundle
ここでbundleが見つからなかった場合は
gem install bundle
続いて以下実行。
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: n
Input target host name: my-host
+ spec/
+ spec/my-host/
+ spec/my-host/sample_spec.rb
+ spec/spec_helper.rb
これでspec/以下にテスト用のファイルが生成される。ので、以下編集
vim spec/my-host/sample_spec.rb
以下の一行を追加。(環境によっては不要な場合もある)
set :request_pty, true
最後に以下でテスト実行
ASK_SUDO_PASSWORD=1 bundle exec rake spec
途中で
Enter sudo password:
と聞かれるのでユーザーserverspecのパスワードを入れる。
テスト結果が出れば成功。
Package "httpd"
should be installed
Service "httpd"
should be enabled
should be running
Port "80"
should be listening
Finished in 1.03 seconds (files took 9.88 seconds to load)
4 examples, 0 failures
毎回パスワード入れたくない場合は以下の書き方で実行すればよい。
SUDO_PASSWORD=password bundle exec rake spec
テストの書き方は以下参照。
http://serverspec.org/resource_types.html
追記:複数サーバーをリストで指定してそれぞれにパラメータを渡してテストする方法は以下URL参照のこと
http://ex-cloud.jp/techblog/?p=699