You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jenkins-debian-glue/github/hook_server.rb

87 lines
2.0 KiB

#!/usr/bin/env ruby
require 'httparty'
require 'json'
require 'net/http'
require 'sinatra'
set :port, 8042
## config
CONFIG = YAML.load_file('config.yml')
TOKEN = CONFIG["token"] || "unconfigured"
CAUSE = CONFIG["cause"] || "git_commit_triggered"
SERVER = CONFIG["server"] || "https://jenkins/"
## helper functions
def trigger_job(job, branch)
uri = URI("#{SERVER}job/#{job}/buildWithParameters")
req = Net::HTTP::Post.new(uri.path)
req.set_form_data('token' => TOKEN,
'cause' => CAUSE,
'branch' => branch)
res = Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == 'https',
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
http.request(req)
end
case res
when Net::HTTPSuccess, Net::HTTPRedirection
p "OK"
else
res.value
end
end
def job_names
json = HTTParty.get("#{SERVER}/api/json")
json["jobs"].map {|job| job["name"]}
end
def job_details(job_name)
HTTParty.get("#{SERVER}/job/#{job_name}/api/json")
end
def build_details(job_name, build_number)
HTTParty.get("#{SERVER}/job/#{job_name}/#{build_number}/api/json")
end
## main sinatra app
# this is where GitHub actually ends up at, configured as
# WebHook URL at https://github.com/$OWNER/$PROJECT/settings/hooks
post '/trigger' do
push = JSON.parse(params[:payload])
# p "JSON data: #{push.inspect}"
# p JSON.pretty_generate(push)
project = push["repository"]["name"]
project = project + "-source" # we use $job-source as default entry point
branch = push["ref"]
# make sure we do not trigger a build with a branch that was just deleted
deleted = push["deleted"]
if deleted
puts "branch #{branch} was deleted, not triggering build"
elsif job_names.include? project
trigger_job(project, branch)
else
puts "no such job #{project}"
end
end
# debugging helper
post '/debug' do
puts params[:payload]
end
## END OF FILE #################################################################