![使用 Capistrano 中的 Amazon EC2 工具让服务器推送代码](https://linux22.com/image/567875/%E4%BD%BF%E7%94%A8%20Capistrano%20%E4%B8%AD%E7%9A%84%20Amazon%20EC2%20%E5%B7%A5%E5%85%B7%E8%AE%A9%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E9%80%81%E4%BB%A3%E7%A0%81.png)
我正在尝试使用 EC2 工具在 Capistrano 中的 /config/deploy/prod.rb 文件中获取某种数组类型中带有特定标签的所有机器。如下所示:
在 prod.rb 文件中:
//untested command
workers-array[]=$(ec2-describe-instances -F vpc-id=1234 -F tag:Env=prod -F tag:SystemType=worker)
for(i=0;i<workers-array.len;i++){
role :worker-A, workers-array[i]
}
我不确定如何在 Capistrano 中做到这一点,我也是 Ruby 新手。如果大家能提供任何帮助,我将不胜感激。
答案1
我最近遇到了同样的问题,或者有类似的想法。在处理其他事情时遇到了这个问题。
因此,我想根据配置的服务器类型运行某些 Puppet 配置。执行类似操作应该相当简单,但根据情况使用属性来运行不同的任务。
我设置服务器以便像在 Capistrano 中一样描述,例如:
role :web, "mywebhost" #attributes to the server can be added at the end
然后我创建了一个任务来引导所有服务器,以确保它们有 Puppet。之后我添加了在引导任务之后运行的命令以及在哪个角色上运行的命令。这些条件可以利用属性。
after "bootstrap", :roles=>[:web] do
# here we place code specific for configuring the web role using puppet
try_sudo("puppet apply config/puppet/web.pp")
end
您可以查看以下链接以获得基于属性运行任务的灵感:用 Capistrano 拉动木偶线
这个例子是关于 puppet 的,但是你可以忽略 puppet 并创建你想要的 capistrano 结构。
我在 github 上设置了一个测试仓库来描述这一点。我仍然需要添加自述文件,但你应该在这里找到你需要的内容:capdriven-puppet