capistrano从安装到部署

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

  1. 安装rbenv

    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    source ~/.bashrc
    type rbenv
    git 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, false
    
    
    default_run_options[:pty] = true
    default_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
     end
    end
  7. 添加不同stage的配置文件

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

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

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

  8. 部署和回滚命令

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

    cap production deploy
    cap production deploy:rollback

你可能感兴趣的:(工程)