#!/usr/bin/env ruby # frozen_string_literal: true require 'pwn' require 'optparse' opts = {} OptionParser.new do |options| options.banner = "USAGE: #{$PROGRAM_NAME} [opts] " options.on('-sIP', '--jenkins_ip=IP', '') { |s| opts[:jenkins_ip] = s } options.on('-dPORT', '--dest-port=PORT', '') do |port| opts[:port] = port end options.on('-UUSER', '--username=USER', '') do |user| opts[:username] = user end options.on('-PPASS', '--password=PASS', '') do |pass| opts[:password] = pass end options.on('-pPLUGIN', '--plugin-name=PLUGIN', '') do |plugin_name| opts[:plugin_name] = plugin_name end options.on('-L', '--[no-]list-updates', '') do |list_updates_bool| opts[:list_updates_bool] = list_updates_bool end options.on('-R', '--[no-]restart-jenkins', '') do |restart_bool| opts[:restart_jenkins] = restart_bool end end.parse! if opts.empty? puts `#{$PROGRAM_NAME} --help` exit 1 end jenkins_ip = opts[:jenkins_ip].to_s.scrub port = opts[:port].to_i username = opts[:username] password = opts[:password] plugin_name = opts[:plugin_name] list_updates_bool = if opts[:list_updates_bool] true else false end restart_jenkins = opts[:restart_jenkins].nil? if port.positive? jenkins_obj = PWN::Plugins::Jenkins.connect( jenkins_ip: jenkins_ip, port: port, username: username, password: password ) else jenkins_obj = PWN::Plugins::Jenkins.connect( jenkins_ip: jenkins_ip, username: username, password: password ) end if list_updates_bool puts jenkins_obj.plugin.list_updates else if plugin_name.nil? jenkins_obj.plugin.list_updates.each_key do |current_plugin_name| jenkins_obj.plugin.update(current_plugin_name) end else jenkins_obj.plugin.update(plugin_name) end jenkins_obj.system.restart if restart_jenkins end PWN::Plugins::Jenkins.disconnect(jenkins_obj: jenkins_obj)