我正在使用OpsWorks进行生产部署,我希望在部署成功后运行通知挂钩(特别是Slack webhook)。
我可以制作一个配方来执行此操作,但是配方会在每个实例上运行,我认为它会执行N个钩子(其中N是实例数)。我真的只想在所有实例完成部署时运行一个钩子。
当应用程序完成部署到所有OpsWorks实例后,有没有办法运行代码?
答案 0 :(得分: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