画像

[2013-05-27-2] で書いたとおり、このブログのサーバmasutaka.netは
Chef-soloでレシピを、serverspecでそのテストを書いています。

ソースコードはGitHubのプライベートリポジトリに置いており、お金をか
けてまでやる気が出なかったのでCIはしていませんでした(※)。

※ CircleCIの場合、一番安いプランで$19/month

はてブのホットエントリでこちらの記事を見つけたので、serverspecのCI
を設定してみました。
Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる|mah365

serverspec固有の設定

基本的な手順は記事のとおりなので、詰まることはないと思います。

ただしserverspecはssh経由で動作するため、sshの設定が必要です。
(1) WerckerのサイトでSSH key pairを作成する
(2) ユーザmasutakaとしてssh接続する設定をする
(3) ssh接続した時にknown_hostsに追加するか聞かれない設定をする

(1)は以下のサイトが参考になりました。
wercker + Capistrano で自動デプロイ - milk1000cc’s blog

wercker.ymlの中で秘密鍵を $WERCKER_SSH_KEY_PRIVATE として参照できる
ようになります。公開鍵はmasutaka.net:~/.ssh/authorized_keysに追記します。

最終的なwercker.yml

(1)の秘密鍵$HOME/.ssh/id_rsaは39行目で作っています。
(2)と(3)は26行目で$HOME/.ssh/configに設定しています。
(2)は33行目の"User masutaka"、(3)は34行目の"StrictHostKeyChecking no"です。
見たまんまですが、serverspecは49行目で設定しています。

box: wercker/ruby
# Build definition
# See the Ruby section on the wercker devcenter:
# http://devcenter.wercker.com/articles/languages/ruby.html
build:
# The steps that will be executed on build
steps:
# A step that executes `bundle install` command
- bundle-install
# A custom script step, name value is used in the UI
# and the code value contains the command that get executed
- script:
name: echo ruby information
code: |
echo "ruby version $(ruby --version) running"
echo "from location $(which ruby)"
echo -p "gem list: $(gem list)"
# Add more steps here:
- script:
name: make .ssh directory
code: mkdir -p "$HOME/.ssh"
- create-file:
name: write ssh config
filename: $HOME/.ssh/config
overwrite: true
hide-from-log: true
content: |-
Host masutaka.net
User masutaka
StrictHostKeyChecking no
- script:
name: set permissions for ssh config
code: chmod 0644 $HOME/.ssh/config
- create-file:
name: write ssh key
filename: $HOME/.ssh/id_rsa
overwrite: true
hide-from-log: true
content: $WERCKER_SSH_KEY_PRIVATE
- script:
name: set permissions for ssh key
code: chmod 0400 $HOME/.ssh/id_rsa
- script:
name: serverspec
code: bundle exec rake spec:masutakanet
view raw wercker.yml hosted with ❤ by GitHub

wercker.ymlの書式

基本的な書式は http://devcenter.wercker.com/articles/werckeryml/
分かると思います。wercker.ymlのValidaterもありました。

bundle-installやcreate-fileは拡張という扱いなのか、
https://app.wercker.com/#wercker にアプリとして存在してました。
ドキュメントもあるので、必要に応じてどうぞ。

ビルド結果

Werckerの各アプリのページでもちろん分かりますが、
Werckerビルド結果1

各Pull Requstのページでも分かるので、今後はローカルでTest&Cookして
Pull Requst出す、ビルドが通っていればmasterにマージという使い方をし
そうです(Collaboratorはもちろん私一人)。
Werckerビルド結果2

Werckerバッジ

TravisCIやCircleCIでお馴染み、ビルドステータスが分かるバッジも
各アプリのページ、右上から取得できます。
Werckerバッジ1

README.mdに追加しました。
Werckerバッジ2