我正在寻找一种方法来调用单个Capistrano任务以对不同角色执行不同的任务。 Capistrano能够做到这一点吗?还是我已经为每个角色编写了具体的任务?创建基于角色执行不同任务的Capistrano任务
17
A
回答
18
标准的方式Capistrano的做到这一点:
task :whatever, :roles => [:x, :y, :z] do
x_tasks
y_tasks
z_tasks
end
task :x_tasks, :roles => :x do
#...
end
task :y_tasks, :roles => :y do
#...
end
task :z_tasks, :roles => :z do
#...
end
所以,是的,你确实需要编写不同的任务,但你可以从父任务给他们打电话,他们会适当地进行筛选。
5
其实也没什么:
% cat capfile
server 'localhost', :role2
task :task1, :roles=>:role1 do
puts 'task1'
end
task :task2 do
task1
end
% cap task2
* executing `task2'
* executing `task1'
task1
的:角色参数是通过进一步的运行命令等,但似乎并没有影响任务是否真正激发。
对不起,没有找到方法发表评论,所以我写在这里。
1
有一种方法,种。检查:http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/,您会看到您可以使用ROLES环境变量覆盖默认角色。
我有一个任务定义为:
desc "A simple test to show we can ssh into all servers"
task :echo_hello, :roles => :test do
run "echo 'hello, world!'"
end
的:test
角色分配给一台服务器。
在命令行中,我可以运行:
[[email protected] bin]$ cap echo_hello ROLES=lots_of_servers
而且现在的任务将在lots_of_servers角色运行。
我还没有通过更新ENV
哈希来验证它是否可用于ruby脚本,但这是一个好的开始。
3
你也可以做
task :foo do
run "command", :roles => :some_role
upload "source", "destination", :roles => :another_role
end
2
使用命名空间: https://github.com/leehambley/capistrano-handbook/blob/master/index.markdown#namespacing-tasks
namespace :backup do
task :default do
web
db
end
task :web, :roles => :web do
puts "Backing Up Web Server"
end
task :db, :roles => :db do
puts "Backing Up DB Server"
end
end
这些任务在帽-T显示为
backup:default
backup:web
backup:db
1
只有备案,这可能是使用Capistrano 3的解决方案:
desc "Do something specific for 3 different servers with 3 different roles"
task :do_something do
on roles(:api_role), in: :sequence do
# do something in api server
end
on roles(:app_role), in: :sequence do
# do something in application server
end
on roles(:another_role), in: :sequence do
# do something in another server
end
end
的服务器定义来执行的应用程序服务器“do_something”任务将是这样的:
server 'application.your.domain', user: 'deploy', roles: %w{app_role}
然后,你可以调用任务(有几种方法可以做到这一点),任务会根据“app_role”执行特定的指令。
相关问题
- 1. 如何为特定角色创建角色并运行Capistrano任务?
- 2. Capistrano 3角色特定的任务
- 3. Capistrano的:与角色创建任务没有工作
- 4. 以不同的间隔在Azure Worker角色中执行任务
- 5. Capistrano的任务
- 6. 用构建任务执行任务
- 7. Capistrano的:每个角色一个任务,每个服务器
- 8. 如何为Capistrano中的不同角色定义相同的任务?
- 9. 无法创建一个执行任务的Gradle任务规则
- 10. 等同于svn中的执行任务
- 11. 创建可执行任务的gradle
- 12. 只为某些角色运行Capistrano任务
- 13. waf在执行任务中创建任务
- 14. 本地运行capistrano任务
- 15. 不同的执行任务的方式
- 16. 同步grunt.js任务执行
- 17. 以不同的用户运行计划的任务,它创建的任务
- 18. 从Capistrano回调中的父任务继承角色
- 19. Capistrano为每个角色重复的任务
- 20. 多线程执行不同任务
- 21. Laravel 4基于角色的团体任务
- 22. 从capistrano任务中调用多级capistrano任务
- 23. 春任务执行计划任务
- 24. Gradle任务配置与任务执行
- 25. 任务继续执行多个任务
- 26. 活动不执行任务
- 27. Asynk任务不执行doinBackground
- 28. 芹菜任务不执行
- 29. 异步任务不执行
- 30. Maven Antrun不执行任务
这不适合我,所有三项任务都会执行。 – aceofspades 2012-03-15 00:58:29