部署 capistrano 如何通过命令行向 task 里传递参数?

suupic · 2012年02月21日 · 最后由 yangkit 回复于 2012年02月22日 · 4143 次阅读

例如我这里有 3 个应用,采用 rpm 方式部署 每个应用都有 deploy 和 version 两个操作

cap -vT
cap invoke      
cap app:deploy       
cap app:version      
cap app_baidu:deploy   
cap app_baidu:version    
cap app_drawer:deploy 
cap app_drawer:version

由于我无法将参数传递进 task 所以对每个 task 进行一次定义,一个 app 就要定义这样一段

namespace :app do
  task :deploy, :roles => [:app] do
    run "yum update app -y"
  end

  task :version, :roles => [app] do
    run "rpm -qa app"
  end  
end

其实 task 之间只有 namespace 和 roles 名称不同,例如对app_baidu就变成了

namespace :app_baidu do
  task :deploy, :roles => [:app_baidu] do
    run "yum update app_baidu -y"
  end

  task :version, :roles => [app_baidu] do
    run "rpm -qa app_baidu"
  end  
end

这样的 app 我这里有十几个,感觉书写非常繁琐并且易出错 是否有方法只写一个 task?能否将命令行变量传递进 task,把个性化的名称用变量替换? 查看文档没有发现这方面的内容

可以使用-s 参数设置,如:

cap logs:watch -s line=20 在 task 中使用variables[:line]来获取

需要 登录 后方可回复, 如果你还没有账号请 注册新账号