Created
December 5, 2017 15:27
-
-
Save RobertDober/61051b0417f8962344ffb70fd9d24db3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'awesome_print' | |
require 'faraday' | |
module Main extend self | |
def run jenkins_name=nil, first=nil, last=first | |
return usage unless last | |
(first..last).each{ |build| get_console_output_for_build jenkins_name, build } | |
end | |
private | |
# Worker Bees | |
# ----------- | |
def get_console_output_for_build jenkins_name, build | |
response = connection.get("job/#{jenkins_name}/#{build}/consoleText") | |
if response.status == 200 | |
puts "#{"get ok".green} Saving console text of #{jenkins_name} build #{build} to #{tmp_dir}/#{file_name(jenkins_name, build)}" | |
save_to_file response, jenkins_name, build | |
else | |
$stderr.puts "#{"get error".red} Could not fetch resource from #{"job/#{jenkins_name}/#{build}/consoleText".red}" | |
end | |
end | |
def save_to_file response, jenkins_name, build | |
File.open(File.join(tmp_dir, file_name(jenkins_name, build)), "w") do |file| | |
file.write(response.body) | |
end | |
end | |
def usage | |
$stderr.puts <<-EOS | |
usage: | |
#{$0.blue} #{"jenkins_name".green} #{"first_build_id".green} [#{"last_build_id".green} ] | |
#{"last_build_id".green} defaults to #{"first_build_id".green} | |
Searches the console output of all builds from #{"first_build".green} .. #{"last_build".green} and saves them into | |
files in your $TMP dir. | |
EOS | |
end | |
# Constants | |
# --------- | |
def url | |
"https://ci.af83.io/" | |
end | |
# Lazy Values | |
# ----------- | |
def api_token | |
@__api_token__ ||= ENV.fetch('JENKINS_API_TOKEN') do | |
$stderr.puts "ConfigurtionError".red, "Need to define the env var #{"JENKINS_API_TOKEN".red}" | |
raise KeyError, 'JENKINS_API_TOKEN' | |
end | |
end | |
def connection | |
@__connection__ ||= Faraday.new(url: url).tap do |conn| | |
conn.basic_auth(userid, api_token) | |
end | |
end | |
def file_name jenkins_name, build # !!! idempotent for **all** parameter combinations | |
@__file_name__ ||= "console-text_#{jenkins_name}_#{build}" | |
end | |
def tmp_dir | |
@__tmp_dir__ ||= ENV.fetch('TMP').tap do |dir| | |
raise RuntimeError, "$TMP = #{dir} but is no directory" unless File.directory? dir | |
end | |
end | |
def userid | |
@__userid__ ||= ENV.fetch('JENKINS_USERID', 'robert.dober') | |
end | |
end | |
Main.run(* ARGV.dup ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment