Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

5,248

Capistrano:自动化代码部署

  • 2014-05-09
  • 暂无评论

Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用(它自动完成多台服务器上新版本的同步更新,包括数据库的改变)

注:fabric是一款Python的库,也支持在多台服务器上运行脚本的功能,功能相对基础
自动化运维工具来说(puppet,ansible)自动化运维框架,提供基于流程的自动化方案,capistrano和fabric更像是工具,提供了一定的应用范围的支持,提供更多基于语言的命令支持,并且通过角色定义,来区分脚本执行的逻辑划分

基本说明:
Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用PHP开发的。Capistran最初是用来应用于bash指令行。现在Ruby on Rails框架的用于也可以使用它的新特性,例如,对当前web应用部署改变使其更新版本,或者使其回滚到之前的旧版本。
主要功能点:
  • 通过版本控制软件实现项目的自动化部署,支持的有:git , svn  , hg
  • 通过定义不同的环境设置不同的部署脚本(capistrano-ext中提供的Capistrano Multistage功能),每个脚本内能定义各自的代码仓库,及相应的服务器集群角色:web, app ,db, workers等
  • 通过在部署脚本内定义任务(task)来执行不同的脚本命令,能通过命名空间划分任务(namespace)
  • 任务能指定执行的角色,并且对于执行任务制定钩子,分为:before,after
部署工作:
1.完成私钥的配置,以保证每台机器都可以通过执行cap脚本的机器访问
2.安装,通过Ruby的gem进行安装
$ gem install capistrano-ext ## capistrano是基本安装,capistrano-ext提供更多容易的扩展工具集
可以通过命令
$ cap
$ bundle exec cap
执行
$ bundle exec cap -vT
$ bundle exec cap staging deploy
$ bundle exec cap production deploy
$ bundle exec cap production deploy --dry-run
$ bundle exec cap production deploy --prereqs
$ bundle exec cap production deploy --trace

3.在工作目录执行生成cap的配置文件,帮助正确加载recipe和库

$ capify .
capfile不用编辑
4.配置部署脚本config/deplu.rb,在config/deploy/下是不同环境的部署脚本,可以分开设置
5.脚本设置:

在你现有的空 deploy.rb 文件中,让我们在第一行输入应用的名称。如果你的应用名称是“fancy shoes”,则输入:

set :application, "app_name"

接着我们添加要访问的仓库。Git 用户可以添加:

set :scm, :git
set :repository, "git@xxxx:/repository.git"
set :scm_passphrass, ""

Subversion 用户需添加:

set :scm, :subversion
set :repository, "https://xxxx/repository"

然后,我们设置服务器的帐号:

set :user, "server-user-name"

确保该帐号具有 deploy_to 变量所指定目录的读写访问权限。

因为使用了capistrano-ext,则可以

require 'capistrano/ext/multistage'

然后指定你的环境,或“stages”:

set :stages, ["staging", "production"]
set :default_stage, "staging"
当你指定哪个 stage 想要部署时,Capistrano 方能加载适合的文件。

绑定 Git 分支,在不同的部署文件中

set:branch,'production
set:branch,'staging'
6.脚本设置:
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} /etc/init.d/lsws reload" # we use LiteSpeed Web Server
  end
end

# The task below serves the purpose of creating symlinks for asset files.
# Large asset files like user uploaded contents and images should not be checked into the repository anyway, so you should move them to a shared location.

task :create_symlinks, :roles => :web do
  run "ln -s #{shared_path}/uploads #{current_release}/uploads"
  run "ln -s #{shared_path}/zb #{current_release}/zb"
end

# Let's run the task immediately after the deployment is finalised.

after "deploy:finalize_update", :create_symlinks
cap内部提供了基本的环境部署脚本:全部都在deploy命名空间下
 
 


back up ↑

无觅相关文章插件,快速提升流量