jenkins_api_client 0.14.1 → 1.0.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.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.travis.yml +5 -23
- data/CHANGELOG.md +104 -35
- data/CONTRIBUTORS.md +1 -11
- data/Gemfile +4 -2
- data/README.md +107 -7
- data/Rakefile +1 -0
- data/Vagrantfile +6 -8
- data/jenkins_api_client.gemspec +30 -12
- data/lib/jenkins_api_client/cli/helper.rb +1 -0
- data/lib/jenkins_api_client/client.rb +162 -69
- data/lib/jenkins_api_client/exceptions.rb +26 -17
- data/lib/jenkins_api_client/job.rb +321 -75
- data/lib/jenkins_api_client/node.rb +22 -10
- data/lib/jenkins_api_client/plugin_manager.rb +460 -0
- data/lib/jenkins_api_client/urihelper.rb +17 -0
- data/lib/jenkins_api_client/user.rb +4 -2
- data/lib/jenkins_api_client/version.rb +3 -3
- data/lib/jenkins_api_client/view.rb +10 -7
- data/lib/jenkins_api_client.rb +1 -0
- data/scripts/login_with_pry.rb +54 -0
- data/spec/func_tests/client_spec.rb +3 -3
- data/spec/func_tests/job_spec.rb +90 -7
- data/spec/func_tests/{node_spec.rb → node_spec.rb.pending} +9 -9
- data/spec/func_tests/plugin_spec.rb +148 -0
- data/spec/unit_tests/client_spec.rb +108 -27
- data/spec/unit_tests/fake_http_response.rb +9 -0
- data/spec/unit_tests/fixtures/files/available_plugins.json +1 -0
- data/spec/unit_tests/fixtures/files/installed_plugins.json +1 -0
- data/spec/unit_tests/fixtures/files/updatable_plugins.json +1 -0
- data/spec/unit_tests/job_spec.rb +109 -6
- data/spec/unit_tests/node_spec.rb +18 -6
- data/spec/unit_tests/plugin_spec.rb +165 -0
- data/spec/unit_tests/spec_helper.rb +11 -1
- data/spec/unit_tests/system_spec.rb +2 -1
- data/spec/unit_tests/user_spec.rb +1 -1
- data/travis/hudson.model.UpdateCenter.xml +7 -0
- data/travis/setup.sh +2 -1
- metadata +76 -64
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 646dcb2b3b87533a3d3257a22b72b702efc3ebda
|
4
|
+
data.tar.gz: 87704990a77cc24b3eb6bee80c1a17837af36656
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 222f14e72886e6f13dea87e5cf98a24bd41ae1b1f655960b0245422cdcb340a8ba01ab72e0f327f5f39fb8cc0870c1246a5d0082a7ca52c08597e1dc44048e4f
|
7
|
+
data.tar.gz: 74573b0aaccfe06fe557c7d2c34500ff9e863c8af4bf3af7dcb7e4f2153e64c0361353e13944ee4e8d0be0fe0c802c8d1d84006331f4841bb6b2f6d6cbd720ca
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,33 +1,15 @@
|
|
1
1
|
language: ruby
|
2
|
+
|
2
3
|
rvm:
|
3
4
|
- 2.0.0
|
4
5
|
- 1.9.3
|
5
|
-
- jruby-18mode
|
6
|
-
- jruby-19mode
|
7
|
-
- rbx-18mode
|
8
|
-
- rbx-19mode
|
9
|
-
- 1.8.7
|
10
|
-
- ree
|
11
|
-
matrix:
|
12
|
-
allow_failures:
|
13
|
-
- rvm: jruby-18mode
|
14
|
-
- rvm: jruby-19mode
|
15
|
-
- rvm: rbx-18mode
|
16
|
-
- rvm: rbx-19mode
|
17
|
-
- rvm: ree
|
18
|
-
before_install:
|
19
|
-
- travis/setup.sh
|
20
6
|
|
21
7
|
script:
|
22
8
|
- bundle exec rake unit_tests
|
23
|
-
|
24
|
-
- travis/setup_crumb.sh
|
25
|
-
- bundle exec rake func_tests
|
9
|
+
|
26
10
|
notifications:
|
27
11
|
webhooks: https://www.buildheroes.com/api/projects/588c9dffdc8f0deff4d89d87bf370e8dba8a8a95/builds
|
28
|
-
email: false
|
29
12
|
irc:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
- "irc.freenode.org##jenins-api-client"
|
13
|
+
channels: ["chat.freenode.net##jenkins-api-client"]
|
14
|
+
use_notice: true
|
15
|
+
skip_join: true
|
data/CHANGELOG.md
CHANGED
@@ -4,16 +4,42 @@ CHANGELOG
|
|
4
4
|
upcoming
|
5
5
|
--------
|
6
6
|
|
7
|
+
v1.0.0 [23-JUN-2014]
|
8
|
+
----------------------
|
9
|
+
* Ruby 1.8 is not supported anymore.
|
10
|
+
* Added support for `PluginManager` which supports listing installed plugins,
|
11
|
+
available plugins, installing and uninstalling plugins, enabling and disabling
|
12
|
+
plugins, and more.
|
13
|
+
* Enhance URL escape.
|
14
|
+
* [#106][] Added support for obtaining build numbers after the build is posted for Jenkins
|
15
|
+
version pre 1.519, added callbacks while waiting and more. Credit: [@dougforpres][]
|
16
|
+
* [#112][] Added supported for obtaining information about promoted builds. Credit: [@dkerwin][]
|
17
|
+
* [#118][] Added support for specifying username/password in the URL. Credit: [@spikegrobstein][]
|
18
|
+
* [#119][] Added ability to execute groovy script on the Jenkins server. Credit: [@lheinlen-os][]
|
19
|
+
* [#122][] Updated the `create_dumb_slave` method to accept the new credentials id that is
|
20
|
+
introduced in the newer version of jenkins. Credit: [@Loa][]
|
21
|
+
* [#126][] Enabled the use of cookies for authentication. Credit: [@chilicheech][]
|
22
|
+
* [#127][] Do not set content type in api_post_request. Credit: [@chilicheech][]
|
23
|
+
* [#128][] Updated `exec_script` to use `api_post_reqeust` to support features provided by
|
24
|
+
`api_post_request` such as using crumbs. Credit: [@chilicheech][]
|
25
|
+
* [#132][] Allow copying and enabling jobs with spaces in them. Credit: [@mattrose][]
|
26
|
+
* [#134][] Added support for specifying HTTP open timeout. Credit: [@n-rodriguez][]
|
27
|
+
* [#136][] Prevent warnings due to Hash#[] call with nil items on Ruby 2.x. Credit: [@sunaot][]
|
28
|
+
* [#140][] Add require yaml in cli helper. Credit: [@riywo][]
|
29
|
+
* [#141][] Rename `create_dump_slave` -> `create_dumb_slave`. Thanks for finding the
|
30
|
+
typo/incorrect name [@cynipe][]
|
31
|
+
|
32
|
+
|
7
33
|
v0.14.1 [18-AUG-2013]
|
8
34
|
----------------------
|
9
|
-
* Fixed a bug in Job#create_or_update method. Credit: @bobbrez
|
35
|
+
* Fixed a bug in Job#create_or_update method. Credit: [@bobbrez][]
|
10
36
|
|
11
37
|
v0.14.0 [07-AUG-2013]
|
12
38
|
----------------------
|
13
39
|
* Fixed a bug where a space was missing in the exec_cli method argument list.
|
14
|
-
Credit: @missedone
|
40
|
+
Credit: [@missedone][]
|
15
41
|
* Refactored create/update jobs by introducing create_or_update methods.
|
16
|
-
Credit: @riywo
|
42
|
+
Credit: [@riywo][]
|
17
43
|
* Enhancement to crumb processing - auto detect the change of crumb setting and
|
18
44
|
do proper exception handling. Credit: dougforpress
|
19
45
|
* Added a `User` class which will handle jenkins users related functions.
|
@@ -37,38 +63,37 @@ v0.13.0 [09-JUL-2013]
|
|
37
63
|
queue for longer than the 'timeout' parameter. This timeout parameter can be
|
38
64
|
set during the client initialization.
|
39
65
|
* Improved documentation
|
40
|
-
* Support for enabling/disabling jobs. Credit: @dieterdemeyer
|
41
|
-
* Added functionality for copying jobs. Credit: @dieterdemeyer
|
66
|
+
* Support for enabling/disabling jobs. Credit: [@dieterdemeyer][]
|
67
|
+
* Added functionality for copying jobs. Credit: [@dieterdemeyer][]
|
42
68
|
* Added functionality for wiping out the workspace of a job.
|
43
|
-
Credit: @dieterdemeyer
|
44
|
-
* Added functionality for listing jenkins users. Credit: @dieterdemeyer
|
69
|
+
Credit: [@dieterdemeyer][]
|
70
|
+
* Added functionality for listing jenkins users. Credit: [@dieterdemeyer][]
|
45
71
|
* Fixed a bug where the exceptions where not thrown when using the
|
46
72
|
`get_console_output` method.
|
47
73
|
* Fixed a bug where the jenkins_path attribute was ignored when the server_url
|
48
|
-
input argument is given. Credit: @woodbusy
|
74
|
+
input argument is given. Credit: [@woodbusy][]
|
49
75
|
* support public/private key pair authentication for Jenkins CLI.
|
50
|
-
Credit: @missedone
|
76
|
+
Credit: [@missedone][]
|
51
77
|
|
52
78
|
|
53
79
|
v0.12.1 [25-JUN-2013]
|
54
80
|
----------------------
|
55
81
|
* Fixed a bug where the SSL support was not working properly with Ruby
|
56
|
-
1.8.7/JRuby 1.6. Credit: @brettporter
|
57
|
-
https://github.com/arangamani/jenkins_api_client/pull/85)
|
82
|
+
1.8.7/JRuby 1.6. (Pull [#85][]) Credit: [@brettporter][]
|
58
83
|
|
59
84
|
v0.12.0 [18-JUN-2013]
|
60
85
|
----------------------
|
61
86
|
* Authentication is now optional as not all Jenkins instances have
|
62
|
-
authentication enabled by default. Credit: @dougforpres
|
87
|
+
authentication enabled by default. Credit: [@dougforpres][]
|
63
88
|
* Ability to retrieve build details so that more than just (`lamp color`) is
|
64
|
-
available. Credit: @dougforpres
|
89
|
+
available. Credit: [@dougforpres][]
|
65
90
|
* Ability to retrieve build test-results for those builds that have them.
|
66
|
-
Credit: @dougforpres
|
91
|
+
Credit: [@dougforpres][]
|
67
92
|
* Option to follow any 301/302 responses. This allows POST to build to follow
|
68
|
-
the redirect and end up with a 200 response. Credit: @dougforpres
|
93
|
+
the redirect and end up with a 200 response. Credit: [@dougforpres][]
|
69
94
|
* Minor change to the POST requests handling where jenkins instances with a
|
70
95
|
proxy returns 411 if no form data is specified. Fixed by sending an empty
|
71
|
-
hash. Credit: @dougforpres
|
96
|
+
hash. Credit: [@dougforpres][]
|
72
97
|
* As of Jenkins release 1.519, the job build returns a 201 code instead of 302.
|
73
98
|
This was resulting in an exception and the exception handling is modified to
|
74
99
|
handle this condition.
|
@@ -78,17 +103,17 @@ v0.12.0 [18-JUN-2013]
|
|
78
103
|
v0.11.0 [09-JUN-2013]
|
79
104
|
----------------------
|
80
105
|
* A new input argument `server_url` is supported which accepts the jenkins URL
|
81
|
-
instead of IP address and Port. Credit: @dieterdemeyer
|
82
|
-
* When renaming the job, preserve the job history. Credit: @rubytester
|
83
|
-
* Various exception handling improvements. Credit: @drnic
|
106
|
+
instead of IP address and Port. Credit: [@dieterdemeyer][]
|
107
|
+
* When renaming the job, preserve the job history. Credit: [@rubytester][]
|
108
|
+
* Various exception handling improvements. Credit: [@drnic][]
|
84
109
|
|
85
110
|
v0.10.0 [24-APR-2013]
|
86
111
|
----------------------
|
87
|
-
* new function to execute jenkins CLI `cli_exec`. Credit: @missedone
|
88
|
-
* Add ability to use http proxy. Credit: @woodbusy
|
89
|
-
* prompt the user for credentials when using irb login script. @woodbusy
|
90
|
-
* bugfix for job.console_output. Credit: @drnic
|
91
|
-
* add ssl support. Credit: @madisp
|
112
|
+
* new function to execute jenkins CLI `cli_exec`. Credit: [@missedone][]
|
113
|
+
* Add ability to use http proxy. Credit: [@woodbusy][]
|
114
|
+
* prompt the user for credentials when using irb login script. [@woodbusy][]
|
115
|
+
* bugfix for job.console_output. Credit: [@drnic][]
|
116
|
+
* add ssl support. Credit: [@madisp][]
|
92
117
|
|
93
118
|
v0.9.1 [01-APR-2013]
|
94
119
|
---------------------
|
@@ -101,18 +126,18 @@ v0.9.0 [10-MAR-2013]
|
|
101
126
|
* Removed warnings from client.rb
|
102
127
|
* Refactored and improved exception handling
|
103
128
|
* A bug is fixed in client which allows only the valid params as options.
|
104
|
-
Credit: @Niarfe
|
129
|
+
Credit: [@Niarfe][]
|
105
130
|
* Added a timeout parameter for waiting for jenkins to become ready.
|
106
|
-
Credit: @Niarfe
|
107
|
-
* Added function to reload jenkins. Credit: @missedone
|
131
|
+
Credit: [@Niarfe][]
|
132
|
+
* Added function to reload jenkins. Credit: [@missedone][]
|
108
133
|
* Fixed a bug where jenkins_path was missing in get_config and post_config.
|
109
|
-
Credit: @cylol
|
134
|
+
Credit: [@cylol][]
|
110
135
|
* Added capability to obtain jenkins version and other useful information
|
111
136
|
* Added new tests for various cases, and other code improvements
|
112
137
|
|
113
138
|
v0.8.1 [15-FEB-2013]
|
114
139
|
---------------------
|
115
|
-
* Fixed a bug in creating view. Issue #42
|
140
|
+
* Fixed a bug in creating view. Issue [#42][]
|
116
141
|
|
117
142
|
v0.8.0 [14-FEB-2013]
|
118
143
|
---------------------
|
@@ -120,16 +145,16 @@ v0.8.0 [14-FEB-2013]
|
|
120
145
|
* Added rename feature for jobs
|
121
146
|
* Added support for sending skype notification in job creation and on existing
|
122
147
|
jobs
|
123
|
-
* Added support for sending Jenkins root URL configuration. Credit: @kevinhcross
|
148
|
+
* Added support for sending Jenkins root URL configuration. Credit: [@kevinhcross][]
|
124
149
|
* Added `delete_all!` methods for Job, View, and Node.
|
125
150
|
* `get_eta` in BuildQueue will return "N/A" if the ETA is not given by Jenkins
|
126
151
|
* Creating view accepts params Hash and more configuration through the API
|
127
|
-
* Spaces are allowed in Job, Node, and View names. Credit: @kevinhcross
|
128
|
-
* Support has been added to build a job with parameters. Credit: @tjhanley
|
152
|
+
* Spaces are allowed in Job, Node, and View names. Credit: [@kevinhcross][]
|
153
|
+
* Support has been added to build a job with parameters. Credit: [@tjhanley][]
|
129
154
|
|
130
155
|
v0.7.3 [05-FEB-2013]
|
131
156
|
---------------------
|
132
|
-
* Fixed #27 with a bug in create_view including extra character in the end of
|
157
|
+
* Fixed [#27][] with a bug in create_view including extra character in the end of
|
133
158
|
the name
|
134
159
|
|
135
160
|
v0.7.2 [02-FEB-2013]
|
@@ -138,7 +163,7 @@ v0.7.2 [02-FEB-2013]
|
|
138
163
|
|
139
164
|
v0.7.1 [30-JAN-2013]
|
140
165
|
---------------------
|
141
|
-
* Fixed a bug (Issue #23) to remove the usage of "\" in Job.
|
166
|
+
* Fixed a bug (Issue [#23][]) to remove the usage of "\" in Job.
|
142
167
|
|
143
168
|
v0.7.0 [27-JAN-2013]
|
144
169
|
---------------------
|
@@ -149,7 +174,7 @@ v0.7.0 [27-JAN-2013]
|
|
149
174
|
* Added support for notification_email option when setting up a job
|
150
175
|
* Added support for CVS provider in SCM
|
151
176
|
* Added `create_dump_slave` and `delete` methods in Node API
|
152
|
-
* Added BuildQueue class which is accessible by
|
177
|
+
* Added BuildQueue class which is accessible by `[@client][].queue` method
|
153
178
|
* Improvements in all over the code for performance and error handling
|
154
179
|
|
155
180
|
v0.6.2 [13-JAN-2013]
|
@@ -220,3 +245,47 @@ v0.0.2 [16-OCT-2012]
|
|
220
245
|
v0.0.1 [15-OCT-2012]
|
221
246
|
---------------------
|
222
247
|
* Initial Release
|
248
|
+
|
249
|
+
|
250
|
+
<!--- The following link definition list is generated by PimpMyChangelog --->
|
251
|
+
[#23]: https://github.com/arangamani/jenkins_api_client/issues/23
|
252
|
+
[#27]: https://github.com/arangamani/jenkins_api_client/issues/27
|
253
|
+
[#42]: https://github.com/arangamani/jenkins_api_client/issues/42
|
254
|
+
[#85]: https://github.com/arangamani/jenkins_api_client/issues/85
|
255
|
+
[#106]: https://github.com/arangamani/jenkins_api_client/issues/106
|
256
|
+
[#112]: https://github.com/arangamani/jenkins_api_client/issues/112
|
257
|
+
[#118]: https://github.com/arangamani/jenkins_api_client/issues/118
|
258
|
+
[#119]: https://github.com/arangamani/jenkins_api_client/issues/119
|
259
|
+
[#122]: https://github.com/arangamani/jenkins_api_client/issues/122
|
260
|
+
[#126]: https://github.com/arangamani/jenkins_api_client/issues/126
|
261
|
+
[#127]: https://github.com/arangamani/jenkins_api_client/issues/127
|
262
|
+
[#128]: https://github.com/arangamani/jenkins_api_client/issues/128
|
263
|
+
[#132]: https://github.com/arangamani/jenkins_api_client/issues/132
|
264
|
+
[#134]: https://github.com/arangamani/jenkins_api_client/issues/134
|
265
|
+
[#136]: https://github.com/arangamani/jenkins_api_client/issues/136
|
266
|
+
[#140]: https://github.com/arangamani/jenkins_api_client/issues/140
|
267
|
+
[#141]: https://github.com/arangamani/jenkins_api_client/issues/141
|
268
|
+
[@Loa]: https://github.com/Loa
|
269
|
+
[@Niarfe]: https://github.com/Niarfe
|
270
|
+
[@bobbrez]: https://github.com/bobbrez
|
271
|
+
[@brettporter]: https://github.com/brettporter
|
272
|
+
[@chilicheech]: https://github.com/chilicheech
|
273
|
+
[@client]: https://github.com/client
|
274
|
+
[@cylol]: https://github.com/cylol
|
275
|
+
[@cynipe]: https://github.com/cynipe
|
276
|
+
[@dieterdemeyer]: https://github.com/dieterdemeyer
|
277
|
+
[@dkerwin]: https://github.com/dkerwin
|
278
|
+
[@dougforpres]: https://github.com/dougforpres
|
279
|
+
[@drnic]: https://github.com/drnic
|
280
|
+
[@kevinhcross]: https://github.com/kevinhcross
|
281
|
+
[@lheinlen-os]: https://github.com/lheinlen-os
|
282
|
+
[@madisp]: https://github.com/madisp
|
283
|
+
[@mattrose]: https://github.com/mattrose
|
284
|
+
[@missedone]: https://github.com/missedone
|
285
|
+
[@n-rodriguez]: https://github.com/n-rodriguez
|
286
|
+
[@riywo]: https://github.com/riywo
|
287
|
+
[@rubytester]: https://github.com/rubytester
|
288
|
+
[@spikegrobstein]: https://github.com/spikegrobstein
|
289
|
+
[@sunaot]: https://github.com/sunaot
|
290
|
+
[@tjhanley]: https://github.com/tjhanley
|
291
|
+
[@woodbusy]: https://github.com/woodbusy
|
data/CONTRIBUTORS.md
CHANGED
@@ -1,13 +1,3 @@
|
|
1
1
|
Thank you very much to all who contributed to this project.
|
2
2
|
|
3
|
-
|
4
|
-
* [dieterdemeyer](https://github.com/dieterdemeyer)
|
5
|
-
* [kevinhcross](https://github.com/kevinhcross)
|
6
|
-
* [drnic](https://github.com/drnic)
|
7
|
-
* [woodbusy](https://github.com/woodbusy)
|
8
|
-
* [missedone](https://github.com/missedone)
|
9
|
-
* [cylol](https://github.com/cylol)
|
10
|
-
* [madisp](https://github.com/madisp)
|
11
|
-
* [rubytester](https://github.com/rubytester)
|
12
|
-
* [dougforpres](https://github.com/dougforpres)
|
13
|
-
* [brettporter](https://github.com/brettporter)
|
3
|
+
Please visit the [Contributors](https://github.com/arangamani/jenkins_api_client/graphs/contributors) page on Github.
|
data/Gemfile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem "nokogiri", "~> 1.
|
3
|
+
gem "nokogiri", "~> 1.6.0"
|
4
4
|
gem "thor", ">= 0.16.0"
|
5
5
|
gem "json", ">= 0"
|
6
6
|
gem "terminal-table", ">= 1.4.0"
|
@@ -9,7 +9,9 @@ gem "mixlib-shellout", ">= 1.1.0"
|
|
9
9
|
group :development do
|
10
10
|
gem "bundler", ">= 1.0"
|
11
11
|
gem "jeweler", ">= 1.6.4"
|
12
|
-
gem "rspec", "~> 2.
|
12
|
+
gem "rspec", "~> 2.14.1"
|
13
13
|
gem "simplecov"
|
14
|
+
gem "yard-thor"
|
14
15
|
gem "yard"
|
16
|
+
gem "pry"
|
15
17
|
end
|
data/README.md
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
Jenkins API Client
|
2
2
|
==================
|
3
|
-
|
4
|
-
[][gem]
|
5
|
+
[][travis]
|
6
|
+
[][gemnasium]
|
7
|
+
[][codeclimate]
|
8
|
+
|
9
|
+
[gem]: https://rubygems.org/gems/jenkins_api_client
|
10
|
+
[travis]: http://travis-ci.org/arangamani/jenkins_api_client
|
11
|
+
[gemnasium]: https://gemnasium.com/arangamani/jenkins_api_client
|
12
|
+
[codeclimate]: https://codeclimate.com/github/arangamani/jenkins_api_client
|
7
13
|
|
8
14
|
Copyright © 2012-2013, Kannan Manickam [](http://coderwall.com/arangamani)
|
9
15
|
|
@@ -67,6 +73,14 @@ file. To use the client without credentials, just leave out the
|
|
67
73
|
<tt>username</tt> and <tt>password</tt> parameters. The <tt>password</tt>
|
68
74
|
parameter is only required if <tt>username</tt> is specified.
|
69
75
|
|
76
|
+
#### Using with Open ID
|
77
|
+
|
78
|
+
It is very simple to authenticate with your Jenkins server that has Open ID
|
79
|
+
authentication enabled. You will have to obtain your API token and use the API
|
80
|
+
token as the password. For obtaining the API token, go to your user configuration
|
81
|
+
page and click 'Show API Token'. Use this token for the `password` parameter when
|
82
|
+
initializing the client.
|
83
|
+
|
70
84
|
### Cross-site Scripting (XSS) and Crumb Support
|
71
85
|
|
72
86
|
Support for Jenkins crumbs has been added. These allow an application to
|
@@ -102,7 +116,7 @@ puts @client.job.list_all
|
|
102
116
|
### Chaining and Building Jobs
|
103
117
|
|
104
118
|
Sometimes we want certain jobs to be added as downstream projects and run them
|
105
|
-
|
119
|
+
sequentially. The following example will explain how this could be done.
|
106
120
|
|
107
121
|
```ruby
|
108
122
|
require 'jenkins_api_client'
|
@@ -169,6 +183,87 @@ initial_jobs.each do |job|
|
|
169
183
|
end
|
170
184
|
```
|
171
185
|
|
186
|
+
### Waiting for a build to start/Getting the build number
|
187
|
+
Newer versions of Jenkins (starting with the 1.519 build) make it easier for
|
188
|
+
an application to determine the build number for a 'build' request. (previously
|
189
|
+
there would be a degree of guesswork involved). The new version actually
|
190
|
+
returns information allowing the jenkins_api_client to check the build queue
|
191
|
+
for the job and see if it has started yet (once it has started, the build-
|
192
|
+
number is available.
|
193
|
+
|
194
|
+
If you wish to take advantage of this hands-off approach, the build method
|
195
|
+
supports an additional 'opts' hash that lets you specify how long you wish to
|
196
|
+
wait for the build to start.
|
197
|
+
|
198
|
+
#### Old Jenkins vs New Jenkins (1.519+)
|
199
|
+
|
200
|
+
##### Old (v < 1.519)
|
201
|
+
The 'opts' parameter will work with older versions of Jenkins with the following
|
202
|
+
caveats:
|
203
|
+
* The 'cancel_on_build_start_timeout' option has no effect
|
204
|
+
* The build_number is calculated by calling 'current_build_number' and adding
|
205
|
+
1 before the build is started. This might break if there are multiple
|
206
|
+
entities running builds on the same job, or there are queued builds.
|
207
|
+
|
208
|
+
##### New (v >= 1.519)
|
209
|
+
* All options work, and build number is accurately determined from queue
|
210
|
+
info.
|
211
|
+
|
212
|
+
#### Initiating a build and returning the build_number
|
213
|
+
|
214
|
+
##### Minimum required
|
215
|
+
```ruby
|
216
|
+
# Minimum options required
|
217
|
+
opts = {'build_start_timeout' => 30}
|
218
|
+
@client.job.build(job_name, job_params || {}, opts)
|
219
|
+
```
|
220
|
+
This method will block for up to 30 seconds, while waiting for the build to
|
221
|
+
start. Instead of returning an http-status code, it will return the
|
222
|
+
build_number, or if the build has not started will raise 'Timeout::Error'
|
223
|
+
Note: to maintain legacy compatibility, passing 'true' will set the timeout
|
224
|
+
to the default timeout specified when creating the @client.
|
225
|
+
|
226
|
+
##### Auto cancel the queued-build on timeout
|
227
|
+
```ruby
|
228
|
+
# Wait for up to 30 seconds, attempt to cancel queued build
|
229
|
+
opts = {'build_start_timeout' => 30,
|
230
|
+
'cancel_on_build_start_timeout' => true}
|
231
|
+
@client.job.build(job_name, job_params || {}, opts)
|
232
|
+
```
|
233
|
+
This method will block for up to 30 seconds, while waiting for the build to
|
234
|
+
start. Instead of returning an http-status code, it will return the
|
235
|
+
build_number, or if the build has not started will raise 'Timeout::Error'.
|
236
|
+
Prior to raising the Timeout::Error, it will attempt to cancel the queued
|
237
|
+
build - thus preventing it from starting.
|
238
|
+
|
239
|
+
##### Getting some feedback while you're waiting
|
240
|
+
The opts parameter supports two values that can be assigned proc objects
|
241
|
+
(which will be 'call'ed). Both are optional, and will only be called if
|
242
|
+
specified in opts.
|
243
|
+
These are initially intended to assist with logging progress.
|
244
|
+
|
245
|
+
* 'progress_proc' - called when job is initially queued, and periodically
|
246
|
+
thereafter.
|
247
|
+
* max_wait - the value of 'build_start_timeout'
|
248
|
+
* current_wait - how long we've been waiting so far
|
249
|
+
* poll_count - how many times we've polled the queue
|
250
|
+
* 'completion_proc' - called just prior to return/Timeout::Error
|
251
|
+
* build_number - the build number assigned (or nil if timeout)
|
252
|
+
* cancelled - whether the build was cancelled (true if 'new' Jenkins
|
253
|
+
and it was able to cancel the build, false otherwise)
|
254
|
+
|
255
|
+
To use a class method, just specify 'instance.method(:method_name)', or
|
256
|
+
use a proc or lambda
|
257
|
+
|
258
|
+
```ruby
|
259
|
+
# Wait for up to 30 seconds, attempt to cancel queued build, progress
|
260
|
+
opts = {'build_start_timeout' => 30,
|
261
|
+
'cancel_on_build_start_timeout' => true,
|
262
|
+
'poll_interval' => 2, # 2 is actually the default :)
|
263
|
+
'progress_proc' => lambda {|max,curr,count| ... },
|
264
|
+
'completion_proc' => lambda {|build_number,cancelled| ... }}
|
265
|
+
@client.job.build(job_name, job_params || {}, opts)
|
266
|
+
```
|
172
267
|
### Running Jenkins CLI
|
173
268
|
To running [Jenkins CLI](https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI)
|
174
269
|
|
@@ -182,8 +277,9 @@ puts @client.exec_cli("version")
|
|
182
277
|
```
|
183
278
|
|
184
279
|
* authentication with public/private key file
|
185
|
-
remember to upload the public key to
|
186
|
-
|
280
|
+
remember to upload the public key to:
|
281
|
+
|
282
|
+
`http://#{Server IP}:#{Server Port}/user/#{Username}/configure`
|
187
283
|
|
188
284
|
```ruby
|
189
285
|
@client = JenkinsApi::Client.new(:server_ip => '127.0.0.1',
|
@@ -270,3 +366,7 @@ FEATURE REQUEST:
|
|
270
366
|
If you use this gem for your project and you think it would be nice to have a
|
271
367
|
particular feature that is presently not implemented, I would love to hear that
|
272
368
|
and consider working on it. Just open an issue in Github as a feature request.
|
369
|
+
|
370
|
+
|
371
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
372
|
+
|
data/Rakefile
CHANGED
@@ -22,6 +22,7 @@ Jeweler::Tasks.new do |gemspec|
|
|
22
22
|
This is a simple and easy-to-use Jenkins Api client with features focused on
|
23
23
|
automating Job configuration programaticaly and so forth}
|
24
24
|
gemspec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
25
|
+
gemspec.required_ruby_version = '>= 1.9.2'
|
25
26
|
gemspec.rubygems_version = '1.8.17'
|
26
27
|
end
|
27
28
|
|
data/Vagrantfile
CHANGED
@@ -9,11 +9,11 @@ Vagrant.configure("2") do |config|
|
|
9
9
|
config.vm.hostname = "jenkins-api-client"
|
10
10
|
|
11
11
|
# Every Vagrant virtual environment requires a box to build off of.
|
12
|
-
config.vm.box = "
|
12
|
+
config.vm.box = "opscode-ubuntu-12.04"
|
13
13
|
|
14
14
|
# The url from where the 'config.vm.box' box will be fetched if it
|
15
15
|
# doesn't already exist on the user's system.
|
16
|
-
config.vm.box_url = "https://
|
16
|
+
config.vm.box_url = "https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box"
|
17
17
|
|
18
18
|
# Assign this VM to a host-only network IP, allowing you to access it
|
19
19
|
# via the IP. Host-only networks can talk to the host machine as well as
|
@@ -52,9 +52,6 @@ Vagrant.configure("2") do |config|
|
|
52
52
|
# View the documentation for the provider you're using for more
|
53
53
|
# information on available options.
|
54
54
|
|
55
|
-
config.ssh.max_tries = 40
|
56
|
-
config.ssh.timeout = 120
|
57
|
-
|
58
55
|
# The path to the Berksfile to use with Vagrant Berkshelf
|
59
56
|
# config.berkshelf.berksfile_path = "./Berksfile"
|
60
57
|
|
@@ -73,11 +70,12 @@ Vagrant.configure("2") do |config|
|
|
73
70
|
config.vm.synced_folder ".", "/opt/jenkins_api_client"
|
74
71
|
|
75
72
|
config.vm.provision :shell, :inline =>
|
76
|
-
" sudo apt-get
|
73
|
+
" sudo apt-get update;" +
|
74
|
+
" sudo apt-get install -y git ruby1.9.1-full rubygems libxslt-dev libxml2-dev;" +
|
77
75
|
" cd /opt/jenkins_api_client;" +
|
78
76
|
" ls -lrt;" +
|
79
|
-
"
|
80
|
-
" sudo
|
77
|
+
" ruby1.9.1 --version;" +
|
78
|
+
" sudo gem1.9.1 install bundler;" +
|
81
79
|
" bundle install;" +
|
82
80
|
" travis/setup.sh;" +
|
83
81
|
" bundle exec rake unit_tests;" +
|
data/jenkins_api_client.gemspec
CHANGED
@@ -2,14 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: jenkins_api_client 1.0.0 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "jenkins_api_client"
|
8
|
-
s.version = "0.
|
9
|
+
s.version = "1.0.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Kannan Manickam"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2014-06-21"
|
13
15
|
s.description = "\nThis is a simple and easy-to-use Jenkins Api client with features focused on\nautomating Job configuration programaticaly and so forth"
|
14
16
|
s.email = ["arangamani.kannan@gmail.com"]
|
15
17
|
s.executables = ["jenkinscli"]
|
@@ -40,28 +42,38 @@ Gem::Specification.new do |s|
|
|
40
42
|
"lib/jenkins_api_client/exceptions.rb",
|
41
43
|
"lib/jenkins_api_client/job.rb",
|
42
44
|
"lib/jenkins_api_client/node.rb",
|
45
|
+
"lib/jenkins_api_client/plugin_manager.rb",
|
43
46
|
"lib/jenkins_api_client/system.rb",
|
47
|
+
"lib/jenkins_api_client/urihelper.rb",
|
44
48
|
"lib/jenkins_api_client/user.rb",
|
45
49
|
"lib/jenkins_api_client/version.rb",
|
46
50
|
"lib/jenkins_api_client/view.rb",
|
47
51
|
"scripts/login_with_irb.rb",
|
52
|
+
"scripts/login_with_pry.rb",
|
48
53
|
"spec/func_tests/client_spec.rb",
|
49
54
|
"spec/func_tests/job_spec.rb",
|
50
|
-
"spec/func_tests/node_spec.rb",
|
55
|
+
"spec/func_tests/node_spec.rb.pending",
|
56
|
+
"spec/func_tests/plugin_spec.rb",
|
51
57
|
"spec/func_tests/spec_helper.rb",
|
52
58
|
"spec/func_tests/system_spec.rb",
|
53
59
|
"spec/func_tests/user_spec.rb",
|
54
60
|
"spec/func_tests/view_spec.rb",
|
55
61
|
"spec/unit_tests/build_queue_spec.rb",
|
56
62
|
"spec/unit_tests/client_spec.rb",
|
63
|
+
"spec/unit_tests/fake_http_response.rb",
|
64
|
+
"spec/unit_tests/fixtures/files/available_plugins.json",
|
57
65
|
"spec/unit_tests/fixtures/files/computer_sample.xml",
|
66
|
+
"spec/unit_tests/fixtures/files/installed_plugins.json",
|
58
67
|
"spec/unit_tests/fixtures/files/job_sample.xml",
|
68
|
+
"spec/unit_tests/fixtures/files/updatable_plugins.json",
|
59
69
|
"spec/unit_tests/job_spec.rb",
|
60
70
|
"spec/unit_tests/node_spec.rb",
|
71
|
+
"spec/unit_tests/plugin_spec.rb",
|
61
72
|
"spec/unit_tests/spec_helper.rb",
|
62
73
|
"spec/unit_tests/system_spec.rb",
|
63
74
|
"spec/unit_tests/user_spec.rb",
|
64
75
|
"spec/unit_tests/view_spec.rb",
|
76
|
+
"travis/hudson.model.UpdateCenter.xml",
|
65
77
|
"travis/jenkins_config.xml",
|
66
78
|
"travis/jenkins_config_with_crumb.xml",
|
67
79
|
"travis/setup.sh",
|
@@ -70,47 +82,53 @@ Gem::Specification.new do |s|
|
|
70
82
|
"travis/user_config.xml"
|
71
83
|
]
|
72
84
|
s.homepage = "https://github.com/arangamani/jenkins_api_client"
|
73
|
-
s.
|
74
|
-
s.rubygems_version = "
|
85
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
|
86
|
+
s.rubygems_version = "2.2.2"
|
75
87
|
s.summary = "Jenkins JSON API Client"
|
76
88
|
|
77
89
|
if s.respond_to? :specification_version then
|
78
|
-
s.specification_version =
|
90
|
+
s.specification_version = 4
|
79
91
|
|
80
92
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
81
|
-
s.add_runtime_dependency(%q<nokogiri>, ["~> 1.
|
93
|
+
s.add_runtime_dependency(%q<nokogiri>, ["~> 1.6.0"])
|
82
94
|
s.add_runtime_dependency(%q<thor>, [">= 0.16.0"])
|
83
95
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
84
96
|
s.add_runtime_dependency(%q<terminal-table>, [">= 1.4.0"])
|
85
97
|
s.add_runtime_dependency(%q<mixlib-shellout>, [">= 1.1.0"])
|
86
98
|
s.add_development_dependency(%q<bundler>, [">= 1.0"])
|
87
99
|
s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
|
88
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.
|
100
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.14.1"])
|
89
101
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
102
|
+
s.add_development_dependency(%q<yard-thor>, [">= 0"])
|
90
103
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
104
|
+
s.add_development_dependency(%q<pry>, [">= 0"])
|
91
105
|
else
|
92
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.
|
106
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.6.0"])
|
93
107
|
s.add_dependency(%q<thor>, [">= 0.16.0"])
|
94
108
|
s.add_dependency(%q<json>, [">= 0"])
|
95
109
|
s.add_dependency(%q<terminal-table>, [">= 1.4.0"])
|
96
110
|
s.add_dependency(%q<mixlib-shellout>, [">= 1.1.0"])
|
97
111
|
s.add_dependency(%q<bundler>, [">= 1.0"])
|
98
112
|
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
99
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
113
|
+
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
100
114
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
115
|
+
s.add_dependency(%q<yard-thor>, [">= 0"])
|
101
116
|
s.add_dependency(%q<yard>, [">= 0"])
|
117
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
102
118
|
end
|
103
119
|
else
|
104
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.
|
120
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.6.0"])
|
105
121
|
s.add_dependency(%q<thor>, [">= 0.16.0"])
|
106
122
|
s.add_dependency(%q<json>, [">= 0"])
|
107
123
|
s.add_dependency(%q<terminal-table>, [">= 1.4.0"])
|
108
124
|
s.add_dependency(%q<mixlib-shellout>, [">= 1.1.0"])
|
109
125
|
s.add_dependency(%q<bundler>, [">= 1.0"])
|
110
126
|
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
111
|
-
s.add_dependency(%q<rspec>, ["~> 2.
|
127
|
+
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
112
128
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
129
|
+
s.add_dependency(%q<yard-thor>, [">= 0"])
|
113
130
|
s.add_dependency(%q<yard>, [">= 0"])
|
131
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
114
132
|
end
|
115
133
|
end
|
116
134
|
|