我正在尋找一種方法來調用單個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