Using capistrano to deploy from different git branches

前端 未结 13 1025
小鲜肉
小鲜肉 2020-12-22 16:03

I am using capistrano to deploy a RoR application. The codebase is in a git repository, and branching is widely used in development. Capistrano uses deploy.rb f

相关标签:
13条回答
  • 2020-12-22 16:17

    With multistage, it's actually now:

    cap production deploy -s branch=my-branch
    

    The previous post syntax does not work in my environment

    0 讨论(0)
  • 2020-12-22 16:21

    This command won't work anymore:

    cap deploy -s branch=your_branch
    

    Support for -sS flags was removed in capistrano v3+.
    Here you can read more about it: link
    It was mentioned in couple of answers, but currently is not correct.

    What works for me:
    in deploy.rb file add

    set :branch, ENV['BRANCH'] || :master
    

    then run:

    BRANCH=your_branch cap deploy
    

    Also please notice that, in order to successfully run this command, you need to be on master branch.

    0 讨论(0)
  • 2020-12-22 16:24

    Alternatively you could structure it from the command line where you have a default branch and environment and also you are able to pass parameters to the cap call which could include the environment and the branch to use. This could be a branch that is explicitly passed or you could have a parameter which would indicate current branch as described in the link you listed.

    #call with cap -S env="<env>" branch="<branchname>" deploy
    ...
    
    # Prevents error if not parameter passed, assumes that default 'cap deploy' command
    # and should deploy the master branch to the production server
    set(:env, ‘production’) unless exists?(:env)
    set(:branch, ‘master’) unless exists?(:branch)
    
    if !env.nil? && env == "production"
       role :web, "production_ip_address"
    else   # add more as needed 
       role :web, "development_ip_address"
    end
    
    if !branch.nil? && branch == "current"
       set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
    elsif !branch.nil?
       set :branch, branch
    else   # add more as needed 
       set :branch, "master"
    end
    ...
    

    Code example borrowed heavily from here

    0 讨论(0)
  • 2020-12-22 16:25

    Using Capistrano 3.1.0+, none of these were working for me anymore. Instead, according to their commented instructions:

       ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
    

    But, you don't want to use ask or it will prompt you. Instead you should use set. HEAD is the top most branch; 'edge' as it's called. If you want a different branch, replace HEAD with your branch name, eg: master, staging, etc.

    To conclude with examples, in /config/deploy/production.rb, you might include this line:

       set :branch, proc { `git rev-parse --abbrev-ref master`.chomp }
    

    ...or

       set :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
    

    btw, HEAD is the default setting, so no need to really state that in file. Might be used better in a /config/deploy/edge.rb.

    In /config/deploy/staging.rb, you might include this line:

       set :branch, proc { `git rev-parse --abbrev-ref staging`.chomp }
    

    ...or

       set :branch, proc { `git rev-parse --abbrev-ref test`.chomp }
    

    You get the idea!

    I hope these examples help future users of capistrano (^_^)

    0 讨论(0)
  • 2020-12-22 16:27

    For capistrano 3 users:

    desc "prompt for branch or tag"
    task :git_branch_or_tag do
      on roles(:all) do |host|
        run_locally do
          execute :git, 'tag'
          tag_prompt = "Enter a branch or tag name to deploy"
          ask(:branch_or_tag, tag_prompt)
          tag_branch_target = fetch(:branch_or_tag, 'master')
          set(:branch, tag_branch_target)
        end
      end
    end
    
    before 'deploy:updated',  :git_branch_or_tag
    
    0 讨论(0)
  • 2020-12-22 16:29

    Im using version 3.3.5 and i have this working:

    set :branch, 'develop'
    
    0 讨论(0)
提交回复
热议问题