require 'thor' require 'jenkins_workflow/setup' require 'jenkins_workflow/build' require 'jenkins_workflow/publisher' module JenkinsWorkflow class Nodes < Thor class_option :server, aliases: ['-s'], desc: 'Jenkins Server URL' desc 'list', 'Return all Jenkins slaves in the system' def list slaves = setup.list_slaves puts slaves.sort end desc 'addbuild ', 'Add omnibus build node' def addbuild(host, os) setup.add_omnibus_build(host, os) end desc 'addtest ', 'Add package test node' def addtest(host, os) setup.add_test(host, os) end private def setup Setup.new(url: options['server']) end end class Plugins < Thor class_option :server, aliases: ['-s'], desc: 'Jenkins Server URL' desc 'list', 'List plugins on server' def list plugins = setup.list_plugins plugins.keys.sort.each do |name| puts "#{name} (#{plugins[name]})" end end desc 'available', 'List available plugins' def available plugins = setup.list_available_plugins plugins.keys.sort.each do |name| puts "#{name} (#{plugins[name]})" end end desc 'init', 'Initialize required plugins' def init setup.setup_plugins end private def setup Setup.new(url: options['server']) end end class Jobs < Thor class_option :server, aliases: ['-s'], desc: 'Jenkins Server URL' desc 'create JOB_NAME DEPOT_PATH CREDENTIAL BRANCH MAILTO TEST_UBUNTU12 TEST_UBUNTU14 TEST_CENTOS6', 'Create new workflow job for HWS' def create(job_name, depot_path, credential, branch, mailto, test_ubuntu12, test_ubuntu14, test_centos6) build.create(job_name: job_name, depot_path: depot_path, credential: credential, branch: branch, mailto: mailto, test_ubuntu12: test_ubuntu12, test_ubuntu14: test_ubuntu14, test_centos6: test_centos6) end private def build Build.new(url: options['server']) end end class Publish < Thor class_option :server, aliases: ['-s'], desc: 'Jenkins Server URL' desc 'job JOB_URL WORKSPACE', 'Publish Jenkins job results' def job(job_url, workspace) publisher.archive_results(job_url, workspace) end private def publisher Publisher.new(url: options['server']) end end # The primary class mostly refers to subcommands, and a couple of generic # options. class CLI < Thor desc 'nodes SUBCOMMAND', 'manage Jenkins nodes in the cluster' subcommand 'nodes', Nodes desc 'plugins SUBCOMMAND', 'Manage Jenkins plugins on the master' subcommand 'plugins', Plugins desc 'jobs SUBCOMMAND', 'Manage Jenkins jobs on the master' subcommand 'jobs', Jobs desc 'publish SUBCOMMAND', 'Publish Jenkins jobs to a local workspace' subcommand 'publish', Publish end end