Linuxにserverspecを導入する


Linux環境にserverspecを導入していく。

Linux環境の構築

Linux環境を構築しておく。
https://qiita.com/mkuser9/items/079cc4244821c8e220c2

rubyをインストールする

serverspecにはrubyが必要。

console
$ sudo yum -y install git
$ sudo yum install -y gcc gcc-c++ libyaml-devel libffi-devel libxml2 libxslt libxml2-devel libslt-devel
$ sudo yum install git-core
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ source ~/.bash_profile
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ sudo yum install -y bzip2 gdbm-devel openssl-devel libffi-devel libyaml-devel ncurses-devel readline-devel zlib-devel
$ RUBY_CONFIGURE_OPTS=--disable-install-doc ~/.rbenv/bin/rbenv install 2.6.3
$ rbenv global 2.6.3 && rbenv rehash

Gemfileの作成

Gemfileを作成して、gemを追加する。

console
$ sudo vi Gemfile
Gemfile
source "https://rubygems.org"

gem 'serverspec'
gem 'rake'
console
$ bundle install

serverspecのインストール

以下のコマンドでserverspecをインストール。

console
$ gem install serverspec

サンプルテストの作成

console
$ serverspec-init

Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 2

Vagrant instance y/n: n
Input target host name: www.example.jp
 + spec/
 + spec/www.example.jp/
 + spec/www.example.jp/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec

テスト内容を記述

テストファイルは、spec/localhost/sample_spec.rbに生成されているので、テストの内容に合わせてテストファイルを修正する。

console
vi spec/localhost/sample_spec.rb

sample_spec.rbにテストを記述する。

sample_spec.rb(sample)
require 'spec_helper'

describe "gitについてのテスト" do
  context "環境設定" do
    describe package('git'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end
    end
  end
end

describe "git-coreについてのテスト" do
  context "環境設定" do
    describe package('git-core'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end
    end
  end
end

describe "httpdについてのテスト" do
  context "環境設定" do
    describe package('httpd'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end

      it "enabledされている" do
        expect be_enabled
      end

      it "runningされている" do
        expect be_running
      end
    end
  end
end

describe "portについてのテスト" do
  context "環境設定" do
    describe port(80) do
      it "listeningされている" do
        expect be_listening 
      end
    end
  end
end

sample_spec.rbの初期状態。

sample_spec.rb(default)
require 'spec_helper'

describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end

describe package('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_installed }
end

describe service('httpd'), :if => os[:family] == 'redhat' do
  it { should be_enabled }
  it { should be_running }
end

describe service('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_enabled }
  it { should be_running }
end

describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end

テストの実行

以下のコマンドでテストを実行する。

console
$ rake spec