LoginSignup
7
7

More than 5 years have passed since last update.

vagrant-serverspec を使ってみたけどjenkinsでテスト失敗を取得できない

Posted at

vagrantにはvagrant-serverspecっていう便利なプラグインがあって、vagrant provisionした際にserverspecを流す事が出来る。

インストールは
vagrant plugin install vagrant-serverspec
でOK

こんなディレクトリ構成だとして

vagrant/
    Vagrantfile
spec/
    spec_helper.rb
    hogehoge/
        httpd_spec.rb

Vagrantfileの設定はこんな感じ。
specファイルの指定をVagrantfileからの相対パスで書く。

Vagrantfile
config.vm.provision :serverspec do |spec|
  spec.pattern = '../spec/hogehoge/*_spec.rb'
end

serverspecの設定はこんな感じ

spec_helper.rb
require 'serverspec'
require 'pathname'
require 'net/ssh'

include SpecInfra::Helper::Ssh
include SpecInfra::Helper::DetectOS
httpd_spec.rb
require '../spec_helper'

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

個人的にインフラCIする上でserverspecを使うときに一番面倒なのは地味にsshまわりの設定なのですが、vagrantだとそのへんを綺麗にまとめてくれるので助かる。

けど実際にjenkinsから
vagrant provision --provision-with serverspec
というコマンド実行してもjenkinsのビルドはsuccessで終わってしまう。
コンソール出力を見ればエラー出力はされているけど、パッと見で正常に終わったと見えちゃうと辛い。

実際に実行しても確かにexit code 0 だった。

[root@hoge]# vagrant provision --provision-with serverspec

==> default: Running provisioner: serverspec...

Port "80"
  should be listening (FAILED - 1)

Failures:

  1) Port "80" should be listening
     Failure/Error: it { should be_listening }
       expected Port "80" to be listening
     # /spec/ahogehoge/httpd_spec.rb:10:in `block (2 levels) in <top (required)>'

Finished in 15.93 seconds
1 examples, 1 failure

Failed examples:

rspec /spec/hogehoge/httpd_spec.rb:10 # Port "80" should be listening
[root@hoge]# echo $?
0

仕方がないのでjenkinsでは以下のようなコマンドごりごりで対応している

sudo vagrant up
sudo vagrant provision --provision-with serverspec > /tmp/serverspec
cat /tmp/serverspec.tmp
SPEC=`cat /tmp/serverspec | grep "0 failures" | wc -l`
RET=0
if [ $SPEC -ne 1 ]; then RET=1 ; fi
rm -f /tmp/serverspec.tmp

#some command
sudo vagrant halt

if [ $RET -ne 0 ]; then exit $RET ; fi
exit 0

(参考になれば・・) Jenkinsビルドの「シェルで実行」の失敗/成功を操作する

他にいい方法ないかなぁ。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7