旧ブログ

sambaiz.net に引っ越しました

chef soloでrbenv+bundler入れてjenkinsでserverspecを走らせる

前回の続き。ようやくserverspecが動かせると思ったんだけど、bundler入ってなかったので入れる。

Berksfile

cookbook 'ruby_build'
cookbook 'rbenv', github: 'fnichol/chef-rbenv'
$ berks install

ドキュメントを見ながら設定

{
    "run_list":[
    "java",
    "jenkins",
    "git",
    "simple_iptables",
    "iptables",
    "vagrant",
    "ruby_build",
    "rbenv::system",
    "jenkins::plugin"],

    "rbenv": {
        "rubies": ["2.1.2"],
        "global": "2.1.2",
        "gems": {
            "2.1.2": [
            { "name": "bundler" }
            ]
        }
    }
}

これでようやく環境はそろった。

Gemfile

source 'https://rubygems.org'

gem "knife-solo"
gem "serverspec"
gem "rake"
gem "ci_reporter"
$ 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: y
Auto-configure Vagrant from Vagrantfile? y/n: y
 + spec/
 + spec/default/
 + spec/default/httpd_spec.rb
 + spec/spec_helper.rb
 + Rakefile

Rakefile

require 'ci/reporter/rake/rspec'

Jenkinsに実行させるシェルは以下の通り(なぜかbundleのパスを通してもコマンドが見つからないと出るのでこんな書き方になっている)

sudo vagrant up
sudo vagrant ssh-config --host=jenkins_vagrant > vagrant-ssh.conf
sudo /usr/local/rbenv/shims/bundle
sudo /usr/local/rbenv/shims/bundle exec knife solo bootstrap jenkins_vagrant -F vagrant-ssh.conf
sudo /usr/local/rbenv/shims/bundle exec rake ci:setup:rspec spec
sudo rm -f vagrant-ssh.conf
sudo vagrant destroy -f

ビルド後の処理のJユニットテスト結果の集計のテスト結果XMLのところは

 spec/reports/*.xml 

にしてビルド実行

f:id:sambaiz:20140607210259p:plain

最初から入っていたhttpdのテストは当然失敗しているけど、テストは動いた。

(追記)

ログを見たら、chefが実行されてないことがわかった。これでは意味が無い。原因はnodes/vagrant_jenkins.jsonを追加するのを忘れてたこと。 なので、これを追加して実行。すると、berks installに失敗しているようなので、

Gemfile

gem "berkshelf"

を追加。

参考

Vagrant + Chef Solo + serverspec + Jenkins でサーバー構築を CI - naoyaのはてなダイアリー

ruby on rails - rbenv: command not found in Jenkins execute shell after moving rbenv from rvm - Stack Overflow

rbenv を用いて Ruby をシステム全体にインストールする方法 | ブライテクノBlog