jenkins_api_client 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +6 -0
- data/README.md +3 -1
- data/jenkins_api_client.gemspec +13 -8
- data/lib/jenkins_api_client/build_queue.rb +1 -0
- data/lib/jenkins_api_client/cli/base.rb +2 -0
- data/lib/jenkins_api_client/client.rb +40 -13
- data/lib/jenkins_api_client/exceptions.rb +27 -3
- data/lib/jenkins_api_client/job.rb +2 -6
- data/lib/jenkins_api_client/node.rb +17 -16
- data/lib/jenkins_api_client/system.rb +4 -2
- data/lib/jenkins_api_client/version.rb +1 -1
- data/lib/jenkins_api_client/view.rb +1 -0
- data/spec/unit_tests/client_spec.rb +14 -1
- data/spec/unit_tests/job_spec.rb +1 -5
- metadata +140 -153
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,12 @@ CHANGELOG
|
|
4
4
|
upcoming
|
5
5
|
--------
|
6
6
|
|
7
|
+
v0.11.0 [09-JUN-2013]
|
8
|
+
----------------------
|
9
|
+
* A new input argument `server_url` is supported which accepts the jenkins URL instead of IP address and Port. Credit: @dieterdemeyer
|
10
|
+
* When renaming the job, preserve the job history. Credit: @rubytester
|
11
|
+
* Various exception handling improvements. Credit: @drnic
|
12
|
+
|
7
13
|
v0.10.0 [24-APR-2013]
|
8
14
|
----------------------
|
9
15
|
* new function to execute jenkins CLI `cli_exec`. Credit: @missedone
|
data/README.md
CHANGED
@@ -11,7 +11,9 @@ Client libraries for communicating with a Jenkins CI server and programatically
|
|
11
11
|
|
12
12
|
IRC Channel: ##jenkins-api-client
|
13
13
|
|
14
|
-
Mailing list:
|
14
|
+
Mailing list: jenkins_api_client@googlegroups.com
|
15
|
+
|
16
|
+
Google Group: https://groups.google.com/group/jenkins_api_client
|
15
17
|
|
16
18
|
OVERVIEW:
|
17
19
|
---------
|
data/jenkins_api_client.gemspec
CHANGED
@@ -4,13 +4,16 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = %q{jenkins_api_client}
|
8
|
+
s.version = "0.11.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kannan Manickam"]
|
12
|
-
s.date =
|
13
|
-
s.
|
12
|
+
s.date = %q{2013-06-09}
|
13
|
+
s.default_executable = %q{jenkinscli}
|
14
|
+
s.description = %q{
|
15
|
+
This is a simple and easy-to-use Jenkins Api client with features focused on
|
16
|
+
automating Job configuration programaticaly and so forth}
|
14
17
|
s.email = ["arangamani.kannan@gmail.com"]
|
15
18
|
s.executables = ["jenkinscli"]
|
16
19
|
s.files = [
|
@@ -25,6 +28,7 @@ Gem::Specification.new do |s|
|
|
25
28
|
"bin/jenkinscli",
|
26
29
|
"config/login.yml.example",
|
27
30
|
"java_deps/jenkins-cli.jar",
|
31
|
+
"jenkins_api_client.gemspec",
|
28
32
|
"lib/jenkins_api_client.rb",
|
29
33
|
"lib/jenkins_api_client/build_queue.rb",
|
30
34
|
"lib/jenkins_api_client/cli/base.rb",
|
@@ -56,15 +60,16 @@ Gem::Specification.new do |s|
|
|
56
60
|
"spec/unit_tests/system_spec.rb",
|
57
61
|
"spec/unit_tests/view_spec.rb"
|
58
62
|
]
|
59
|
-
s.homepage =
|
63
|
+
s.homepage = %q{https://github.com/arangamani/jenkins_api_client}
|
60
64
|
s.require_paths = ["lib"]
|
61
|
-
s.rubygems_version =
|
62
|
-
s.summary =
|
65
|
+
s.rubygems_version = %q{1.3.6}
|
66
|
+
s.summary = %q{Jenkins JSON API Client}
|
63
67
|
|
64
68
|
if s.respond_to? :specification_version then
|
69
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
65
70
|
s.specification_version = 3
|
66
71
|
|
67
|
-
if Gem::Version.new(Gem::
|
72
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
68
73
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
69
74
|
s.add_runtime_dependency(%q<thor>, [">= 0.16.0"])
|
70
75
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
@@ -28,9 +28,11 @@ require "#{File.dirname(__FILE__)}/system.rb"
|
|
28
28
|
|
29
29
|
module JenkinsApi
|
30
30
|
# This is the base module for all command line interface for Jenkins API.
|
31
|
+
#
|
31
32
|
module CLI
|
32
33
|
# This is the base class for the command line interface which adds other
|
33
34
|
# classes as subcommands to the CLI.
|
35
|
+
#
|
34
36
|
class Base < Thor
|
35
37
|
|
36
38
|
class_option :username, :aliases => "-u", :desc => "Name of Jenkins user"
|
@@ -29,10 +29,12 @@ require "mixlib/shellout"
|
|
29
29
|
|
30
30
|
# The main module that contains the Client class and all subclasses that
|
31
31
|
# communicate with the Jenkins's Remote Access API.
|
32
|
+
#
|
32
33
|
module JenkinsApi
|
33
34
|
# This is the client class that acts as the bridge between the subclasses and
|
34
35
|
# Jnekins. This class contains methods that performs GET and POST requests
|
35
36
|
# for various operations.
|
37
|
+
#
|
36
38
|
class Client
|
37
39
|
attr_accessor :debug, :timeout
|
38
40
|
# Default port to be used to connect to Jenkins
|
@@ -41,6 +43,7 @@ module JenkinsApi
|
|
41
43
|
DEFAULT_TIMEOUT = 120
|
42
44
|
# Parameters that are permitted as options while initializing the client
|
43
45
|
VALID_PARAMS = [
|
46
|
+
"server_url",
|
44
47
|
"server_ip",
|
45
48
|
"server_port",
|
46
49
|
"proxy_ip",
|
@@ -59,8 +62,12 @@ module JenkinsApi
|
|
59
62
|
# @param [Hash] args
|
60
63
|
# * the +:server_ip+ param is the IP address of the Jenkins CI server
|
61
64
|
# * the +:server_port+ param is the port on which the Jenkins listens
|
65
|
+
# * the +:server_url+ param is the full URL address of the Jenkins CI server (http/https)
|
62
66
|
# * the +:username+ param is the username used for connecting to the server
|
63
67
|
# * the +:password+ param is the password for connecting to the CI server
|
68
|
+
# * the +:proxy_ip+ param is the proxy IP address
|
69
|
+
# * the +:proxy_port+ param is the proxy port
|
70
|
+
# * the +:jenkins_path+ param is the optional context path for Jenkins
|
64
71
|
# * the +:ssl+ param indicates if Jenkins is accessible over HTTPS
|
65
72
|
# (defaults to false)
|
66
73
|
#
|
@@ -74,8 +81,8 @@ module JenkinsApi
|
|
74
81
|
instance_variable_set("@#{key}", value)
|
75
82
|
end
|
76
83
|
end if args.is_a? Hash
|
77
|
-
unless @server_ip
|
78
|
-
raise ArgumentError, "Server IP is required to connect to Jenkins"
|
84
|
+
unless @server_ip || @server_url
|
85
|
+
raise ArgumentError, "Server IP or Server URL is required to connect to Jenkins"
|
79
86
|
end
|
80
87
|
unless @username && (@password || @password_base64)
|
81
88
|
raise ArgumentError, "Credentials are required to connect to Jenkins"
|
@@ -84,9 +91,11 @@ module JenkinsApi
|
|
84
91
|
raise ArgumentError, "Proxy IP and port must both be specified or" +
|
85
92
|
" both left nil"
|
86
93
|
end
|
94
|
+
@server_uri = URI.parse(@server_url) if @server_url
|
87
95
|
@server_port = DEFAULT_SERVER_PORT unless @server_port
|
88
96
|
@timeout = DEFAULT_TIMEOUT unless @timeout
|
89
97
|
@ssl ||= false
|
98
|
+
@ssl = @server_uri.scheme == "https" if @server_uri
|
90
99
|
@debug = false unless @debug
|
91
100
|
|
92
101
|
# Base64 decode inserts a newline character at the end. As a workaround
|
@@ -155,11 +164,19 @@ module JenkinsApi
|
|
155
164
|
# @param [Net::HTTPRequest] request The request object to send
|
156
165
|
#
|
157
166
|
# @return [Net::HTTPResponse] Response from Jenkins
|
167
|
+
#
|
158
168
|
def make_http_request( request )
|
159
|
-
|
160
|
-
|
161
|
-
|
169
|
+
if @server_url
|
170
|
+
http = Net::HTTP.new(@server_uri.host, @server_uri.port)
|
171
|
+
http.use_ssl = true if @ssl
|
172
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @ssl
|
162
173
|
return http.request(request)
|
174
|
+
else
|
175
|
+
Net::HTTP.start(
|
176
|
+
@server_ip, @server_port, @proxy_ip, @proxy_port, :use_ssl => @ssl
|
177
|
+
) do |http|
|
178
|
+
return http.request(request)
|
179
|
+
end
|
163
180
|
end
|
164
181
|
end
|
165
182
|
protected :make_http_request
|
@@ -323,24 +340,25 @@ module JenkinsApi
|
|
323
340
|
#
|
324
341
|
# @param [Net::HTTP::Response] response Response from Jenkins
|
325
342
|
# @param [String] to_send What should be returned as a response. Allowed
|
326
|
-
#
|
343
|
+
# values: "code" and "body".
|
327
344
|
# @param [Boolean] send_json Boolean value used to determine whether to
|
328
|
-
#
|
345
|
+
# load the JSON or send the response as is.
|
329
346
|
#
|
330
347
|
# @return [String, JSON] Response returned whether loaded JSON or raw
|
331
|
-
#
|
348
|
+
# string
|
332
349
|
#
|
333
350
|
# @raise [Exceptions::UnauthorizedException] When invalid credentials are
|
334
|
-
#
|
351
|
+
# provided to connect to Jenkins
|
335
352
|
# @raise [Exceptions::NotFoundException] When the requested page on Jenkins
|
336
|
-
#
|
353
|
+
# is found
|
337
354
|
# @raise [Exceptions::InternelServerErrorException] When Jenkins returns a
|
338
|
-
#
|
355
|
+
# 500 Internel Server Error
|
339
356
|
# @raise [Exceptions::ApiException] Any other exception returned from
|
340
|
-
#
|
357
|
+
# Jenkins that are not categorized in the API Client.
|
341
358
|
#
|
342
359
|
def handle_exception(response, to_send = "code", send_json = false)
|
343
360
|
msg = "HTTP Code: #{response.code}, Response Body: #{response.body}"
|
361
|
+
puts msg if @debug
|
344
362
|
case response.code.to_i
|
345
363
|
when 200, 302
|
346
364
|
if to_send == "body" && send_json
|
@@ -350,6 +368,15 @@ module JenkinsApi
|
|
350
368
|
elsif to_send == "code"
|
351
369
|
return response.code
|
352
370
|
end
|
371
|
+
when 400
|
372
|
+
case response.body
|
373
|
+
when /A job already exists with the name/
|
374
|
+
raise Exceptions::JobAlreadyExistsWithName.new
|
375
|
+
when /Nothing is submitted/
|
376
|
+
raise Exceptions::NothingSubmitted.new
|
377
|
+
else
|
378
|
+
raise Exceptions::ApiException.new("Error code 400")
|
379
|
+
end
|
353
380
|
when 401
|
354
381
|
raise Exceptions::UnautherizedException.new
|
355
382
|
when 404
|
@@ -357,7 +384,7 @@ module JenkinsApi
|
|
357
384
|
when 500
|
358
385
|
raise Exceptions::InternelServerErrorException.new
|
359
386
|
else
|
360
|
-
raise Exceptions::ApiException.new
|
387
|
+
raise Exceptions::ApiException.new("Error code #{response.code}")
|
361
388
|
end
|
362
389
|
end
|
363
390
|
|
@@ -22,17 +22,38 @@
|
|
22
22
|
|
23
23
|
module JenkinsApi
|
24
24
|
# This module contains classes that define exceptions for various catories.
|
25
|
+
#
|
25
26
|
module Exceptions
|
26
27
|
# This is the base class for Exceptions that is inherited from
|
27
28
|
# RuntimeError.
|
29
|
+
#
|
28
30
|
class ApiException < RuntimeError
|
29
31
|
def initialize(message = "")
|
30
32
|
super("Error: #{message}")
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
36
|
+
# This exception class handles cases where parameters are expected
|
37
|
+
# but not provided.
|
38
|
+
#
|
39
|
+
class NothingSubmitted < ApiException
|
40
|
+
def initialize(message = "")
|
41
|
+
super("Nothing is submitted. #{message}")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# This exception class handles cases where a job not able to be created
|
46
|
+
# because it already exists.
|
47
|
+
#
|
48
|
+
class JobAlreadyExistsWithName < ApiException
|
49
|
+
def initialize(message = "")
|
50
|
+
super("Job already exists with that name. #{message}")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
34
54
|
# This exception class handles cases where invalid credentials are provided
|
35
|
-
# to connect to the Jenkins
|
55
|
+
# to connect to the Jenkins.
|
56
|
+
#
|
36
57
|
class UnautherizedException < ApiException
|
37
58
|
def initialize(message = "")
|
38
59
|
super("Invalid credentials are provided. #{message}")
|
@@ -40,7 +61,8 @@ module JenkinsApi
|
|
40
61
|
end
|
41
62
|
|
42
63
|
# This exception class handles cases where a requested page is not found on
|
43
|
-
# the Jenkins API
|
64
|
+
# the Jenkins API.
|
65
|
+
#
|
44
66
|
class NotFoundException < ApiException
|
45
67
|
def initialize(message = "")
|
46
68
|
super("Requested component is not found on the Jenkins CI server." +
|
@@ -49,7 +71,8 @@ module JenkinsApi
|
|
49
71
|
end
|
50
72
|
|
51
73
|
# This exception class handles cases where the Jenkins API returns with a
|
52
|
-
# 500 Internel Server Error
|
74
|
+
# 500 Internel Server Error.
|
75
|
+
#
|
53
76
|
class InternelServerErrorException < ApiException
|
54
77
|
def initialize(message = "")
|
55
78
|
super("Internel Server Error. Perhaps the in-memory configuration of" +
|
@@ -60,6 +83,7 @@ module JenkinsApi
|
|
60
83
|
end
|
61
84
|
|
62
85
|
# Exception occurred while running java CLI commands
|
86
|
+
#
|
63
87
|
class CLIException < ApiException
|
64
88
|
def initialize(message = "")
|
65
89
|
super("Execute CLI Error. #{message}")
|
@@ -24,6 +24,7 @@ module JenkinsApi
|
|
24
24
|
class Client
|
25
25
|
# This class communicates with the Jenkins "/job" API to obtain details
|
26
26
|
# about jobs, creating, deleting, building, and various other operations.
|
27
|
+
#
|
27
28
|
class Job
|
28
29
|
|
29
30
|
# Initialize the Job object and store the reference to Client object
|
@@ -274,12 +275,7 @@ module JenkinsApi
|
|
274
275
|
# @param [String] new_job Name of the new job.
|
275
276
|
#
|
276
277
|
def rename(old_job, new_job)
|
277
|
-
|
278
|
-
xml = get_config(old_job)
|
279
|
-
# Create the new job with the configuration obtained
|
280
|
-
create(new_job, xml)
|
281
|
-
# Delete the old job
|
282
|
-
delete(old_job)
|
278
|
+
@client.api_post_request("/job/#{old_job}/doRename?newName=#{new_job}")
|
283
279
|
end
|
284
280
|
|
285
281
|
# Delete a job given the name
|
@@ -24,6 +24,7 @@ module JenkinsApi
|
|
24
24
|
class Client
|
25
25
|
# This class communicates with Jenkins "/computer" API to obtain details
|
26
26
|
# about nodes or slaves connected to the Jenkins.
|
27
|
+
#
|
27
28
|
class Node
|
28
29
|
|
29
30
|
# General attributes of a node.
|
@@ -31,9 +32,9 @@ module JenkinsApi
|
|
31
32
|
# These methods are defined using define_method and are prefixed
|
32
33
|
# with get_.
|
33
34
|
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
35
|
+
# def get_busyExecutors
|
36
|
+
# def get_displayName
|
37
|
+
# def get_totalExecutors
|
37
38
|
#
|
38
39
|
GENERAL_ATTRIBUTES = [
|
39
40
|
"busyExecutors",
|
@@ -45,12 +46,12 @@ module JenkinsApi
|
|
45
46
|
# The following methods are defined to be called on the node object
|
46
47
|
# and are prefixed with is_ and end with ? as they return true or false.
|
47
48
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
49
|
+
# def is_idle?(node_name)
|
50
|
+
# def is_jnlpAgent?(node_name)
|
51
|
+
# def is_launchSupported?(node_name)
|
52
|
+
# def is_manualLaunchAllowed?(node_name)
|
53
|
+
# def is_offline?(node_name)
|
54
|
+
# def is_temporarilyOffline?(node_name)
|
54
55
|
#
|
55
56
|
NODE_PROPERTIES = [
|
56
57
|
"idle",
|
@@ -65,13 +66,13 @@ module JenkinsApi
|
|
65
66
|
# The following methods are defined using define_method.
|
66
67
|
# These methods are prefixed with get_node_.
|
67
68
|
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
69
|
+
# def get_node_numExecutors(node_name)
|
70
|
+
# def get_node_icon(node_name)
|
71
|
+
# def get_node_displayName(node_name)
|
72
|
+
# def get_node_loadStatistics(node_name)
|
73
|
+
# def get_node_monitorData(node_name)
|
74
|
+
# def get_node_offlineCause(node_name)
|
75
|
+
# def get_node_oneOffExecutors(node_name)
|
75
76
|
#
|
76
77
|
NODE_ATTRIBUTES = [
|
77
78
|
"numExecutors",
|
@@ -26,6 +26,7 @@ module JenkinsApi
|
|
26
26
|
class Client
|
27
27
|
# This class is used to communicate with Jenkins and performing some admin
|
28
28
|
# level operations such as restarting and reloading Jenkins.
|
29
|
+
#
|
29
30
|
class System
|
30
31
|
|
31
32
|
# Initializes a new System object.
|
@@ -81,11 +82,12 @@ module JenkinsApi
|
|
81
82
|
while true do
|
82
83
|
response = @client.get_root
|
83
84
|
puts "[INFO] Waiting for jenkins to restart..." if @client.debug
|
84
|
-
if (response.body =~ /Please wait while Jenkins is restarting/ ||
|
85
|
+
if (response.body =~ /Please wait while Jenkins is restarting/ ||
|
86
|
+
response.body =~ /Please wait while Jenkins is getting ready to work/)
|
85
87
|
sleep 30
|
86
88
|
redo
|
87
89
|
else
|
88
|
-
|
90
|
+
return true
|
89
91
|
end
|
90
92
|
end
|
91
93
|
end
|
@@ -25,6 +25,18 @@ describe JenkinsApi::Client do
|
|
25
25
|
).not_to raise_error
|
26
26
|
end
|
27
27
|
|
28
|
+
it "initializes with server_url without exception" do
|
29
|
+
expect(
|
30
|
+
lambda do
|
31
|
+
JenkinsApi::Client.new(
|
32
|
+
:server_url => 'http://localhost',
|
33
|
+
:username => 'username',
|
34
|
+
:password => 'password'
|
35
|
+
)
|
36
|
+
end
|
37
|
+
).not_to raise_error
|
38
|
+
end
|
39
|
+
|
28
40
|
it "initializes with proxy args without exception" do
|
29
41
|
expect(
|
30
42
|
lambda do
|
@@ -215,11 +227,12 @@ describe JenkinsApi::Client do
|
|
215
227
|
|
216
228
|
context "With some required parameters missing" do
|
217
229
|
context "#initialize" do
|
218
|
-
it "Should fail if server_ip
|
230
|
+
it "Should fail if server_ip and server_url are missing" do
|
219
231
|
expect(
|
220
232
|
lambda do
|
221
233
|
JenkinsApi::Client.new({
|
222
234
|
:bogus => '127.0.0.1',
|
235
|
+
:bogus_url => 'http://localhost',
|
223
236
|
:server_port => 8080,
|
224
237
|
:username => 'username',
|
225
238
|
:password => 'password'
|
data/spec/unit_tests/job_spec.rb
CHANGED
@@ -168,12 +168,8 @@ describe JenkinsApi::Client::Job do
|
|
168
168
|
|
169
169
|
describe "#rename" do
|
170
170
|
it "accepts the old and new job names and renames the job" do
|
171
|
-
@client.should_receive(:get_config).with("/job/old_job")
|
172
171
|
@client.should_receive(:api_post_request).with(
|
173
|
-
"/job/old_job/
|
174
|
-
)
|
175
|
-
@client.should_receive(:post_config).with(
|
176
|
-
"/createItem?name=new_job", nil
|
172
|
+
"/job/old_job/doRename?newName=new_job"
|
177
173
|
)
|
178
174
|
@job.rename("old_job", "new_job")
|
179
175
|
end
|
metadata
CHANGED
@@ -1,172 +1,152 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenkins_api_client
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 11
|
8
|
+
- 0
|
9
|
+
version: 0.11.0
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- Kannan Manickam
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
16
|
+
|
17
|
+
date: 2013-06-09 00:00:00 -07:00
|
18
|
+
default_executable: jenkinscli
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
22
21
|
type: :runtime
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
segments:
|
27
|
+
- 0
|
28
|
+
version: "0"
|
29
|
+
name: nokogiri
|
30
|
+
requirement: *id001
|
23
31
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: thor
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 0.16.0
|
32
|
+
- !ruby/object:Gem::Dependency
|
38
33
|
type: :runtime
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
segments:
|
39
|
+
- 0
|
40
|
+
- 16
|
41
|
+
- 0
|
45
42
|
version: 0.16.0
|
46
|
-
|
47
|
-
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :runtime
|
43
|
+
name: thor
|
44
|
+
requirement: *id002
|
55
45
|
prerelease: false
|
56
|
-
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: terminal-table
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.4.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
70
47
|
type: :runtime
|
48
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
name: json
|
56
|
+
requirement: *id003
|
71
57
|
prerelease: false
|
72
|
-
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.4.0
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: mixlib-shellout
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 1.1.0
|
58
|
+
- !ruby/object:Gem::Dependency
|
86
59
|
type: :runtime
|
60
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 1
|
66
|
+
- 4
|
67
|
+
- 0
|
68
|
+
version: 1.4.0
|
69
|
+
name: terminal-table
|
70
|
+
requirement: *id004
|
87
71
|
prerelease: false
|
88
|
-
|
89
|
-
|
90
|
-
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
type: :runtime
|
74
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
91
76
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 1
|
81
|
+
- 0
|
93
82
|
version: 1.1.0
|
94
|
-
-
|
95
|
-
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '1.0'
|
102
|
-
type: :development
|
83
|
+
name: mixlib-shellout
|
84
|
+
requirement: *id005
|
103
85
|
prerelease: false
|
104
|
-
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '1.0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: jeweler
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 1.6.4
|
86
|
+
- !ruby/object:Gem::Dependency
|
118
87
|
type: :development
|
88
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
segments:
|
93
|
+
- 1
|
94
|
+
- 0
|
95
|
+
version: "1.0"
|
96
|
+
name: bundler
|
97
|
+
requirement: *id006
|
119
98
|
prerelease: false
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
type: :development
|
101
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 1
|
107
|
+
- 6
|
108
|
+
- 4
|
125
109
|
version: 1.6.4
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
requirements:
|
131
|
-
- - ! '>='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
110
|
+
name: jeweler
|
111
|
+
requirement: *id007
|
112
|
+
prerelease: false
|
113
|
+
- !ruby/object:Gem::Dependency
|
134
114
|
type: :development
|
115
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
name: simplecov
|
123
|
+
requirement: *id008
|
135
124
|
prerelease: false
|
136
|
-
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: rspec
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ! '>='
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
150
126
|
type: :development
|
127
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
name: rspec
|
135
|
+
requirement: *id009
|
151
136
|
prerelease: false
|
152
|
-
|
153
|
-
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
158
|
-
description: ! '
|
159
|
-
|
137
|
+
description: |-
|
138
|
+
|
160
139
|
This is a simple and easy-to-use Jenkins Api client with features focused on
|
161
|
-
|
162
|
-
|
163
|
-
email:
|
140
|
+
automating Job configuration programaticaly and so forth
|
141
|
+
email:
|
164
142
|
- arangamani.kannan@gmail.com
|
165
|
-
executables:
|
143
|
+
executables:
|
166
144
|
- jenkinscli
|
167
145
|
extensions: []
|
146
|
+
|
168
147
|
extra_rdoc_files: []
|
169
|
-
|
148
|
+
|
149
|
+
files:
|
170
150
|
- .gitignore
|
171
151
|
- .jenkins.yml
|
172
152
|
- .travis.yml
|
@@ -209,28 +189,35 @@ files:
|
|
209
189
|
- spec/unit_tests/spec_helper.rb
|
210
190
|
- spec/unit_tests/system_spec.rb
|
211
191
|
- spec/unit_tests/view_spec.rb
|
192
|
+
has_rdoc: true
|
212
193
|
homepage: https://github.com/arangamani/jenkins_api_client
|
213
194
|
licenses: []
|
195
|
+
|
214
196
|
post_install_message:
|
215
197
|
rdoc_options: []
|
216
|
-
|
198
|
+
|
199
|
+
require_paths:
|
217
200
|
- lib
|
218
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
requirements:
|
227
|
-
- -
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
|
201
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
segments:
|
206
|
+
- 0
|
207
|
+
version: "0"
|
208
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
segments:
|
213
|
+
- 0
|
214
|
+
version: "0"
|
230
215
|
requirements: []
|
216
|
+
|
231
217
|
rubyforge_project:
|
232
|
-
rubygems_version: 1.
|
218
|
+
rubygems_version: 1.3.6
|
233
219
|
signing_key:
|
234
220
|
specification_version: 3
|
235
221
|
summary: Jenkins JSON API Client
|
236
222
|
test_files: []
|
223
|
+
|