ReVIEW & CI 
ChefでCI環境構築
@vvakame
わかめ まさひろ
わしゃインフラとか
よくわからんのじゃよ!
@vvakame
話を始める前に
本日の仕込み
その他の準備は後述
• vagrant init centos-6.4
• vagrant up
• vagrant ssh-config --host review-ci ↩
>> ~/.ssh/config
• knife solo prepare review-ci
• knife solo cook review-ci ↩
~/Dropbox/chef-repo/nodes/review-jenkins.json
動機
動機
• ReVIEWで原稿書いてgitで管理したい
• pushしたら自動でビルドされてほしい
• 構文エラーがあったらすぐわかる
• エンジニア以外も成果物がすぐ見れる
• 編集さんがGitHubサイト上で編集
• でもサーバとかよくわからん辛い
CI = 継続的インテグレーション = 金糸雀
ReVIEW環境構築
• gem install review で入る
• review-pdfmaker を動かすのが大変
• Mac OS X → MacTeX 入れる
• CentOS 6.4系 → TeX Live 2013 入れる
• Debian 7系 → texlive-lang-cjk
• review-epubmaker は割りと楽
• zip コマンドあればOKぽい
TeXで2.3GBくらい取られる辛い
gitで管理+自動でビルド
• GitHubを普通に使えばOK
• ビルドシステムは適当に使う
• 愚直にshell scriptとか
• わかめはgruntを使う
ReVIEWは文化的にRakeも多そう?
継続的インテグレーション
• 知名度最強 Jenkins 氏
• GitHubをpollingで監視してコミット
あったら自動でビルドして結果収集
• GitHubからのHookもあるよ!
• まだ試してない…
• GitHubへの 登録はChefじゃ無理?
登録まで勝手にされたら流石にキモい
サーバの自動セットアップ
• サーバよくわからん…
• 他人の叡智を借りたい!
• 手順書を作るのはめんどくさい
• 本当に正しく動くのかも疑わしい
• ドキュメントよりコードだ
さくらVPSでもEC2でもGCEでも多分動く(願望)
Chefについて
Chefって何?
• サーバのセットアップをしてくれる
• あるべき状態に収束させるツール
• ReVIEWが使える環境で
• Jenkinsが動いている
• 冪等性が必要
• =何回実行しても同じ結果に落ち着く
• Rubyで書く
類似ツールに Puppet がある
Chef Solo
• Chef SoloとChef (server & client)がある
• Server & Client の方はよく知らない…
• 開発元のOpsCodeはコレで稼いでる
• 今回は Chef Solo を使った
参考書籍
http://goo.gl/RRb3FB
• @naoya_ito さん著
• KDPで出てる(Kindle専)
• 神書籍やで実際
• vagrant 回りが少し古い
Chef用語
• Chef - シェフ
• Knife - ナイフ
• Node料理用コマンドラインツール
• リポジトリ
• Cookbookの束
• Cookbook - クックブック
• Recipeの束
• Recipe - レシピ
• サーバ上で実行する時の最小単位
Chef用語
• Attributes 
• 味付けの設定・変更
• Role 
• 役割
• このRecipeとこのRecipeでこういう
attributeな!
• Node 
• セットアップするサーバのこと
補助ツール
• Berksfile 
• gem install berkshelf で入る
• 他の人の作ったレシピを取得
• community.opscode.com/cookbooks/
• knife でも一応取得してこられる
• knife cookbook site vender java 
• 一括DLやVersionに活躍
下拵え
github.com/vvakame/chef-repo
話の全てはここにあり
リポジトリ作る
• gem install chef 
• gem install knife-solo 
• knife solo init chef-repo
フォルダ構成
• cookbooks 
• 3rd parthのCookbook
• data_bags 
•
• nodes 
• 設定情報.json
• roles 
• Roleの定義
• site-cookbooks 
• 自作Cookbook
コミュニティのCookbook
• Berkshelf 経由でダウンロードする
• community.opscode.com/cookbooks/
• Jenkins, iptables あたりは見つかる
• ReVIEW はやはりない→自作
• berk --path=cookbooks でDLされる
• Berksfile.lock 生成 →これも管理
Berksfile
site :opscode
cookbook 'java'
cookbook 'jenkins', ↩
git: 'https://github.com/opscode-cookbooks/jenkins.git', ↩
ref: '0ff2a4e20e5ca0646a112b3bc11c22af87a9f3ad'
cookbook 'iptables'
cookbook 'npm'
Jenkinsは新しいコードがだいぶ
リリースされていなかったので
GitHubの最新を使うように設定
nodes/hoge.json
{
	 "java": {
	 	 "install_flavor": "oracle",
	 	 "jdk_version": 7,
	 	 "oracle" : {
	 	 	 "accept_oracle_download_terms": true
	 	 }
	 },
	 "run_list":[
	 	 "recipe[java]"
	 ]
}
Attributes の上書き(設定)
このNodeが実行する
Recipe & Role
java レシピを読む
• attributes/default.rb を読む
• 設定可能な項目はここにまとまってる
• recipe/default.rb を読む
• デフォルトの挙動はここに定義される
• java::default 相当
• recipe/oracle.rb は java::oracle
run_list:[ “recipe[java::oracle]” ]
java レシピを読む
• template/ と files/
• 生成ファイルの原本
• template は変数有り files は無し
• providers/ 
• *.rb 中で不明な関数あったらここ探す
• java/ark.rb だと java_ark ていう関数に
• その他
• よくわかんない
既存レシピを読むの超参考になる
ReVIEW レシピを作る
ReVIEWに必要なもの
• gem install review 
• review-pdfmaker のために
• TeX環境
• review-epubmaker のために
• zipコマンド
おさらい
とりあえず
knife cookbook create review -o site-cookbooks
Cookbook作る
ReVIEWに必要なTeX
• Mac
• MacTeX 入れればOK
• Debian系
• apt-get install texlive-lang-cjk 
• CentOS系
• yumで入らないのでtexlive2013
@narusemotoki ありがとう!
でもまだ実は動作確認できてない…
OK
?
?
TeXの辛み
• アホみたいにデカイ
• 2.3GBとか
• インストーラがおばか
• 勝手に止まるので手動でリトライ
• 動作確認したい!
• 毎回GB単位でDL
• 途中で止まる… TeXはクソなのではない
かと思い始めてきた
TeX以外
• review
• recipe/default.rb で
gem_install review てやるだけ
• zip
• recipe/default.rb で
• install zip てやるだけ
• yumとかapt-get使い分けてるぽ?
ちょー簡単
実際のRecipe
見てみよう
http://goo.gl/lv4aa1
http://goo.gl/6fhJj7
ReVIEW with Jenkins
実際のRecipe
激流に身を任せ同化する
http://goo.gl/jO7Iy6
http://goo.gl/FFDtTV
http://goo.gl/kFfpv4
http://192.168.50.12:8080/
実際にやってみた
GCEでやってみた
結論:さくらVPSでやれ
うっかり会社のアカウントで作ってしまい
怒られそうなので消しました☆(ゝω・)v
• ReVIEW(Ruby)がus-asciiじゃねーよ!
• て、怒られる
• GCEのデフォがUTF-8じゃないぽ?
• export LC_ALL=en_US.UTF-8 …?
今後の課題
今後の課題
• Communityにpublishしたい
• TeXの安定構成を探したい
• 結局JenkinsでPDF出てない…
• 楽しい!✌('!'✌ )三✌('!')✌三( ✌'!')✌
• Windows対応したい
• GitHubのprivate repo対応したい
TeX is 最強の敵
謝辞
http://goo.gl/CglFP
夏の戦の同志達
途中でReVIEWに移行!
ReVIEW道を一緒に歩いて来た
人々のノウハウとか血とか洟
水がレシピに詰まってます!

ReVIEW & CI - ChefでCI環境構築