我的项目有一个多步骤管道,其中包括一些步骤,如Crawling,NLP等,但我只是将它们称为Step1,Step2等。此外,我希望能够部署到不同的环境(开发) ,prod等)。
我想我将使用Capistrano的多级组件来部署到不同的环境(例如,cap dev deploy vs cap prod deploy)。
对每个管道步骤使用角色似乎也很直观。但是,每个步骤都相当独立于管道的其余部分运行,因此可以独立于其他步骤重新启动/部署每个步骤。看起来Capistrano似乎不支持仅针对特定角色运行任务。有什么好办法呢?
这是为每个角色专门执行此定义任务的最佳方式吗?如果角色之间有一些共同的任务怎么办?也许辅助方法就是那里的答案?
答案 0 :(得分:3)
不确定这正是您所寻找的,但是当我想对某个特定角色做某事时,我会使用capistrano shell。例如,假设我想部署但仅限于我的应用服务器,我可能会执行以下操作:
cap production shell
cap>with app
cap>!deploy #or any other cap task you have
如果需要,您也可以按机器范围。再次:
cap production shell
cap>on <machine name or ip>
cap>!deploy #or any other cap task you have
希望它有所帮助,
斯科特
答案 1 :(得分:2)
如果要从命令行运行capistrano任务,但仅针对已定义角色的子集,则可以使用ROLES
参数。
以下命令仅对角色category:task
执行任务was
:
cap ROLES=was category:task
ROLES
参数是多值的,因此您可以添加以逗号分隔的更多角色:
cap ROLES=was,db category:task
有关详细信息,请参阅invoke文档
答案 2 :(得分:1)
查看此讨论Creating a Capistrano task that performs different tasks based on role
task :stop_memcached, :roles => :memcache do
...
end
答案 3 :(得分:1)
不确定添加了哪个版本的功能,但是上限将在ROLES环境变量中查找以确定要运行的角色
$ ROLES=db cap deploy