ruby - 使用 Chef 进行自动化部署

标签 ruby ubuntu amazon-web-services chef-infra

我在生产中的几个 ec2 实例上运行我的 ruby​​ on rails 电子商务应用程序。自从我们进行持续集成以来,我没有启用自动缩放,我们会在需要时进行部署。我出于所有原因使用 Chef 。我想弄清楚如何使用 chef 自动和手动干预将代码部署到多个 ec2 实例。我尝试在初始 ec2 实例正常工作期间部署代码。但我的问题是如何在自动缩放模式下执行此操作,以便实例从 github 或 bit bucket 中提取最新代码,并在 bundle 更新和所有操作后部署它自己。

最佳答案

很公平。这就是我所做的,而且效果很好:

我创建了一个具有以下设置的 AMI:

  1. 安装 chef client

  2. 创建/etc/chef目录

  3. your_company-validator.pem 从 Chef 工作站复制到 AMI /etc/chef/validation.pem
  4. 创建 /etc/chef/client.rb 如下。

如果您使用 chef-solo,请进行相应的更改。

cat >> /etc/chef/client.rb <EF
log_level        :auto
log_location     STDOUT
chef_server_url  "https://api.opscode.com/organizations/your_company"
validation_client_name "you_company-validator"
EF

现在,您已在 AMI 中为 chef bootstrap 配置了上述所有内容。

当您启动 AMI(使用自动缩放或任何其他方式)时,提供 user-data,其中将使用您选择的 run_list 运行 chef-client。我提供以下用户数据:

#!/bin/bash
cat > /etc/chef/firstboot.json << EOL
{"run_list": ["recipe[java::oracle]"]}
EOL
chef-client -j /etc/chef/firstboot.json > /tmp/initialize_client.log 2>&1

基本上,我正在创建一个 .json 文件,我将在其中指定我要运行的配方/角色/run_list。一旦您提供了用户数据,它将在第一次启动时执行,并且 chef-client 将与 run_list 一起运行。

我想这就是您要找的。 总结一下:

  1. 使用预先安装的 chef-client、client.rb 和 验证.pem
  2. 然后在实例启动时提供用户数据

这非常适合我。如果此设置给您带来任何麻烦,请告诉我。我已经使用这个很长一段时间了。

因此,当我使用自动缩放启动我的实例时,它会自动与我选择的 Recipe 一起进行 chef-bootstrapped。

假设: 在执行此操作之前,您已在 chef-server 上创建了所有 Recipe/角色。否则 Bootstrap 最终会失败。

关于ruby - 使用 Chef 进行自动化部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223507/

相关文章:

Ruby:为什么在 nil 类中定义实例变量?

ruby - cucumber 访问场景中的所有步骤

amazon-web-services - IAM 政策不允许 EC2 访问

amazon-web-services - Lambda 的 aws-sdk 不是最新的吗?

amazon-web-services - 如何将 .NET 控制台应用程序部署到 AWS EC2 实例?

ruby-on-rails - Heroku pg 问题

ruby-on-rails - 未从 css 文件 Heroku 和 S3 引用 Rails 4 供应商 Assets 图像

ubuntu - 缺少 .cshrc 文件

gcc - 为什么 rsyslogd 找不到 libgcc_s.so.1?

ruby - 如何将我的 GVim 设置为 IDE?