capistrano从安装到部署

来源:互联网 发布:24网络交换机怎么连接 编辑:程序博客网 时间:2024/06/03 09:27

由于capistrano是用ruby语言开发的,所以使用capistrano前,需要在部署项目的源服务器上(部署的目标服务器不需要)安装ruby及capistrano。

  1. 安装rbenv

    git clone https://github.com/rbenv/rbenv.git ~/.rbenvecho 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrcecho 'eval "$(rbenv init -)"' >> ~/.bashrcsource ~/.bashrctype rbenvgit clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
  2. 安装ruby

    rbenv install 2.3.0 rbenv global 2.3.0

    (若安装失败,可手动下载后,复制到/tmp/ruby-build.xxxx.xxx目录,然后再执行rbenv install 2.3.0即可下载地址:https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2)

  3. 安装bundler

    gem install bundler
  4. 安装capistrano
    在项目的根目录中添加Gemfile

    source 'https://rubygems.org'gem 'capistrano', '~> 2'gem 'cap_crontab'
  5. 初始化capistrano项目

    前提是该项目未添加capistrano的配置文件,Capfile、config等。

    在项目根目录执行如下命令,capistrano就会自动在项目下创建配置文件:

    capify .

    若使用capistrano3.x,则使用cap install命令

  6. 编辑生成的config/deploy.rb文件

    以下为我们的deploy脚本,可参考ruby语法,由于需要适用于不同stage的部署,故提取了一些变量,可通过不同stage的配置文件进行设置。

    由于capistrano自带从scm上获取代码,编译打包,然后部署的流程,而我们将代码的编译打包工作交给了jenkins,只适用capistrano的自动部署和回滚功能,故需要重写deploy:update_code任务。

    require 'capistrano/ext/multistage'set :stages, %w{staging production}   // 支持的stage,对应config/deploy/下的配置文件set :default_stage, "staging"set :application, "p4j-service"      // 仅仅是后面需要使用的一个变量set :deploy_to, "/tmp/work/#{application}"  // 部署到目标服务器的路径set :keep_releases, 5    // 目标服务器上报存的版本数量,超过数量则会将旧的版本删除set :use_sudo, falsedefault_run_options[:pty] = truedefault_run_options[:shell] = "/bin/bash"after :deploy, "deploy:cleanup" namespace :deploy do  desc "override update_code"  task :update_code do    release_path="#{deploy_to}/releases/"+Time.now.strftime("%Y%m%d%H%M%S")    run "mkdir -p #{release_path} "    Dir["./target/#{application}*.tar.gz"].each {|file|  top.upload file, "#{release_path}/#{application}.tar.gz" }   end  desc "Start service"  task :start do    run "cd #{current_path} && if [ `ls | grep #{application} | grep -v tar.gz | wc -l` -lt 1 ] ; then tar -zxvf #{application}.tar.gz; fi && cd `ls | grep #{application} | grep -v tar.gz`/bin && chmod +x serviced.sh && ./serviced.sh start", pty: false  end  desc "Stop service"  task :stop, :on_error => :continue do    run "cd #{current_path}/#{application}/bin && ./serviced.sh stop"  end  desc "Restart service"  task :restart do   stop   sleep 5   start endend
  7. 添加不同stage的配置文件

    如果有其他的stage,则参考此文件添加即可,添加到项目根目录下的config/deploy/目录下,文件名为stage名称,扩展名为.rb。(如production.rb)

    set :env, 'production'  // stageset :user, 'dm'    // 部署使用的用户server "10.118.28.14", :app   // 部署的目标服务器IPserver "10.118.28.16", :app

    至此,我们的项目已经可以使用capistrano自动部署了。

  8. 部署和回滚命令

    在需要自动部署的项目的根目录(自动部署的源服务器上),使用如下命令进行自动部署和自动回滚

    cap production deploycap production deploy:rollback
0 0