【问题标题】:How can i execute capistrano task in sequence for multiple server?如何为多个服务器按顺序执行 capistrano 任务?
【发布时间】:2018-12-31 14:12:35
【问题描述】:

我在下面有多个服务器和 capistrano 任务

before 'deploy:starting',   'elb:deregister'
before 'deploy:finishing',  'elb:register'

after 'deploy:publishing', 'deploy:restart'
after 'deploy:failed',     'elb:deregister'

当我现在像下面这样部署时

  before 'deploy:starting',   'elb:deregister' -> server1
  before 'deploy:starting',   'elb:deregister' -> server1

  ...
  ...

如何按如下顺序部署

服务器 1

  before 'deploy:starting',   'elb:deregister'
  before 'deploy:finishing',  'elb:register'

  after 'deploy:publishing', 'deploy:restart'
  after 'deploy:failed',     'elb:deregister'  

服务器 2

  before 'deploy:starting',   'elb:deregister'
  before 'deploy:finishing',  'elb:register'

  after 'deploy:publishing', 'deploy:restart'
  after 'deploy:failed',     'elb:deregister'

【问题讨论】:

标签: ruby-on-rails ruby deployment capistrano capistrano3


【解决方案1】:

这里有多种选择。

假设你有这样的上限配置:

server 'server_1', user: 'deploy', roles: %w[app db web]
server 'server_2', user: 'deploy', roles: %w[app]

手动操作。

你可以这样做;

  • 注释掉 server_2 行并运行cap production deploy
  • 恢复 server_2 行并注释掉 server_1 行并运行cap production deploy

这很愚蠢,但很有用,而且非常简单。

使用不同的部署环境。

您可以设置另一个部署环境,例如 production2 并运行 cap production deploy; cap production2 deploy

使用不同的部署角色。

为您的服务器赋予不同的角色并更改您的任务和配置,如下所示:

server 'server_1', user: 'deploy', roles: %w[app db web server_1]
server 'server_2', user: 'deploy', roles: %w[app server_2]

namespace elb do
  task ::deregister_1 do
    on roles(:server_1) do
      ...
    end
  end


  task ::deregister_2 do
    on roles(:server_2) do
      ...
    end
  end
end


before 'deploy:starting',   'elb:deregister_2'
before 'elb:deregister_2',   'elb:deregister_1'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多