Post-deploy notifications on Engine Yard cloud
I’ve got a project hosted on EngineYard‘s cloud servers, with geographically-dispersed team. The developers are often working on separate feature sets, often deployed independently. As a quality-control and awareness measure we wanted to be notified when a deploy was done.
This was pretty easy to set up, and would work with capistrano deployments also.
First we set up a mailer action; I used an existing mailer class for this but you might want to create a separate class just for process-type notifications:
def deploy_notification(attribs)
subject "A build of my_project was deployed to #{attribs[:env_name]}"
from "MyProject CodeMonkey HQ"
@from = "notify@example.com"
recipients "bullwinkle@example.com"
sent_on Time.now
body :revision => attribs[:revision], :env_name => attribs[:env_name]
end
and the corresponding deploy_notification.text.plain.erb:
Heads up code monkeys! New code has been deployed to <%= @env_name %>
Details:
Environment: <%= @env_name %>
Revision: <%= @revision %>
I’ll probably make that a little fancier with a direct link to the commit on the githubs, and possibly pull in the commit message etc.
Next, we add a rake task to call the mailer; I put this in /lib/tasks/deploy.rake:
namespace :deploy do
desc "notify developers of deployment"
task :notify => :environment do
attribs = {}
ARGV.each do |arg|
if arg.match(/TO=(.*)/)
attribs[:env_name] = $1
elsif arg.match(/REVISION=(.*)/)
attribs[:revision] = $1
end
end
SupportMailer.deliver_deploy_notification(attribs)
end
end
Finally, for engineyard integration, in deploy/after_restart.rb:
# notify dev team of deploy
run "cd #{release_path} && rake deploy:notify TO=#{@configuration[:environment]} REVISION=#{@configuration[:revision]}"
That gets called by the engineyard chef scripts after the deploy finishes. For capistrano deployments, you could do the same in an “after deploy:restart” call.
That’s it. Hope it’s helpful.
Post a Comment