1

我正在使用 OpsWorks 进行生产部署,并且我希望有一个在部署成功后运行的通知挂钩(特别是 Slack webhook)。

我可以制作一个配方来做到这一点,但是配方在每个实例上运行,(我认为)会执行 N 个钩子(其中 N 是实例数)。我真的只想在所有实例都完成部署后运行一个钩子。

当应用程序完成部署到所有 OpsWorks 实例后,有什么方法可以运行代码?

4

1 回答 1

0

是的!(嗯,有点……)有Chef Deployment Hooks

在您的情况下,由于您只运行一次,您将不得不找到一种方法来“选择”一个服务器并在钩子锻炼中after_restart或在钩子锻炼中运行您的代码,以确保它是“最后一个”部署。

下面是一个示例,它始终会告诉您当前实例是否是“领导者”实例,因此仅选择一个实例来运行某些东西:

available_instances = new_resource.node[:opsworks][:layers]['php-app'][:instances]
available_instances = available_instances.select { |name, instance|
  ['requested', 'booting', 'running_setup', 'online'].include?(instance[:status])
}
leader_name = available_instances.keys.sort.first
leader = new_resource.node[:opsworks][:layers]['php-app'][:instances][leader_name]

if leader && new_resource.node[:opsworks][:instance]
  is_leader = leader[:aws_instance_id] == new_resource.node[:opsworks][:instance][:aws_instance_id]
else
  is_leader = true
end
于 2015-07-31T16:27:43.083 回答