jenkins_api_client 0.11.0 → 0.12.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/.travis.yml CHANGED
@@ -2,22 +2,25 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  - 1.9.3
5
- - 1.9.2
6
5
  - jruby-18mode
7
6
  - jruby-19mode
8
7
  - rbx-18mode
9
8
  - rbx-19mode
10
- - ruby-head
11
- - jruby-head
12
9
  - 1.8.7
13
10
  - ree
14
11
  matrix:
15
12
  allow_failures:
16
13
  - rvm: jruby-18mode
17
14
  - rvm: jruby-19mode
18
- - rvm: jruby-head
15
+ - rvm: rbx-18mode
16
+ - rvm: rbx-19mode
19
17
  - rvm: ree
20
- script: bundle exec rake unit_tests
18
+ before_install:
19
+ - travis/setup.sh
20
+
21
+ script:
22
+ - bundle exec rake unit_tests
23
+ - bundle exec rake func_tests
21
24
  notifications:
22
25
  email: false
23
26
  irc:
data/CHANGELOG.md CHANGED
@@ -4,9 +4,29 @@ CHANGELOG
4
4
  upcoming
5
5
  --------
6
6
 
7
+ v0.12.0 [18-JUN-2013]
8
+ ----------------------
9
+ * Authentication is now optional as not all Jenkins instances have
10
+ authentication enabled by default. Credit: @dougforpres
11
+ * Ability to retrieve build details so that more than just (`lamp color`) is
12
+ available. Credit: @dougforpres
13
+ * Ability to retrieve build test-results for those builds that have them.
14
+ Credit: @dougforpres
15
+ * Option to follow any 301/302 responses. This allows POST to build to follow
16
+ the redirect and end up with a 200 response. Credit: @dougforpres
17
+ * Minor change to the POST requests handling where jenkins instances with a
18
+ proxy returns 411 if no form data is specified. Fixed by sending an empty
19
+ hash. Credit: @dougforpres
20
+ * As of Jenkins release 1.519, the job build returns a 201 code instead of 302.
21
+ This was resulting in an exception and the exception handling is modified to
22
+ handle this condition.
23
+ * The jobs that are not built yet have a new color (`notbuilt`) in the recent
24
+ version of jenkins (> 1.517) whih resulted in `invalid` status. This is fixed.
25
+
7
26
  v0.11.0 [09-JUN-2013]
8
27
  ----------------------
9
- * A new input argument `server_url` is supported which accepts the jenkins URL instead of IP address and Port. Credit: @dieterdemeyer
28
+ * A new input argument `server_url` is supported which accepts the jenkins URL
29
+ instead of IP address and Port. Credit: @dieterdemeyer
10
30
  * When renaming the job, preserve the job history. Credit: @rubytester
11
31
  * Various exception handling improvements. Credit: @drnic
12
32
 
@@ -20,17 +40,21 @@ v0.10.0 [24-APR-2013]
20
40
 
21
41
  v0.9.1 [01-APR-2013]
22
42
  ---------------------
23
- * Removed the dependency of ActiveSupport and Builder as they were not being used.
43
+ * Removed the dependency of ActiveSupport and Builder as they were not being
44
+ used.
24
45
 
25
46
  v0.9.0 [10-MAR-2013]
26
47
  ---------------------
27
48
  * Added capability to send email notification to existing jobs
28
49
  * Removed warnings from client.rb
29
50
  * Refactored and improved exception handling
30
- * A bug is fixed in client which allows only the valid params as options. Credit: @Niarfe
31
- * Added a timeout parameter for waiting for jenkins to become ready. Credit: @Niarfe
51
+ * A bug is fixed in client which allows only the valid params as options.
52
+ Credit: @Niarfe
53
+ * Added a timeout parameter for waiting for jenkins to become ready.
54
+ Credit: @Niarfe
32
55
  * Added function to reload jenkins. Credit: @missedone
33
- * Fixed a bug where jenkins_path was missing in get_config and post_config. Credit: @cylol
56
+ * Fixed a bug where jenkins_path was missing in get_config and post_config.
57
+ Credit: @cylol
34
58
  * Added capability to obtain jenkins version and other useful information
35
59
  * Added new tests for various cases, and other code improvements
36
60
 
@@ -42,7 +66,8 @@ v0.8.0 [14-FEB-2013]
42
66
  ---------------------
43
67
  * Added capability to send timer trigger while creating a job
44
68
  * Added rename feature for jobs
45
- * Added support for sending skype notification in job creation and on existing jobs
69
+ * Added support for sending skype notification in job creation and on existing
70
+ jobs
46
71
  * Added support for sending Jenkins root URL configuration. Credit: @kevinhcross
47
72
  * Added `delete_all!` methods for Job, View, and Node.
48
73
  * `get_eta` in BuildQueue will return "N/A" if the ETA is not given by Jenkins
@@ -52,7 +77,8 @@ v0.8.0 [14-FEB-2013]
52
77
 
53
78
  v0.7.3 [05-FEB-2013]
54
79
  ---------------------
55
- * Fixed #27 with a bug in create_view including extra character in the end of the name
80
+ * Fixed #27 with a bug in create_view including extra character in the end of
81
+ the name
56
82
 
57
83
  v0.7.2 [02-FEB-2013]
58
84
  ---------------------
@@ -76,24 +102,29 @@ v0.7.0 [27-JAN-2013]
76
102
 
77
103
  v0.6.2 [13-JAN-2013]
78
104
  ---------------------
79
- * Fixed a bug where running job previously aborted was not recognized by the color
105
+ * Fixed a bug where running job previously aborted was not recognized by the
106
+ color
80
107
 
81
108
  v0.6.1 [13-JAN-2013]
82
109
  ---------------------
83
- * Fixed a bug where the last few lines of console output was missed in the CLI when using the `jenkinscli job console` command.
110
+ * Fixed a bug where the last few lines of console output was missed in the CLI
111
+ when using the `jenkinscli job console` command.
84
112
 
85
113
  v0.6.0 [12-JAN-2013]
86
114
  ---------------------
87
115
  * Added functionality to get progressive console output from Jenkins.
88
- * Added CLI command `console` for printing progressive console output on terminal.
89
- * Fixed a bug with `get_current_build_number` not returning the recent running build number.
116
+ * Added CLI command `console` for printing progressive console output on
117
+ terminal.
118
+ * Fixed a bug with `get_current_build_number` not returning the recent running
119
+ build number.
90
120
 
91
121
  v0.5.0 [22-DEC-2012]
92
122
  ---------------------
93
123
  * Added functionality to create jobs with params.
94
124
  * Added View class and added methods accessing List Views of Jenkins server.
95
125
  * Added functionality to abort a running job.
96
- * Deprecated `list_running` of Job class. `list_by_status('running')` is suggested.
126
+ * Deprecated `list_running` of Job class. `list_by_status('running')` is
127
+ suggested.
97
128
 
98
129
  v0.4.0 [07-DEC-2012]
99
130
  ---------------------
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "nokogiri"
3
+ gem "nokogiri", "~> 1.5.0"
4
4
  gem "thor", ">= 0.16.0"
5
5
  gem "json", ">= 0"
6
6
  gem "terminal-table", ">= 1.4.0"
data/README.md CHANGED
@@ -58,10 +58,13 @@ You will see the that it entered IRB session and you can play with the API clien
58
58
 
59
59
  ### Authentication
60
60
 
61
+ Supplying credentials to the client is optional, as not all Jenkins instances require authentication.
61
62
  This project supports two types of password-based authentication. You can just you the plain
62
63
  password by using <tt>password</tt> parameter. If you don't prefer leaving plain passwords in the
63
64
  credentials file, you can encode your password in base64 format and use <tt>password_base64</tt>
64
65
  parameter to specify the password either in the arguments or in the credentials file.
66
+ To use the client without credentials, just leave out the <tt>username</tt> and <tt>password</tt> parameters. The
67
+ <tt>password</tt> parameter is only required if <tt>username</tt> is specified.
65
68
 
66
69
  ### Basic Usage
67
70
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jenkins_api_client}
8
- s.version = "0.11.0"
8
+ s.version = "0.12.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 = %q{2013-06-09}
12
+ s.date = %q{2013-06-19}
13
13
  s.default_executable = %q{jenkinscli}
14
14
  s.description = %q{
15
15
  This is a simple and easy-to-use Jenkins Api client with features focused on
@@ -58,7 +58,11 @@ automating Job configuration programaticaly and so forth}
58
58
  "spec/unit_tests/node_spec.rb",
59
59
  "spec/unit_tests/spec_helper.rb",
60
60
  "spec/unit_tests/system_spec.rb",
61
- "spec/unit_tests/view_spec.rb"
61
+ "spec/unit_tests/view_spec.rb",
62
+ "travis/jenkins_config.xml",
63
+ "travis/setup.sh",
64
+ "travis/spec.yml",
65
+ "travis/user_config.xml"
62
66
  ]
63
67
  s.homepage = %q{https://github.com/arangamani/jenkins_api_client}
64
68
  s.require_paths = ["lib"]
@@ -70,7 +74,7 @@ automating Job configuration programaticaly and so forth}
70
74
  s.specification_version = 3
71
75
 
72
76
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
73
- s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
77
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.5.0"])
74
78
  s.add_runtime_dependency(%q<thor>, [">= 0.16.0"])
75
79
  s.add_runtime_dependency(%q<json>, [">= 0"])
76
80
  s.add_runtime_dependency(%q<terminal-table>, [">= 1.4.0"])
@@ -80,7 +84,7 @@ automating Job configuration programaticaly and so forth}
80
84
  s.add_development_dependency(%q<simplecov>, [">= 0"])
81
85
  s.add_development_dependency(%q<rspec>, [">= 0"])
82
86
  else
83
- s.add_dependency(%q<nokogiri>, [">= 0"])
87
+ s.add_dependency(%q<nokogiri>, ["~> 1.5.0"])
84
88
  s.add_dependency(%q<thor>, [">= 0.16.0"])
85
89
  s.add_dependency(%q<json>, [">= 0"])
86
90
  s.add_dependency(%q<terminal-table>, [">= 1.4.0"])
@@ -91,7 +95,7 @@ automating Job configuration programaticaly and so forth}
91
95
  s.add_dependency(%q<rspec>, [">= 0"])
92
96
  end
93
97
  else
94
- s.add_dependency(%q<nokogiri>, [">= 0"])
98
+ s.add_dependency(%q<nokogiri>, ["~> 1.5.0"])
95
99
  s.add_dependency(%q<thor>, [">= 0.16.0"])
96
100
  s.add_dependency(%q<json>, [">= 0"])
97
101
  s.add_dependency(%q<terminal-table>, [">= 1.4.0"])
@@ -54,7 +54,8 @@ module JenkinsApi
54
54
  "password_base64",
55
55
  "debug",
56
56
  "timeout",
57
- "ssl"
57
+ "ssl",
58
+ "follow_redirects"
58
59
  ].freeze
59
60
 
60
61
  # Initialize a Client object with Jenkins CI server credentials
@@ -63,13 +64,15 @@ module JenkinsApi
63
64
  # * the +:server_ip+ param is the IP address of the Jenkins CI server
64
65
  # * the +:server_port+ param is the port on which the Jenkins listens
65
66
  # * the +:server_url+ param is the full URL address of the Jenkins CI server (http/https)
66
- # * the +:username+ param is the username used for connecting to the server
67
- # * the +:password+ param is the password for connecting to the CI server
67
+ # * the +:username+ param is the username used for connecting to the server (optional)
68
+ # * the +:password+ param is the password for connecting to the CI server (optional)
68
69
  # * the +:proxy_ip+ param is the proxy IP address
69
70
  # * the +:proxy_port+ param is the proxy port
70
71
  # * the +:jenkins_path+ param is the optional context path for Jenkins
71
72
  # * the +:ssl+ param indicates if Jenkins is accessible over HTTPS
72
73
  # (defaults to false)
74
+ # * the +:follow_redirects+ param will cause the client to follow a redirect
75
+ # (jenkins can return a 30x when starting a build)
73
76
  #
74
77
  # @return [JenkinsApi::Client] a client object to Jenkins API
75
78
  #
@@ -84,8 +87,9 @@ module JenkinsApi
84
87
  unless @server_ip || @server_url
85
88
  raise ArgumentError, "Server IP or Server URL is required to connect to Jenkins"
86
89
  end
87
- unless @username && (@password || @password_base64)
88
- raise ArgumentError, "Credentials are required to connect to Jenkins"
90
+ # Username/password are optional as some jenkins servers do not require auth
91
+ if @username && !(@password || @password_base64)
92
+ raise ArgumentError, "If username is provided, password is required"
89
93
  end
90
94
  if @proxy_ip.nil? ^ @proxy_port.nil?
91
95
  raise ArgumentError, "Proxy IP and port must both be specified or" +
@@ -162,22 +166,38 @@ module JenkinsApi
162
166
  # the response.
163
167
  #
164
168
  # @param [Net::HTTPRequest] request The request object to send
169
+ # @param [Boolean] follow_redirect whether to follow redirects or not
165
170
  #
166
171
  # @return [Net::HTTPResponse] Response from Jenkins
167
172
  #
168
- def make_http_request( request )
173
+ def make_http_request(request, follow_redirect = @follow_redirects)
174
+ request.basic_auth @username, @password if @username
175
+
169
176
  if @server_url
170
177
  http = Net::HTTP.new(@server_uri.host, @server_uri.port)
171
178
  http.use_ssl = true if @ssl
172
179
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @ssl
173
- return http.request(request)
180
+ response = http.request(request)
174
181
  else
175
182
  Net::HTTP.start(
176
183
  @server_ip, @server_port, @proxy_ip, @proxy_port, :use_ssl => @ssl
177
184
  ) do |http|
178
- return http.request(request)
185
+ response = http.request(request)
179
186
  end
180
187
  end
188
+ case response
189
+ when Net::HTTPRedirection then
190
+ # If we got a redirect request, follow it (if flag set), but don't
191
+ # go any deeper (only one redirect supported - don't want to follow
192
+ # our tail)
193
+ if follow_redirect
194
+ redir_uri = URI.parse(response['location'])
195
+ response = make_http_request(
196
+ Net::HTTP::Get.new(redir_uri.path, false)
197
+ )
198
+ end
199
+ end
200
+ return response
181
201
  end
182
202
  protected :make_http_request
183
203
 
@@ -188,7 +208,6 @@ module JenkinsApi
188
208
  #
189
209
  def get_root
190
210
  request = Net::HTTP::Get.new("/")
191
- request.basic_auth @username, @password
192
211
  make_http_request(request)
193
212
  end
194
213
 
@@ -214,7 +233,6 @@ module JenkinsApi
214
233
  to_get = URI.escape(to_get)
215
234
  request = Net::HTTP::Get.new(to_get)
216
235
  puts "[INFO] GET #{to_get}" if @debug
217
- request.basic_auth @username, @password
218
236
  response = make_http_request(request)
219
237
  if raw_response
220
238
  response
@@ -230,13 +248,14 @@ module JenkinsApi
230
248
  #
231
249
  # @return [String] Response code form Jenkins Response
232
250
  #
233
- def api_post_request(url_prefix, form_data = nil)
251
+ def api_post_request(url_prefix, form_data = {})
252
+ # Added form_data default {} instead of nil to help with proxies
253
+ # that barf with empty post
234
254
  url_prefix = URI.escape("#{@jenkins_path}#{url_prefix}")
235
255
  request = Net::HTTP::Post.new("#{url_prefix}")
236
- puts "[INFO] PUT #{url_prefix}" if @debug
237
- request.basic_auth @username, @password
256
+ puts "[INFO] POST #{url_prefix}" if @debug
238
257
  request.content_type = 'application/json'
239
- request.set_form_data(form_data) unless form_data.nil?
258
+ request.set_form_data(form_data)
240
259
  response = make_http_request(request)
241
260
  handle_exception(response)
242
261
  end
@@ -251,7 +270,6 @@ module JenkinsApi
251
270
  url_prefix = URI.escape("#{@jenkins_path}#{url_prefix}")
252
271
  request = Net::HTTP::Get.new("#{url_prefix}/config.xml")
253
272
  puts "[INFO] GET #{url_prefix}/config.xml" if @debug
254
- request.basic_auth @username, @password
255
273
  response = make_http_request(request)
256
274
  handle_exception(response, "body")
257
275
  end
@@ -266,8 +284,7 @@ module JenkinsApi
266
284
  def post_config(url_prefix, xml)
267
285
  url_prefix = URI.escape("#{@jenkins_path}#{url_prefix}")
268
286
  request = Net::HTTP::Post.new("#{url_prefix}")
269
- puts "[INFO] PUT #{url_prefix}" if @debug
270
- request.basic_auth @username, @password
287
+ puts "[INFO] POST #{url_prefix}" if @debug
271
288
  request.body = xml
272
289
  request.content_type = 'application/xml'
273
290
  response = make_http_request(request)
@@ -360,7 +377,10 @@ module JenkinsApi
360
377
  msg = "HTTP Code: #{response.code}, Response Body: #{response.body}"
361
378
  puts msg if @debug
362
379
  case response.code.to_i
363
- when 200, 302
380
+ # As of Jenkins version 1.519, the job builds return a 201 status code
381
+ # with a Location HTTP header with the pointing the URL of the item in
382
+ # the queue.
383
+ when 200, 201, 302
364
384
  if to_send == "body" && send_json
365
385
  return JSON.parse(response.body)
366
386
  elsif to_send == "body"
@@ -479,7 +479,10 @@ module JenkinsApi
479
479
  "unstable"
480
480
  when /anime/
481
481
  "running"
482
- when "grey"
482
+ # In the recent version of Jenkins (> 1.517), jobs that are not built
483
+ # yet have a color of "notbuilt" instead of "grey". Include that to the
484
+ # not_run condition so it is backward compatible.
485
+ when "grey", "notbuilt"
483
486
  "not_run"
484
487
  when "aborted"
485
488
  "aborted"
@@ -549,6 +552,32 @@ module JenkinsApi
549
552
  @client.post_config("/job/#{job_name}/config.xml", xml)
550
553
  end
551
554
 
555
+ # Obtain the test results for a specific build of a job
556
+ #
557
+ # @param [String] job_name
558
+ # @param [Number] build_num
559
+ #
560
+ def get_test_results(job_name, build_num)
561
+ build_num = get_current_build_number(job_name) if build_num == 0
562
+
563
+ @client.api_get_request("/job/#{job_name}/#{build_num}/testReport")
564
+ rescue Exceptions::NotFoundException
565
+ # Not found is acceptable, as not all builds will have test results
566
+ # and this is what jenkins throws at us in that case
567
+ nil
568
+ end
569
+
570
+ # Obtain detailed build info for a job
571
+ #
572
+ # @param [String] job_name
573
+ # @param [Number] build_num
574
+ #
575
+ def get_build_details(job_name, build_num)
576
+ build_num = get_current_build_number(job_name) if build_num == 0
577
+
578
+ @client.api_get_request("/job/#{job_name}/#{build_num}/")
579
+ end
580
+
552
581
  # Change the description of a specific job
553
582
  #
554
583
  # @param [String] job_name
@@ -25,7 +25,7 @@ module JenkinsApi
25
25
  # Major version of the gem
26
26
  MAJOR = 0
27
27
  # Minor version of the gem
28
- MINOR = 11
28
+ MINOR = 12
29
29
  # Tiny version of the gem used for patches
30
30
  TINY = 0
31
31
  # Used for pre-releases
@@ -165,7 +165,7 @@ module JenkinsApi
165
165
  # @param [String] filter a regex to filter view names
166
166
  # @param [Bool] ignorecase whether to be case sensitive or not
167
167
  #
168
- def list(filter = nil, ignorecase = true)
168
+ def list(filter = "", ignorecase = true)
169
169
  view_names = []
170
170
  response_json = @client.api_get_request("/")
171
171
  response_json["views"].each { |view|
@@ -367,7 +367,9 @@ describe JenkinsApi::Client::Job do
367
367
  @job_name
368
368
  ).should_not == "running"
369
369
  response = @client.job.build(@job_name)
370
- response.to_i.should == 302
370
+ # As of Jenkins version 1.519 the job build responds with a 201
371
+ # status code.
372
+ [201, 302].should include(response.to_i)
371
373
  # Sleep for 6 seconds so we don't hit the Jenkins quiet period (5
372
374
  # seconds)
373
375
  sleep 6
@@ -25,6 +25,17 @@ describe JenkinsApi::Client do
25
25
  ).not_to raise_error
26
26
  end
27
27
 
28
+ it "initialize without exception if username/password not specified" do
29
+ expect(
30
+ lambda do
31
+ JenkinsApi::Client.new({
32
+ :server_ip => '127.0.0.1',
33
+ :server_port => 8080
34
+ })
35
+ end
36
+ ).not_to raise_error
37
+ end
38
+
28
39
  it "initializes with server_url without exception" do
29
40
  expect(
30
41
  lambda do
@@ -51,6 +62,20 @@ describe JenkinsApi::Client do
51
62
  end
52
63
  ).not_to raise_error
53
64
  end
65
+
66
+ it "errors on bad proxy args" do
67
+ expect(
68
+ lambda do
69
+ JenkinsApi::Client.new(
70
+ :server_ip => '127.0.0.1',
71
+ :server_port => 8080,
72
+ :username => 'username',
73
+ :password => 'password',
74
+ :proxy_ip => '127.0.0.1'
75
+ )
76
+ end
77
+ ).to raise_error
78
+ end
54
79
  end
55
80
 
56
81
  describe "#SubClassAccessorMethods" do
@@ -241,19 +266,6 @@ describe JenkinsApi::Client do
241
266
  ).to raise_error
242
267
  end
243
268
 
244
- it "Should fail if username is missing" do
245
- expect(
246
- lambda do
247
- JenkinsApi::Client.new({
248
- :server_ip => '127.0.0.1',
249
- :server_port => 8080,
250
- :bogus => 'username',
251
- :password => 'password'
252
- })
253
- end
254
- ).to raise_error
255
- end
256
-
257
269
  it "Should fail if password is missing" do
258
270
  expect(
259
271
  lambda do
@@ -0,0 +1,63 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <hudson>
3
+ <disabledAdministrativeMonitors/>
4
+ <version>1.517</version>
5
+ <numExecutors>10</numExecutors>
6
+ <mode>NORMAL</mode>
7
+ <useSecurity>true</useSecurity>
8
+ <authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">
9
+ <permission>hudson.model.Computer.Configure:testuser</permission>
10
+ <permission>hudson.model.Computer.Connect:testuser</permission>
11
+ <permission>hudson.model.Computer.Create:testuser</permission>
12
+ <permission>hudson.model.Computer.Delete:testuser</permission>
13
+ <permission>hudson.model.Computer.Disconnect:testuser</permission>
14
+ <permission>hudson.model.Hudson.Administer:testuser</permission>
15
+ <permission>hudson.model.Hudson.ConfigureUpdateCenter:testuser</permission>
16
+ <permission>hudson.model.Hudson.Read:testuser</permission>
17
+ <permission>hudson.model.Hudson.RunScripts:testuser</permission>
18
+ <permission>hudson.model.Hudson.UploadPlugins:testuser</permission>
19
+ <permission>hudson.model.Item.Build:testuser</permission>
20
+ <permission>hudson.model.Item.Cancel:testuser</permission>
21
+ <permission>hudson.model.Item.Configure:testuser</permission>
22
+ <permission>hudson.model.Item.Create:testuser</permission>
23
+ <permission>hudson.model.Item.Delete:testuser</permission>
24
+ <permission>hudson.model.Item.Discover:testuser</permission>
25
+ <permission>hudson.model.Item.Read:testuser</permission>
26
+ <permission>hudson.model.Item.Workspace:testuser</permission>
27
+ <permission>hudson.model.View.Configure:testuser</permission>
28
+ <permission>hudson.model.View.Create:testuser</permission>
29
+ <permission>hudson.model.View.Delete:testuser</permission>
30
+ <permission>hudson.model.View.Read:testuser</permission>
31
+ </authorizationStrategy>
32
+ <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
33
+ <disableSignup>false</disableSignup>
34
+ <enableCaptcha>false</enableCaptcha>
35
+ </securityRealm>
36
+ <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
37
+ <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
38
+ <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
39
+ <markupFormatter class="hudson.markup.RawHtmlMarkupFormatter">
40
+ <disableSyntaxHighlighting>false</disableSyntaxHighlighting>
41
+ </markupFormatter>
42
+ <jdks/>
43
+ <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
44
+ <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
45
+ <clouds/>
46
+ <slaves/>
47
+ <quietPeriod>5</quietPeriod>
48
+ <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
49
+ <views>
50
+ <hudson.model.AllView>
51
+ <owner class="hudson" reference="../../.."/>
52
+ <name>All</name>
53
+ <filterExecutors>false</filterExecutors>
54
+ <filterQueue>false</filterQueue>
55
+ <properties class="hudson.model.View$PropertyList"/>
56
+ </hudson.model.AllView>
57
+ </views>
58
+ <primaryView>All</primaryView>
59
+ <slaveAgentPort>0</slaveAgentPort>
60
+ <label></label>
61
+ <nodeProperties/>
62
+ <globalNodeProperties/>
63
+ </hudson>
data/travis/setup.sh ADDED
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ # Install Jenkins
4
+ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
5
+ sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
6
+ sudo apt-get update -qq
7
+ sudo apt-get install -qq jenkins
8
+
9
+ # Configure Jenkins
10
+ sudo service jenkins stop
11
+ sudo cp -f travis/jenkins_config.xml /var/lib/jenkins/config.xml
12
+ sudo mkdir -p /var/lib/jenkins/users/testuser
13
+ sudo cp -f travis/user_config.xml /var/lib/jenkins/users/testuser/config.xml
14
+ sudo service jenkins start
15
+ # Jenkins takes a bit to get dressed up and become ready, so be patient...
16
+ sleep 60
17
+ cat /var/log/jenkins/jenkins.log
18
+ echo `sudo service jenkins status`
19
+
20
+ # Create the credentials file used by functional tests
21
+ sudo mkdir ~/.jenkins_api_client
22
+ sudo cp -f travis/spec.yml ~/.jenkins_api_client/spec.yml
data/travis/spec.yml ADDED
@@ -0,0 +1,10 @@
1
+ # Test credentials
2
+
3
+ # Server IP Address
4
+ :server_ip: 127.0.0.1
5
+ # Username
6
+ :username: testuser
7
+ # Password
8
+ :password: testpassword
9
+ # Timeout in seconds
10
+ :timeout: 300
@@ -0,0 +1,29 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <user>
3
+ <fullName>Test User</fullName>
4
+ <properties>
5
+ <jenkins.security.ApiTokenProperty>
6
+ <apiToken></apiToken>
7
+ </jenkins.security.ApiTokenProperty>
8
+ <hudson.model.MyViewsProperty>
9
+ <views>
10
+ <hudson.model.AllView>
11
+ <owner class="hudson.model.MyViewsProperty" reference="../../.."/>
12
+ <name>All</name>
13
+ <filterExecutors>false</filterExecutors>
14
+ <filterQueue>false</filterQueue>
15
+ <properties class="hudson.model.View$PropertyList"/>
16
+ </hudson.model.AllView>
17
+ </views>
18
+ </hudson.model.MyViewsProperty>
19
+ <hudson.search.UserSearchProperty>
20
+ <insensitiveSearch>false</insensitiveSearch>
21
+ </hudson.search.UserSearchProperty>
22
+ <hudson.security.HudsonPrivateSecurityRealm_-Details>
23
+ <passwordHash>#jbcrypt:$2a$10$L051Dt2g4qlq0ABI8PtGIurtvuKVU7HcXAgwUAvy8vMA/CPXDLEdm</passwordHash>
24
+ </hudson.security.HudsonPrivateSecurityRealm_-Details>
25
+ <hudson.tasks.Mailer_-UserProperty>
26
+ <emailAddress>testuser@testdomain.com</emailAddress>
27
+ </hudson.tasks.Mailer_-UserProperty>
28
+ </properties>
29
+ </user>
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 11
7
+ - 12
8
8
  - 0
9
- version: 0.11.0
9
+ version: 0.12.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kannan Manickam
@@ -14,18 +14,20 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2013-06-09 00:00:00 -07:00
17
+ date: 2013-06-19 00:00:00 -07:00
18
18
  default_executable: jenkinscli
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime
22
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  segments:
27
+ - 1
28
+ - 5
27
29
  - 0
28
- version: "0"
30
+ version: 1.5.0
29
31
  name: nokogiri
30
32
  requirement: *id001
31
33
  prerelease: false
@@ -189,6 +191,10 @@ files:
189
191
  - spec/unit_tests/spec_helper.rb
190
192
  - spec/unit_tests/system_spec.rb
191
193
  - spec/unit_tests/view_spec.rb
194
+ - travis/jenkins_config.xml
195
+ - travis/setup.sh
196
+ - travis/spec.yml
197
+ - travis/user_config.xml
192
198
  has_rdoc: true
193
199
  homepage: https://github.com/arangamani/jenkins_api_client
194
200
  licenses: []