SlideShare a Scribd company logo
1 of 25
Download to read offline
Copyright Drecom Co., Ltd. All Rights Reserved.
itamae + Serverspecで
テスト駆動インフラやってみた
2015/03/18 shibuya.rb
@sue445
Copyright Drecom Co., Ltd. All Rights Reserved.
sue445
● drecom
○ 社内ツールとか社内ライブラリとか
○ サーバサイドをアプリからインフラまで浅く広く
見守り業務
○ PO (Precure Ojisan)
● RubyKaja 2014 @Shibuya.rb
自己紹介
Copyright Drecom Co., Ltd. All Rights Reserved.
【今期の嫁】キュアトゥインクル
Copyright Drecom Co., Ltd. All Rights Reserved.
今期の黄色は肩背中が丸出し!!!!
Copyright Drecom Co., Ltd. All Rights Reserved.
【本妻】キュアピース
Copyright Drecom Co., Ltd. All Rights Reserved.
● 経緯
● itamaeについて
● Serverspecについて
● 実際のテスト駆動インフラの流れ
● itamaeレシピを社内に公開した
● 参考書籍
● 所感
Agenda
Copyright Drecom Co., Ltd. All Rights Reserved.
● 【目的】Railsミドル全部入りのOpenStackのJenkins Slave
のスナップショットを作りたかった
● ミドル全部入りならインフラがchefで作ったスナップショットが
あるとの情報
● 差分はJenkinsユーザの作成とrbenvのインストールくらいあ
ればよさそう
○ が、インフラのchefのレシピはカオスすぎて素人にはハードル高かった
● 全部入りスナップショット対して差分をitamaeでプロビジョニ
ングすることに
● せっかくなので今流行のテスト駆動インフラに挑戦してみた
経緯
Copyright Drecom Co., Ltd. All Rights Reserved.
itamae
● クックパッドが作ったプロビジョニングツール
○ http://itamae.kitchen/
○ https://speakerdeck.com/ryotarai/itamae-infra-as-
code-xian-zhuang-que-ren-hui
● Ruby製、シンプルで軽量なChefみたいなやつ
● DSLなので記述がシンプル
● DSLもRubyのコードなので適度にリファクタリングできる
● プラグインをgemから取り込める
○ 依存性をbundlerで管理できる
○ rubygems.orgに公開していればみんなが使える
Copyright Drecom Co., Ltd. All Rights Reserved.
● @mizzy氏が作ったインフラ構成をテストするためのツール
○ http://serverspec.org/
○ http://www.oreilly.co.jp/books/9784873117096/
● Ruby製
○ RSpecベースだけどテンプレをコピペするだけなので
RSpec使ったこと無くても問題ない
● 特定のプロビジョニングツール(itamaeとかChefとかPuppet
とかAnsible)に依存しないで使える
Serverspec
Copyright Drecom Co., Ltd. All Rights Reserved.
● OS毎のコマンドの違いを吸収するgem
○ https://github.com/serverspec/specinfra
○ Debianならapt-get install使うとか、yumならyum instll
使うとか
● Serverspecから切りだされてgem化されている
○ capistranoとsshkitのような関係
● itamaeもSpecinfraに依存しているので、Specinfraの中身
を知ってたらitamaeとSercerspecの両方で役に立つ
Specinfra
Copyright Drecom Co., Ltd. All Rights Reserved.
1. インフラの確認項目をテストコードで書く
2. 期待したエラーが出ることを確認 (Red)
3. サーバで適用したいインフラコードを書く
4. テストコードが通っていることを確認(Green)
5. ダメなら3に戻る
6. 必要ならリファクタリング (Refactor)
7. 1に戻る
実際のテスト駆動インフラの流れ
Copyright Drecom Co., Ltd. All Rights Reserved.
http://www.slideshare.net/t_wada/the-spirit-of-tdd/27
テスト駆動インフラでもTDDの黄金の回転
Copyright Drecom Co., Ltd. All Rights Reserved.
● 新しいサーバを作ると自分のhomeディレクトリがないので手
軽に作りたい
【例】自分のhomeディレクトリを作る
Copyright Drecom Co., Ltd. All Rights Reserved.
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
Serverspecのテストコード(myhome_spec.rb)
Copyright Drecom Co., Ltd. All Rights Reserved.
Serverspecのテストコード(myhome_spec.rb)
/home/sueyoshi_go が
 ディレクトリで
 パーミッション700で
 ownerがsueyoshi_go で
 drecom groupに所属していること
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
Copyright Drecom Co., Ltd. All Rights Reserved.
Serverspecのテストコード(myhome_spec.rb)
/home/sueyoshi_go が
 ディレクトリで
 パーミッション700で
 ownerがsueyoshi_go で
 drecom groupに所属していること
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
それっぽく読める!
Copyright Drecom Co., Ltd. All Rights Reserved.
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
itamaeのレシピ (myhome.rb)
Copyright Drecom Co., Ltd. All Rights Reserved.
itamaeのレシピ (myhome.rb)
ディレクトリが存在していなければ
/home/sueyoshi_go を作って
 パーミッション700で
 ownerがsueyoshi_goで
 groupをdrecomにすること
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
Copyright Drecom Co., Ltd. All Rights Reserved.
itamaeのレシピ (myhome.rb)
ディレクトリが存在していなければ
/home/sueyoshi_go を作って
 パーミッション700で
 ownerがsueyoshi_goで
 groupをdrecomにすること
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
それっぽく読める!
Copyright Drecom Co., Ltd. All Rights Reserved.
● 目視確認の自動化
○ インフラコードを書く、適用、確認のサイクルを素早く回
せる
● インフラコードがリファクタリングできる
○ バグってもテストコードで検知できる
テスト駆動インフラのメリット
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamae-recipe-jenkins_slave (Jenkins slaveを作るための
レシピ)
○ jenkinsユーザの作成
○ sshの鍵の転送
○ rbenvのインストール
○ jenkinsユーザの鍵を使ってのmasterからslaveへの疎
通確認
○ mysqlやmemcachedなどの起動
● (itamaeやServerspecを書いたことない状態から)開発期
間1週間ちょい
itamaeレシピを社内に公開した
Copyright Drecom Co., Ltd. All Rights Reserved.
source "https://rubygems.org"
gem "itamae"
gem "itamae-plugin-recipe-rbenv", ">= 0.2.2"
group :test do
gem "serverspec"
end
source "http://gem.xxxxxxx.com" do
gem "itamae-plugin-resource-sudo_remote_file", ">= 0.0.2"
gem "specinfra-plain_sudo", ">= 0.0.2"
end
Gemfile
社内gem
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamae-plugin-resource-sudo_remote_file
○ レシピ実行ユーザが直接コピーできないファイルを
remote_fileするためのプラグイン
○ sudo cp /tmp -> sudo chmod -> scp -> remove
tmp_file な感じ
● specinfra-plain_sudo
○ 弊社環境だと sudo /bin/sh ~ が動かないことがあった
のでspecinfraのsudo実行周辺にモンキーパッチあてて
る
● どっちも弊社環境に起因していることが原因のような気がす
るので社外公開はしない予定
作った社内gem
Copyright Drecom Co., Ltd. All Rights Reserved.
● WEB+DB PRESS vol.80
○ http://gihyo.
jp/magazine/wdpress/archive/2014/vol80
○ テスト駆動インフラ特集
● Serverspec
○ http://www.oreilly.co.jp/books/9784873117096/
○ 体系的にまとまってる
○ 付録でitamaeについてもふれられてる
参考書籍
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamaeはそんなにドキュメント充実してない
○ ソースは大した量じゃないのでサクッと読める
○ githubのスライドが一番よくまとまってるw
○ そんなに学習コスト高くない
● Serverspecはドキュメント充実してる
○ ベースはrspecなので普段から使ってるととっつきやす
いはず
○ オライリー本おすすめ
● どっちも日本人が開発してるので日本語でググった時の資
料が充実してる
● コマンドの作業履歴(.bash_historyとか)をコードとして残せ
るのはでかい
所感

More Related Content

What's hot

Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Uchio Kondo
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugTakeshi Komiya
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-賢 秋穂
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?Masahito Zembutsu
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-akira6592
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalkBIGLOBE Tech Talk
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアルKiwamu Okabe
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Kazuto Ohara
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからTakeshi Kuramochi
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsUchio Kondo
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Yoshinori Nakanishi
 

What's hot (20)

Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
Redmine Ansible
Redmine AnsibleRedmine Ansible
Redmine Ansible
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアル
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
Haikara
HaikaraHaikara
Haikara
 

Similar to itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb

Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarbRubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarbGo Sueyoshi (a.k.a sue445)
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ Takuya Mikami
 
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHirobaプリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHirobaGo Sueyoshi (a.k.a sue445)
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)Drecom Co., Ltd.
 
Serverspecを使ってみた話
Serverspecを使ってみた話Serverspecを使ってみた話
Serverspecを使ってみた話Yasufumi Moritake
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。Sho Yoshida
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4hirokiky
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala外道 父
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選Drecom Co., Ltd.
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as codeYosuke Hiraishi
 
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜gree_tech
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例Koichi Shimozono
 

Similar to itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb (20)

プリキュアのRuby実装の紹介 #tqrk08
プリキュアのRuby実装の紹介 #tqrk08プリキュアのRuby実装の紹介 #tqrk08
プリキュアのRuby実装の紹介 #tqrk08
 
Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarbRubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarb
 
First step of Rails Contribute‎ #shibuyarb
First step of Rails Contribute‎ #shibuyarbFirst step of Rails Contribute‎ #shibuyarb
First step of Rails Contribute‎ #shibuyarb
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ
 
RSpec Performance Turning
RSpec Performance TurningRSpec Performance Turning
RSpec Performance Turning
 
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHirobaプリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHiroba
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
Serverspecを使ってみた話
Serverspecを使ってみた話Serverspecを使ってみた話
Serverspecを使ってみた話
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
 
技術書へのいざない
技術書へのいざない技術書へのいざない
技術書へのいざない
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as code
 
Fluentd
FluentdFluentd
Fluentd
 
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
 
FabricとRailsと私
FabricとRailsと私FabricとRailsと私
FabricとRailsと私
 
ACI + Ansible
ACI + AnsibleACI + Ansible
ACI + Ansible
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 

More from Go Sueyoshi (a.k.a sue445)

gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbgemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbGo Sueyoshi (a.k.a sue445)
 
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartupプリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartupGo Sueyoshi (a.k.a sue445)
 
サザエ実況を支える技術 #sst_history
サザエ実況を支える技術 #sst_historyサザエ実況を支える技術 #sst_history
サザエ実況を支える技術 #sst_historyGo Sueyoshi (a.k.a sue445)
 
Paraductをエクストリームリリースします #428rk01
Paraductをエクストリームリリースします #428rk01Paraductをエクストリームリリースします #428rk01
Paraductをエクストリームリリースします #428rk01Go Sueyoshi (a.k.a sue445)
 
GemoireというYARDホスティングアプリを作った #shibuyarb
GemoireというYARDホスティングアプリを作った #shibuyarbGemoireというYARDホスティングアプリを作った #shibuyarb
GemoireというYARDホスティングアプリを作った #shibuyarbGo Sueyoshi (a.k.a sue445)
 
Githubエコシステムを活用したイマドキの趣味開発
Githubエコシステムを活用したイマドキの趣味開発Githubエコシステムを活用したイマドキの趣味開発
Githubエコシステムを活用したイマドキの趣味開発Go Sueyoshi (a.k.a sue445)
 
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hack
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hackプリキュアハッカソン2 参加者アンケート集計結果 #cure_hack
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hackGo Sueyoshi (a.k.a sue445)
 

More from Go Sueyoshi (a.k.a sue445) (15)

gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarbgemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
 
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartupプリキュアのRuby実装の紹介 (2015 ver)  #MeguroStartup
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
 
社内テストファースト勉強会
社内テストファースト勉強会社内テストファースト勉強会
社内テストファースト勉強会
 
サザエ実況を支える技術 #sst_history
サザエ実況を支える技術 #sst_historyサザエ実況を支える技術 #sst_history
サザエ実況を支える技術 #sst_history
 
Paraductをエクストリームリリースします #428rk01
Paraductをエクストリームリリースします #428rk01Paraductをエクストリームリリースします #428rk01
Paraductをエクストリームリリースします #428rk01
 
GemoireというYARDホスティングアプリを作った #shibuyarb
GemoireというYARDホスティングアプリを作った #shibuyarbGemoireというYARDホスティングアプリを作った #shibuyarb
GemoireというYARDホスティングアプリを作った #shibuyarb
 
Githubエコシステムを活用したイマドキの趣味開発
Githubエコシステムを活用したイマドキの趣味開発Githubエコシステムを活用したイマドキの趣味開発
Githubエコシステムを活用したイマドキの趣味開発
 
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hack
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hackプリキュアハッカソン2 参加者アンケート集計結果 #cure_hack
プリキュアハッカソン2 参加者アンケート集計結果 #cure_hack
 
JavaScript TDD紹介 #agilesamurai
JavaScript TDD紹介 #agilesamuraiJavaScript TDD紹介 #agilesamurai
JavaScript TDD紹介 #agilesamurai
 
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
 
アニメ実況実践入門
アニメ実況実践入門アニメ実況実践入門
アニメ実況実践入門
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
AZusaar!でのappengine活用事例 #ajn19
AZusaar!でのappengine活用事例 #ajn19AZusaar!でのappengine活用事例 #ajn19
AZusaar!でのappengine活用事例 #ajn19
 
appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1
 

Recently uploaded

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb

  • 1. Copyright Drecom Co., Ltd. All Rights Reserved. itamae + Serverspecで テスト駆動インフラやってみた 2015/03/18 shibuya.rb @sue445
  • 2. Copyright Drecom Co., Ltd. All Rights Reserved. sue445 ● drecom ○ 社内ツールとか社内ライブラリとか ○ サーバサイドをアプリからインフラまで浅く広く 見守り業務 ○ PO (Precure Ojisan) ● RubyKaja 2014 @Shibuya.rb 自己紹介
  • 3. Copyright Drecom Co., Ltd. All Rights Reserved. 【今期の嫁】キュアトゥインクル
  • 4. Copyright Drecom Co., Ltd. All Rights Reserved. 今期の黄色は肩背中が丸出し!!!!
  • 5. Copyright Drecom Co., Ltd. All Rights Reserved. 【本妻】キュアピース
  • 6. Copyright Drecom Co., Ltd. All Rights Reserved. ● 経緯 ● itamaeについて ● Serverspecについて ● 実際のテスト駆動インフラの流れ ● itamaeレシピを社内に公開した ● 参考書籍 ● 所感 Agenda
  • 7. Copyright Drecom Co., Ltd. All Rights Reserved. ● 【目的】Railsミドル全部入りのOpenStackのJenkins Slave のスナップショットを作りたかった ● ミドル全部入りならインフラがchefで作ったスナップショットが あるとの情報 ● 差分はJenkinsユーザの作成とrbenvのインストールくらいあ ればよさそう ○ が、インフラのchefのレシピはカオスすぎて素人にはハードル高かった ● 全部入りスナップショット対して差分をitamaeでプロビジョニ ングすることに ● せっかくなので今流行のテスト駆動インフラに挑戦してみた 経緯
  • 8. Copyright Drecom Co., Ltd. All Rights Reserved. itamae ● クックパッドが作ったプロビジョニングツール ○ http://itamae.kitchen/ ○ https://speakerdeck.com/ryotarai/itamae-infra-as- code-xian-zhuang-que-ren-hui ● Ruby製、シンプルで軽量なChefみたいなやつ ● DSLなので記述がシンプル ● DSLもRubyのコードなので適度にリファクタリングできる ● プラグインをgemから取り込める ○ 依存性をbundlerで管理できる ○ rubygems.orgに公開していればみんなが使える
  • 9. Copyright Drecom Co., Ltd. All Rights Reserved. ● @mizzy氏が作ったインフラ構成をテストするためのツール ○ http://serverspec.org/ ○ http://www.oreilly.co.jp/books/9784873117096/ ● Ruby製 ○ RSpecベースだけどテンプレをコピペするだけなので RSpec使ったこと無くても問題ない ● 特定のプロビジョニングツール(itamaeとかChefとかPuppet とかAnsible)に依存しないで使える Serverspec
  • 10. Copyright Drecom Co., Ltd. All Rights Reserved. ● OS毎のコマンドの違いを吸収するgem ○ https://github.com/serverspec/specinfra ○ Debianならapt-get install使うとか、yumならyum instll 使うとか ● Serverspecから切りだされてgem化されている ○ capistranoとsshkitのような関係 ● itamaeもSpecinfraに依存しているので、Specinfraの中身 を知ってたらitamaeとSercerspecの両方で役に立つ Specinfra
  • 11. Copyright Drecom Co., Ltd. All Rights Reserved. 1. インフラの確認項目をテストコードで書く 2. 期待したエラーが出ることを確認 (Red) 3. サーバで適用したいインフラコードを書く 4. テストコードが通っていることを確認(Green) 5. ダメなら3に戻る 6. 必要ならリファクタリング (Refactor) 7. 1に戻る 実際のテスト駆動インフラの流れ
  • 12. Copyright Drecom Co., Ltd. All Rights Reserved. http://www.slideshare.net/t_wada/the-spirit-of-tdd/27 テスト駆動インフラでもTDDの黄金の回転
  • 13. Copyright Drecom Co., Ltd. All Rights Reserved. ● 新しいサーバを作ると自分のhomeディレクトリがないので手 軽に作りたい 【例】自分のhomeディレクトリを作る
  • 14. Copyright Drecom Co., Ltd. All Rights Reserved. describe file("/home/sueyoshi_go") do it { should be_directory } it { should be_mode 700 } it { should be_owned_by "sueyoshi_go" } it { should be_grouped_into "drecom" } end TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb Serverspecのテストコード(myhome_spec.rb)
  • 15. Copyright Drecom Co., Ltd. All Rights Reserved. Serverspecのテストコード(myhome_spec.rb) /home/sueyoshi_go が  ディレクトリで  パーミッション700で  ownerがsueyoshi_go で  drecom groupに所属していること describe file("/home/sueyoshi_go") do it { should be_directory } it { should be_mode 700 } it { should be_owned_by "sueyoshi_go" } it { should be_grouped_into "drecom" } end TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
  • 16. Copyright Drecom Co., Ltd. All Rights Reserved. Serverspecのテストコード(myhome_spec.rb) /home/sueyoshi_go が  ディレクトリで  パーミッション700で  ownerがsueyoshi_go で  drecom groupに所属していること describe file("/home/sueyoshi_go") do it { should be_directory } it { should be_mode 700 } it { should be_owned_by "sueyoshi_go" } it { should be_grouped_into "drecom" } end TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb それっぽく読める!
  • 17. Copyright Drecom Co., Ltd. All Rights Reserved. directory "/home/sueyoshi_go" do mode "700" owner "sueyoshi_go" group "drecom" not_if "ls /home/sueyoshi_go" end itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb itamaeのレシピ (myhome.rb)
  • 18. Copyright Drecom Co., Ltd. All Rights Reserved. itamaeのレシピ (myhome.rb) ディレクトリが存在していなければ /home/sueyoshi_go を作って  パーミッション700で  ownerがsueyoshi_goで  groupをdrecomにすること directory "/home/sueyoshi_go" do mode "700" owner "sueyoshi_go" group "drecom" not_if "ls /home/sueyoshi_go" end itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
  • 19. Copyright Drecom Co., Ltd. All Rights Reserved. itamaeのレシピ (myhome.rb) ディレクトリが存在していなければ /home/sueyoshi_go を作って  パーミッション700で  ownerがsueyoshi_goで  groupをdrecomにすること directory "/home/sueyoshi_go" do mode "700" owner "sueyoshi_go" group "drecom" not_if "ls /home/sueyoshi_go" end itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb それっぽく読める!
  • 20. Copyright Drecom Co., Ltd. All Rights Reserved. ● 目視確認の自動化 ○ インフラコードを書く、適用、確認のサイクルを素早く回 せる ● インフラコードがリファクタリングできる ○ バグってもテストコードで検知できる テスト駆動インフラのメリット
  • 21. Copyright Drecom Co., Ltd. All Rights Reserved. ● itamae-recipe-jenkins_slave (Jenkins slaveを作るための レシピ) ○ jenkinsユーザの作成 ○ sshの鍵の転送 ○ rbenvのインストール ○ jenkinsユーザの鍵を使ってのmasterからslaveへの疎 通確認 ○ mysqlやmemcachedなどの起動 ● (itamaeやServerspecを書いたことない状態から)開発期 間1週間ちょい itamaeレシピを社内に公開した
  • 22. Copyright Drecom Co., Ltd. All Rights Reserved. source "https://rubygems.org" gem "itamae" gem "itamae-plugin-recipe-rbenv", ">= 0.2.2" group :test do gem "serverspec" end source "http://gem.xxxxxxx.com" do gem "itamae-plugin-resource-sudo_remote_file", ">= 0.0.2" gem "specinfra-plain_sudo", ">= 0.0.2" end Gemfile 社内gem
  • 23. Copyright Drecom Co., Ltd. All Rights Reserved. ● itamae-plugin-resource-sudo_remote_file ○ レシピ実行ユーザが直接コピーできないファイルを remote_fileするためのプラグイン ○ sudo cp /tmp -> sudo chmod -> scp -> remove tmp_file な感じ ● specinfra-plain_sudo ○ 弊社環境だと sudo /bin/sh ~ が動かないことがあった のでspecinfraのsudo実行周辺にモンキーパッチあてて る ● どっちも弊社環境に起因していることが原因のような気がす るので社外公開はしない予定 作った社内gem
  • 24. Copyright Drecom Co., Ltd. All Rights Reserved. ● WEB+DB PRESS vol.80 ○ http://gihyo. jp/magazine/wdpress/archive/2014/vol80 ○ テスト駆動インフラ特集 ● Serverspec ○ http://www.oreilly.co.jp/books/9784873117096/ ○ 体系的にまとまってる ○ 付録でitamaeについてもふれられてる 参考書籍
  • 25. Copyright Drecom Co., Ltd. All Rights Reserved. ● itamaeはそんなにドキュメント充実してない ○ ソースは大した量じゃないのでサクッと読める ○ githubのスライドが一番よくまとまってるw ○ そんなに学習コスト高くない ● Serverspecはドキュメント充実してる ○ ベースはrspecなので普段から使ってるととっつきやす いはず ○ オライリー本おすすめ ● どっちも日本人が開発してるので日本語でググった時の資 料が充実してる ● コマンドの作業履歴(.bash_historyとか)をコードとして残せ るのはでかい 所感