130207 kyotorb

49
capistrano設定の共通化 (+ Tips集) 2013/02/15 kyoto.rb

Upload: yuki-shibazaki

Post on 14-Dec-2014

1.822 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 130207 kyotorb

capistrano設定の共通化(+ Tips集)

2013/02/15 kyoto.rb

Page 2: 130207 kyotorb

shiba_yu36

Page 3: 130207 kyotorb

• Perl• JavaScript• (Rubyはあんまり使ってない...)

Page 4: 130207 kyotorb

capistrano使ってますか?

注) capistranoはdeploy用のツールです

Page 5: 130207 kyotorb

capistranoとは? •デプロイ用ツール

•コマンド一つでアプリケーションのデプロイが出来たりする

•特にRailsに特化してる

•知らない人が多かったらデモするかも

Page 6: 130207 kyotorb

capistranoにまつわるよくある(?)ストーリー

Page 7: 130207 kyotorb

このprojectではcapを使おう!便利!

Page 8: 130207 kyotorb

便利だからこっちのprojectでも使おう

適当に設定コピペ

Page 9: 130207 kyotorb

あ、このprojectちょっとだけdeploy方法違うから適当に修正

しちゃおう

Page 10: 130207 kyotorb

それから数カ月後....

Page 11: 130207 kyotorb

自分が別のprojectへ...

さてdeployだ適当にcap deployとかしたら

いいんでしょ

Page 12: 130207 kyotorb

cap deploy

微妙に方法違ってサーバ全台落ちる

Page 13: 130207 kyotorb

何が問題か•各プロジェクトでCapfileをそれぞれ作る

• deploy手順がそれぞれ違う

•人が気をつけないとdeploy出来ない状態に

Page 14: 130207 kyotorb

共通化したい•同じような処理はきちんとまとめたい

•便利なツールは社内で共有したい

•出来るだけdeploy方法がばらばらにならないようにしたい

Page 15: 130207 kyotorb

例)common-deploy.rb•各project共通処理をまとめておく

• update, restart, log, etc...•あとはCapfileでloadする運用

Page 16: 130207 kyotorb

例)common-deploy.rbdesc "Update remote files"task :update do |o| run "mkdir -p #{releases_path}" strategy.deploy!

if ENV['ROLES'] =~ /proxy/ && server_type == 'daemontools' puts "### SEEMS LIKE PROXY; UPDATE CURRENT ###" daemontools.update_current end

if ENV['ROLES'] && update_timestamp_filter && !update_timestamp_filter.include?(ENV['ROLES']) update_static_timestamps endend

Page 17: 130207 kyotorb

問題点•少し便利なオレオレ設定を共通ファイルに書き出す

•行数が多くなってくる

•微妙にタスク間でconflictしだす

• common-deploy.rbを更新できなくなる

•結局元の状況に............

Page 18: 130207 kyotorb

問題点

wc -l common-deploy.rb 981 common-deploy.rb

Page 19: 130207 kyotorb

最近の共通化の方針•やりたいことごとにファイルを作って共通化する

• default設定, deploy用, cron, perlbrew, rbenv, daemontools, etc...

•それぞれのサービスは必要な物だけload

Page 20: 130207 kyotorb

最近の共通化の方針•それぞれのサービスは必要な物だけload

•サービスの差異を吸収しながら共通化できる

• task名とその内容の標準化は別途必要

Page 21: 130207 kyotorb

例.!"" Capfile # サービスごとの設定#"" config !"" cron.rb # cron設定 !"" daemontools.rb # svc操作用関数 !"" default.rb # 共通deploy設定 !"" perlbrew.rb # perlbrew用 #"" utils.rb # その他便利関数

Page 22: 130207 kyotorb

demo(っぽいもの)• Capfile• default設定

• cron設定など

•実際のdeployとか

•随時質問を受けます

Page 23: 130207 kyotorb

これにより•オレオレ設定でも違うファイルにしておけば良い

• load対象を分けるので、一定の互換性が保たれる

Page 24: 130207 kyotorb

ここからはcapistranoのtipsを紹介します

Page 25: 130207 kyotorb

plugin編

Page 26: 130207 kyotorb

plugin編• gem install capistrano_colors -> 色付け

•目grepに便利です

Page 27: 130207 kyotorb

deploy編

Page 28: 130207 kyotorb

deploy編•以下が協調して動作する

•本体のdeploy.rb

• deploy/scm,

• deploy/strategy

Page 29: 130207 kyotorb

deploy編• scm : version管理ツールの種類ごとのdeploy設定

• strategy : どのようなdeploy方法をとるか

Page 30: 130207 kyotorb

git設定set :scm, :git # git使うset :git_shallow_clone, 1 # depth=1でやってくれるset :git_enable_submodules, 1 # submoduleも

set :branch, "master"

set :repository do "git@host:projects/Hoge.git"end

Page 31: 130207 kyotorb

strategy設定•deploy_viaを設定すればstrategyを決められる

• 様々な方法でdeploy

Page 32: 130207 kyotorb

strategy設定•いろんな方法でdeployしてくれる

• checkout• copy• remote_cache

•独自

Page 33: 130207 kyotorb

strategy checkout• remoteでcloneしてcheckout

• versionで区切る方法だと毎回cloneされそう

• versions/20130208みたいなやつ

Page 34: 130207 kyotorb

strategy copy•手元のファイルをupload

•なんかいろいろやっててよくわからん

Page 35: 130207 kyotorb

strategy remote_cache• cached-copy dirにclone

•それをrsyncでコピーしてdeploy

•毎回cloneするよりだいぶ速い

Page 36: 130207 kyotorb

strategy設定•とりあえずremote_cache使うとよい

set :deploy_via, :remote_cache

Page 37: 130207 kyotorb

環境ごとに設定変える

Page 38: 130207 kyotorb

環境ごとに設定変える• capistrano-ext• taskでroleを動的定義する

Page 39: 130207 kyotorb

capistrano-ext• production.rbとかstaging.rbとか

•もうちょい調べる

Page 40: 130207 kyotorb

roleを動的定義するtask '@production' do role :app, 'production01.host' role :cron, 'production01.host'end

task '@development' do role :app, 'development01.host' role :cron, 'development01.host'end

Page 41: 130207 kyotorb

roleを動的定義する

cap @production deploycap @development deploy

Page 42: 130207 kyotorb

task実行サーバを制限する

Page 43: 130207 kyotorb

role制限

role :app, 'app.host'role :db, 'db.host'task :restart, :roles => [:app] do ...end

Page 44: 130207 kyotorb

only制限

role :app, 'app.host', :perl => truerole :db, 'db.host'task :perl_setup, :only => { :perl => true } do ...end

Page 45: 130207 kyotorb

defaultタスク

Page 46: 130207 kyotorb

defaultタスク• defaultというタスクを作っておく

•するとnamespaceでタスクを呼べる

Page 47: 130207 kyotorb

defaultタスクnamespace :deploy do task :default do update restart end task :update do ... end task :restart do ... endend

Page 48: 130207 kyotorb

defaultタスク

cap deploy

cap deploy:update deploy:restart

Page 49: 130207 kyotorb

他にも話せそうだけどとりあえず終わります!