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

suupic · February 21, 2012 · Last by yangkit replied at February 22, 2012 · 4187 hits

例如我这里有 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]来获取

You need to Sign in before reply, if you don't have an account, please Sign up first.