class Chef::Handler::Jenkins_Notifier
noinspection RubyStringKeysInHashInspection
Public Class Methods
new(config)
click to toggle source
# File lib/chef/handler/jenkins_notifier.rb, line 11 def initialize(config) @config = config raise ArgumentError, 'Jenkins Host is not specified' unless @config[:host] raise ArgumentError, 'Jenkins Port is not specified' unless @config[:port] raise ArgumentError, 'Jenkins Job Path is not specified' unless @config[:path] end
Public Instance Methods
report()
click to toggle source
# File lib/chef/handler/jenkins_notifier.rb, line 18 def report log = [] if not run_status.success? result = 1 log << "\n" log << "Chef run failed on #{run_status.node.name}" if !run_status.exception.nil? log << run_status.formatted_exception.encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'}) end log << "\n" log = log.join("\n") submit_jenkins run_status,log,result else result = 0 log << "\n" log << "Chef run Success on #{run_status.node.name}" log << "environment: " + run_status.node.environment log << "start_time: " + run_status.start_time.rfc2822 log << "end_time: " + run_status.end_time.rfc2822 log << "elapsed_time: " + run_status.elapsed_time.to_s + "s" log << "\n" log = log.join("\n") submit_jenkins run_status,log,result end end
submit_jenkins(run_status, log, result)
click to toggle source
# File lib/chef/handler/jenkins_notifier.rb, line 44 def submit_jenkins(run_status, log, result) # binlog = log.unpack("H*").first ms = (run_status.elapsed_time * 1000).round data = "<run><log encoding='hexBinary'>#{binlog}</log><result>#{result}</result><duration>#{ms}</duration></run>" # http = Net::HTTP.new(@config[:host], @config[:port]) if @config[:ssl] http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end req = Net::HTTP::Post.new(@config[:path]) if @config[:user] && @config[:pass] req.basic_auth @config[:user], @config[:pass] end req.set_body_internal(data) res = http.request(req) end