Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Git Pre Recieve Hook For Integrity

DZone's Guide to

Git Pre Recieve Hook For Integrity

· Agile Zone ·
Free Resource

Adopting a DevOps practice starts with understanding where you are in the implementation journey. Download the DevOps Transformation Roadmap. Brought to you in partnership with Techtown.

I’m getting married rather soon so time has been somewhat short (in a good way) for just hacking on stuff, but I’ve finally found a little bit of time to play with something I’ve been mulling over for a while. Namely a continuous deployment workflow using the integrity continous integration server.

I’m hoping to have an incredibly simple but fully operation example available at some point – mainly to act as a good discussion point. For now here’s my current pre-receive hook.

#!/usr/bin/env ruby

require 'rubygems'
require 'grit'
require 'nokogiri'
require 'open-uri'

# This is a pre-receive git hook designed to be part of a continuous
# deployment workflow using the Integrity continuous integration server

INTEGRITY = 'http://localhost:9292'
PROJECT = 'site'

# 1. Check if the build is currently broken
# 2. If it's broken check if the commit messages starts with
# [BUILD] and if so trigger a build
# 3. If it's broken and all messages don't have the prefix
# then stop the push
# 4. If the build is fine then let everything through

doc = Nokogiri::HTML(open("#{INTEGRITY}/#{PROJECT}"))
doc.css('div#last_build h1').each do |heading|
  content = heading.content.split
  @status = content[-1]
end

if @status == "failed"
  puts "Build currently broken, to force use the [BUILD] commit message prefix"
  old_rev, new_rev, ref_name = STDIN.gets.split

  repo = Grit::Repo.new(".")

  commits = repo.commits_between(old_rev, new_rev)

  commits.reverse.each do |c|
    short, long = c.message.split(/\n+/, 2)
    if short.slice(0..7) != "[BUILD]
puts "Cancelling push"
exit 1
end
end
end

 

Take Agile to the next level with DevOps. Learn practical tools and techniques in the three-day DevOps Implementation Boot Camp. Brought to you in partnership with Techtown.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}