130412 kayac-cinnamon
DESCRIPTION
TRANSCRIPT
デプロイツールの検証の話@shiba_yu36
自己紹介
shiba_yu36 shibayu36
or etc...
&
http://blog.hatena.ne.jp/shiba_yu36
•株式会社はてな•アプリケーションエンジニア•はてなブログ•外部API、課金などの基盤周り
Work
やっていること•perlbrew.el•Kyoto.pm•Cinnamon
本日のお話• Cinnamonの軽い紹介•デプロイツールの動作をローカルのみで検証
Cinnamon
Cinnamon• perl製デプロイツール• perlでDSLっぽく設定を書ける• capistranoが複雑で辛かったので、もっとシンプルなものを作ろう
環境とタスクの組み合わせ
config/deploy.pluse Cinnamon::DSL;
set user => 'johndoe'; # requiredset deploy_to => '/path/to/dir';
role production => # declare server ['server01.host', 'server02.host'];
task update => sub { my ($host, @args) = @_; my $deploy_to = get('deploy_to'); remote { run "cd $deploy_to && git pull"; } $host;};
実行• cinnamon (role) (task)• cinnamon production update
デモ•まとめてあとでやります
デプロイツールをローカルのみで検証
開発時に困ること•デプロイツールだからサーバが必要•複数台にデプロイとか試そうとしてもサーバ二台も持ってないし
•まあ試さなくてもいいか
開発時に困ること•デプロイツールだからサーバが必要•複数台にデプロイとか試そうとしてもサーバ二台も持ってないし
•まあ試さなくてもいいか
信頼性が低下!
対策•ローカルだけでやりたいんですよ
•VM利用を考える•Vagrantが簡単そう
Vagrant• VMをCLIから立ち上げられるツール• VMの設定はRubyで書ける
複数VM設定• Vagrantでは一度に複数台VMを立ち上げられる
•複数台のテストをしたいので最適
Vagrant.configure("2") do |config| config.vm.box = "precise32"
config.vm.define :web1 do |web| web.vm.network :private_network, ip: "192.168.1.11" web.vm.network :forwarded_port, host: 8001, guest: 8000 web.vm.provision :shell, :path => "script/setup.sh" end
config.vm.define :web2 do |web| web.vm.network :private_network, ip: "192.168.1.12" web.vm.network :forwarded_port, host: 8002, guest: 8000 web.vm.provision :shell, :path => "script/setup.sh" endend
VM二台分の設定
Vagrant.configure("2") do |config| config.vm.box = "precise32"
config.vm.define :web1 do |web| web.vm.network :private_network, ip: "192.168.1.11" web.vm.network :forwarded_port, host: 8001, guest: 8000 web.vm.provision :shell, :path => "script/setup.sh" end
config.vm.define :web2 do |web| web.vm.network :private_network, ip: "192.168.1.12" web.vm.network :forwarded_port, host: 8002, guest: 8000 web.vm.provision :shell, :path => "script/setup.sh" endend
• VM1台の設定• network (IP, port forward)•初期セットアップ(provision)• setup用script作る(chefとかでも)
script/setup.sh#!/bin/bashsudo aptitude updatesudo aptitude install -y build-essentialsudo aptitude install -y curlsudo aptitude install -y git-core git-docsudo aptitude install -y svtools daemontools daemontools-runsudo /sbin/initctl start svscancurl -L http://cpanmin.us | perl - --sudo App::cpanminuscpanm Carton
VMセットアップ用に適当に
vagrant up
VMにデプロイ•立ち上がったVMに向けてデプロイ• roleで指定• vagrant ssh-configでSSHの設定必要
デモ• vagrantでVM立ち上げ• Cinnamonでそれらのサーバにデプロイ
• update, installdeps, start•確認
proveと組み合わせ•ここまででローカルのVMの環境を自由にセットアップ可能に
•実行の出力をproveすればテストが作れる
• Author Testとして
proveと組み合わせ
my $out = qx{ cinnamon production update };like $out, qr{\[success\]: web1, web2};
参考•shibayu36/cinnamon-deploy-sample•shibayu36/cinnamon-test
まとめ•デプロイツールCinnamonのご紹介• vagrantを使ったローカルでの検証•サーバとの通信が発生するものは同じ手法である程度検証可能
• capistrano, cinnamon• chef, puppet