用capistrano写一个简单的deploy脚本
源:http://blog.csdn.net/largetalk/article/details/6743090
setp 1:
gem install capistrano gem install capistrano-ext
capify .
require 'bundler/capistrano' #添加之后部署时会调用bundle install, 如果不需要就可以注释掉 require "capistrano/ext/multistage" #多stage部署所需 set :stages, %w(development production) set :default_stage, "development" set :application, "crm_app_end" #应用名称 set :repository, "https://chang.abc.com/svn/engineering/vwaccount/mydeploy/trunk" set :keep_releases, 5 #只保留5个备份 set :deploy_to, "/var/www/#{application}" #部署到远程机器的路径 set :user, "user1" #登录部署机器的用户名 set :password, "user1" #登录部署机器的密码, 如果不设部署时需要输入密码 default_run_options[:pty] = true #pty: 伪登录设备 #default_run_options[:shell] = false #Disable sh wrapping set :use_sudo, true #执行的命令中含有sudo, 如果设为false, 用户所有操作都有权限 set :runner, "user2" #以user2用户启动服务 set :svn_username, "xxxx" set :scm, :subversion # # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` #set :deploy_via, :copy #如果SCM设为空, 也可通过直接copy本地repo部署 #set :domain, "crm.abc.com" #custom define role :web, "192.168.0.13", "192.168.0.117" # Your HTTP server, Apache/etc role :app, "192.168.0.13", "192.168.0.117" # This may be the same as your `Web` server role :db, "192.168.0.13", :primary => true # This is where Rails migrations will run #role :db, "your slave db-server here" # namespace :deploy do desc "remove and destory this app" task :destory, :roles => :app do run "cd #{deploy_to}/../ && #{try_sudo} mv #{application} /tmp/#{application}_#{Time.now.strftime('%Y%d%m%H%M%S')}" #try_sudo 以sudo权限执行命令 end after "deploy:update", "deploy:shared:setup" #after, before 表示在特定操作之后或之前执行其他任务 namespace :shared do desc "setup shared folder symblink" task :setup do run "cd #{deploy_to}/current; rm -rf shared; ln -s #{shared_path} ." end end after "deploy:setup", "deploy:setup_chown" desc "change owner from root to user1" task :setup_chown do run "cd #{deploy_to}/../ && #{try_sudo} chown -R #{user}:#{user} #{application}" end task :start do run "cd #{deploy_to}/current && ./crmd.sh start" #try_sudo "cd #{deploy_to}/current && ./restart.sh" end task :stop do run "cd #{deploy_to}/current && ./crmd.sh stop" end task :restart do run "cd #{deploy_to}/current && ./crmd.sh restart" end end cap deploy:setup #建立部署路径 cap deploy:update #部署 cap deploy:start #启动服务 cap deploy:stop #停止服务 cap deploy:restart #重启服务
#require "capistrano/ext/multistage" #多stage部署所需 set :application, "app" #应用名称 set :scm, :subversion set :repository, "svn://0.0.0.0/trunk/src" set :keep_releases, 5 #只保留5个备份 set :deploy_to, "/var/www/#{application}" #部署到远程机器的路径 set :user, "xxx" #登录部署机器的用户名 set :password, "xxxxx" #登录部署机器的密码, 如果不设部署时需要输入密码 default_run_options[:pty] = true #pty: 伪登录设备 #default_run_options[:shell] = false #Disable sh wrapping #set :use_sudo, true #执行的命令中含有sudo, 如果设为false, 用户所有操作都有权限 set :runner, "xxxx" #以用户启动服务 #set :deploy_via, :copy #如果SCM设为空, 也可通过直接copy本地repo部署 role :web, "172.16.120.222"#, "192.168.0.117" # Your HTTP server, Apache/etc role :app, "172.16.120.222"#, "192.168.0.117" # This may be the same as your `Web` server role :db, "172.16.120.222", :primary => true # This is where Rails migrations will run #role :db, "your slave db-server here" # namespace :deploy do desc "remove and destory this app" task :destory, :roles => :app do run "cd #{deploy_to}/../ && #{try_sudo} mv #{application} /tmp/#{application}_#{Time.now.strftime('%Y%d%m%H%M%S')}" #try_sudo 以sudo权限执行命令 end # after "deploy:setup", "deploy:setting_link" # desc "symlink for settings.py" # task :setting_link do # run "cd #{deploy_to}; #{try_sudo} touch current; #{try_sudo} ln -s current releases/#{application}" # end after "deploy:update", "deploy:shared:setup" #after, before 表示在特定操作之后或之前执行其他任务 namespace :shared do desc "setup shared folder symblink" task :setup do run "cd #{deploy_to}/current; ln -s #{shared_path} x" run "cd #{deploy_to}/current; rm -rf log; ln -s #{shared_path}/log log" run "cd #{deploy_to}/releases; rm -f #{application} && __realversion__=`realpath ../current` && ln -s $__realversion__ #{application}" end end after "deploy:setup", "deploy:setup_chown" desc "change owner from root to user1" task :setup_chown do run "cd #{deploy_to}/../ && #{try_sudo} chown -R #{user}:#{user} #{application}" end task :default do transaction do update_code symlink end end task :update_code, :except => { :no_release => true } do on_rollback { run "rm -rf #{release_path}; true" } strategy.deploy! end before "deploy:rollback", "deploy:clean_adaptive" task :clean_adaptive do run "cd #{deploy_to}/releases; rm -f #{application}" end after "deploy:rollback", "deploy:rollback_set" task :rollback_set do run "cd #{deploy_to}/releases; rm -f #{application} && __realversion__=`realpath ../current` && ln -s $__realversion__ #{application}" end task :start do run "cd #{deploy_to}/current && ./adaptive_pool.sh start" run "cd #{deploy_to}/current && ./adaptive_exam.sh start" end task :stop do run "cd #{deploy_to}/current && ./adaptive_pool.sh stop" run "cd #{deploy_to}/current && ./adaptive_exam.sh stop" end task :restart do run "cd #{deploy_to}/current && ./adaptive_pool.sh restart" run "cd #{deploy_to}/current && ./adaptive_exam.sh restart" end end