2012年6月27日水曜日

【Ruby】Capistranoを使ってみた(gitとJenkinsもちょっと連携)

インストールについては適当にググってやってくださいw
「capistrano インストール」でガッツリでてきます

以下いろいろと使ってみた結果です
コマンドのとこだけ実行していくと基本的な設定と動作はできるようになります

mkdir /usr/local/cap
cd /usr/local/cap
capify .
(不思議なおまじないです)
cap -T
(capで実行できる命令が一覧で表示されます)
emacs config/deploy.rb

set :application, "stu"                                                               
set :repository,  "git://github.com/kakakikikeke/shorten_the_URL.git"                 
set :scm, :git                                                                 
                                                                                      
role :web, "yoshi3"                                                                   
role :app, "yoshi3"                                                                   
role :db,  "yoshi3", :primary => true                                                 
role :db,  "yoshi3"                                                                   
                                                                                      
# if you want to clean up old releases on each deploy uncomment this:                 
# after "deploy:restart", "deploy:cleanup"                                            
                                                                                      
# if you're still using the script/reaper helper you will need                        
# these http://github.com/rails/irs_process_scripts                                   
                                                                                      
# If you are using Passenger mod_rails uncomment this:                                
# namespace :deploy do                                                                
#   task :start do ; end                                                              
#   task :stop do ; end                                                               
#   task :restart, :roles => :app, :except => { :no_release => true } do              
#     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"          
#   end                                                                               
# end

http://d.hatena.ne.jp/officel/20120228/p1
でCapifileをちょっと設定変更
cap deploy:setup
で以下が作成された

[root@yoshi3 u]# cd /u
[root@yoshi3 u]# ls -lR
.:
合計 4
drwxr-xr-x 3 root root 4096  6月 22 21:29 apps

./apps:
合計 4
drwxrwxr-x 4 root root 4096  6月 22 21:29 stu

./apps/stu:
合計 8
drwxrwxr-x 2 root root 4096  6月 22 21:29 releases
drwxrwxr-x 5 root root 4096  6月 22 21:29 shared

./apps/stu/shared:
合計 12
drwxrwxr-x 2 root root 4096  6月 22 21:29 log
drwxrwxr-x 2 root root 4096  6月 22 21:29 pids
drwxrwxr-x 2 root root 4096  6月 22 21:29 system

cap deploy:check
ちゃんとdeploy:setupが実行されたかをチェックします

と基本的なコマンドは以上かと思います
あとはその他のコマンドについて何ができるのかメモっておきます

cap deploy:cold
gitからソースコードをデプロイしてくれます
Rackfileがないプロジェクトなので警告が表示されますが、デプロイはされました

cap deploy:web:disable
/u/apps/stu/shared/system/maintenance.html
を作ってくれます
このパスをApacheとかのメンテ画面に設定しておくとこれを実行するだけでメンテ画面になる

cap deploy:web:enable
/u/apps/stu/shared/system/maintenance.html
を削除してくれます。メンテ画面解除ができます

cap deploy:cleanup
/u/apps/stu/releases/配下の日付フォルダの古い順から5件削除してくれるみたい

cap deploy:create_symlink
/u/apps/stu/currentを
/u/apps/stu/releases/配下で一番新しいフォルダに切り替えてくれます

cap deploy:migrate
current配下に対してrakeを実行します(ビルド実行みたいな感じか)
ローカルビルド的な

cap deploy:migrations
途中で失敗
gitに対して何かしようとしてる感じからおそらくリモートコミットかなーと
鍵とかの設定ができていればcapからgitコミットもできそう

かなり不確定でかつ途中ですが、まぁ参考程度にw
やっぱりいちばんイイのは自分で.rbファイルのレシピを作ることですかね
あとは「deploy:cold」の中でいろいろと実行しているのでとりあえずdeploy:coldができれば問題ないですね
deploy:coldの中身
------------------------
cap deploy:update_code
cap deploy:finalize_update
cap deploy:create_symlink
------------------------
Jenkinsからコマンドキックするときはdeploy:coldではなくて上記3つのコマンドを並べたほうがよさそうですね

っていうかなんでRubyは「レシピ」って呼び方をするのだろうか?


P.S 20130513
■Tips
  • deploy.rb内に「:user」「:password」を設定するとcapコマンド実行時にパスワードを聞かれなくなる
  • capコマンドを実行するとまずCapifileが読まれ、その中でdeploy.rbをloadしているため「:user」「:password」の設定はcap shellなどを実行時にも読み込まれる
  • sshが秘密鍵認証の場合は以下2つを指定するとできるようになる
  • ssh_options[:keys] = %w(/path/to/private_key)
    ssh_options[:passphrase] = "private_key_password" 
■サンプルレシピ
以下をconfig/deploy.rbに記載する
namespace :sample do
  desc <<-DESC
    This is a sample capistrano recipe.
  DESC
  task :hostname, :roles => :app do
    run "hostname"
  end
end
:appにrolesが設定してあれば
cap sample:hostname でrolesに設定したサーバのホスト名が表示される
cap -T にも表示されるようになる
desc の宣言がない場合は cap -vT をしないとタスク一覧には表示されない

0 件のコメント:

コメントを投稿