Capistrano 3拉命令行参数

我正在从Capistrano 2升级到Capistrano 3.在Cap 2中我使用以下命令行参数作为分支名称(否则默认为master

 set :branch, fetch(:branch, "master") 

如果我调用cap deploy ,它将部署master分支。 但它也让我做这样的事情:

 cap deploy -S branch=foo 

哪个会部署foo分支。

现在,在Capistrano 3中,如果我尝试运行以上操作,我会收到一个错误: invalid option: -S

现在通过命令行传递参数的正确方法是什么?

Rake任务(上限正在使用)是支持参数。

 namespace :test do desc "Test task" task :test, :arg1 do |t, args| arg1 = args[:arg1] puts arg1 end end 

上限-T输出:

cap yiic:test [arg1] #Test任务

调用示例:

制帽yiic:测试[test1]

另外,这是一篇有用的post

PS:你应该使用env vars进行“全局”设置。 像多个任务的常见值一样。

我最终做的是设置一个ENV变量。

所以现在我可以打电话了

 cap production deploy branch=mybranch 

它将部署mybranch 。 如果我运行一个简单的cap production deploy ,它将部署默认分支( master如果你没有设置一个,但我已经改变了我的下面default为演示)

这是我在deploy.rb文件中放入的代码:

 set :branch, "default" if ENV['branch'] set :branch, ENV['branch'] end 

为Capistrano 3提供更新和有效的解决方案(因为它花了我一段时间才找到它并且有太多的测试使其工作)。

我的文件是这样的:

 config/ deploy/ staging.rb production.rb deploy.rb ... Capfile 

staging.rb我有:

 server 'staging', roles: %w(db) set :branch, ENV.fetch('REVISION', 'master') set :use_sudo, false set :user, 'toto' set :deploy_to, '/var/www' 

(在server 'staging'staging是一个SSH连接,在我的.ssh/config定义)

然后,要部署特定的修订版,我只需要调用:

 cap staging deploy REVISION=3b2d9ab 

其中3b2d9ab是Git提交哈希(短版或长版)。