Tôi đang tìm cách gọi một nhiệm vụ Capistrano duy nhất để thực hiện những việc khác nhau cho các vai trò khác nhau. Capistrano có thể thực hiện việc này hay tôi có viết một nhiệm vụ cụ thể cho từng vai trò không?Tạo nhiệm vụ Capistrano thực hiện các tác vụ khác nhau dựa trên vai trò
Trả lời
Cách thông thường để làm điều này trong 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
Vì vậy, có, bạn không cần phải viết nhiệm vụ riêng biệt, nhưng bạn có thể gọi cho họ từ một nhiệm vụ phụ huynh và họ sẽ lọc một cách thích hợp.
Trên thực tế không có:
% 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
Các: vai trò param được truyền hơn nữa để chạy lệnh vv nhưng dường như không ảnh hưởng đến việc nhiệm vụ đang thực sự bị sa thải.
Xin lỗi, không tìm cách đưa nhận xét về nhận xét vì vậy tôi đã viết nó ở đây.
Có một cách, loại. Kiểm tra: http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/ và bạn sẽ thấy rằng bạn có thể ghi đè các vai trò mặc định bằng biến môi trường ROLES.
Tôi có một công việc định nghĩa là:
desc "A simple test to show we can ssh into all servers"
task :echo_hello, :roles => :test do
run "echo 'hello, world!'"
end
Vai trò :test
được gán cho một máy chủ.
Trên dòng lệnh, tôi có thể chạy:
[[email protected] bin]$ cap echo_hello ROLES=lots_of_servers
Và nhiệm vụ bây giờ sẽ chạy về vai trò lots_of_servers.
Tôi chưa xác minh rằng thao tác này hoạt động bên trong tập lệnh ruby bằng cách cập nhật mã băm ENV
, nhưng đây là một khởi đầu tốt.
Bạn cũng có thể làm
task :foo do
run "command", :roles => :some_role
upload "source", "destination", :roles => :another_role
end
Sử dụng không gian tên: 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
những nhiệm vụ hiển thị trong một -T nắp như
backup:default
backup:web
backup:db
Chỉ dành cho các kỷ lục, điều này có thể là một giải pháp sử dụng 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
Định nghĩa sever để thực hiện "do_something" nhiệm vụ trong một máy chủ ứng dụng sẽ là một cái gì đó như:
server 'application.your.domain', user: 'deploy', roles: %w{app_role}
Sau đó, bạn có thể gọi cho công việc (có một số cách để làm điều đó) và nhiệm vụ sẽ thực hiện các hướng dẫn cụ thể theo "app_role".
Điều này không hiệu quả đối với tôi, cả ba nhiệm vụ đều được thực thi. – aceofspades
Không làm việc cho tôi. Tất cả các nhiệm vụ được thực hiện. –
Không hoạt động ở đây – Fluffy