jenkins_api_client 1.4.5 → 1.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jenkins_api_client.gemspec +15 -136
- data/lib/jenkins_api_client/version.rb +2 -2
- metadata +6 -180
- data/.gitignore +0 -41
- data/.jenkins.yml +0 -9
- data/.travis.yml +0 -15
- data/CHANGELOG.md +0 -391
- data/CONTRIBUTORS.md +0 -3
- data/Gemfile +0 -20
- data/LICENCE +0 -21
- data/README.md +0 -454
- data/Rakefile +0 -107
- data/Vagrantfile +0 -83
- data/config/login.yml.example +0 -27
- data/jenkins_api_client_class_diagram.png +0 -0
- data/scripts/login_with_irb.rb +0 -54
- data/scripts/login_with_pry.rb +0 -54
- data/spec/func_tests/client_spec.rb +0 -109
- data/spec/func_tests/job_spec.rb +0 -669
- data/spec/func_tests/node_spec.rb.pending +0 -217
- data/spec/func_tests/plugin_spec.rb +0 -148
- data/spec/func_tests/spec_helper.rb +0 -41
- data/spec/func_tests/system_spec.rb +0 -84
- data/spec/func_tests/user_spec.rb +0 -49
- data/spec/func_tests/view_spec.rb +0 -276
- data/spec/unit_tests/build_queue_spec.rb +0 -152
- data/spec/unit_tests/client_spec.rb +0 -471
- data/spec/unit_tests/fake_http_response.rb +0 -9
- data/spec/unit_tests/fixtures/files/available_plugins.json +0 -1
- data/spec/unit_tests/fixtures/files/computer_sample.xml +0 -17
- data/spec/unit_tests/fixtures/files/installed_plugins.json +0 -1
- data/spec/unit_tests/fixtures/files/job_sample.xml +0 -16
- data/spec/unit_tests/fixtures/files/updatable_plugins.json +0 -1
- data/spec/unit_tests/job_spec.rb +0 -783
- data/spec/unit_tests/node_spec.rb +0 -342
- data/spec/unit_tests/plugin_settings/colllection_spec.rb +0 -62
- data/spec/unit_tests/plugin_settings/hipchat_spec.rb +0 -44
- data/spec/unit_tests/plugin_settings/workspace_cleanup_spec.rb +0 -31
- data/spec/unit_tests/plugin_spec.rb +0 -165
- data/spec/unit_tests/spec_helper.rb +0 -19
- data/spec/unit_tests/system_spec.rb +0 -76
- data/spec/unit_tests/user_spec.rb +0 -144
- data/spec/unit_tests/view_spec.rb +0 -149
- data/travis/hudson.model.UpdateCenter.xml +0 -7
- data/travis/jenkins_config.xml +0 -63
- data/travis/jenkins_config_with_crumb.xml +0 -67
- data/travis/setup.sh +0 -23
- data/travis/setup_crumb.sh +0 -11
- data/travis/spec.yml +0 -14
- data/travis/user_config.xml +0 -29
data/README.md
DELETED
@@ -1,454 +0,0 @@
|
|
1
|
-
Jenkins API Client
|
2
|
-
==================
|
3
|
-
|
4
|
-
[![Gem Version](http://img.shields.io/gem/v/jenkins_api_client.svg)][gem]
|
5
|
-
[![Build Status](http://img.shields.io/travis/arangamani/jenkins_api_client.svg)][travis]
|
6
|
-
[![Dependency Status](http://img.shields.io/gemnasium/arangamani/jenkins_api_client.svg)][gemnasium]
|
7
|
-
[![Code Climate](http://img.shields.io/codeclimate/github/arangamani/jenkins_api_client.svg)][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
|
13
|
-
|
14
|
-
Copyright © 2012-2013, Kannan Manickam [![endorse](http://api.coderwall.com/arangamani/endorsecount.png)](http://coderwall.com/arangamani)
|
15
|
-
|
16
|
-
Client libraries for communicating with a Jenkins CI server and programatically managing jobs.
|
17
|
-
|
18
|
-
IRC Channel: ##jenkins-api-client (on freenode)
|
19
|
-
|
20
|
-
Mailing list: jenkins_api_client@googlegroups.com
|
21
|
-
|
22
|
-
Google Group: https://groups.google.com/group/jenkins_api_client
|
23
|
-
|
24
|
-
OVERVIEW:
|
25
|
-
---------
|
26
|
-
This project is a simple API client for interacting with Jenkins Continuous
|
27
|
-
Integration server. Jenkins provides three kinds of remote access API.
|
28
|
-
1. XML API, 2. JSON API, and 3. Python API. This project aims at consuming the
|
29
|
-
JSON API and provides some useful functions for controlling jobs on the Jenkins
|
30
|
-
programatically. Even though Jenkins provides an awesome UI for controlling
|
31
|
-
jobs, it would be nice and helpful to have a programmable interface so we can
|
32
|
-
dynamically and automatically manage jobs and other artifacts.
|
33
|
-
|
34
|
-
DETAILS:
|
35
|
-
--------
|
36
|
-
This projects currently only provides functionality for the
|
37
|
-
<tt>jobs, node, view, system, and build queue</tt> interfaces.
|
38
|
-
|
39
|
-
USAGE:
|
40
|
-
------
|
41
|
-
|
42
|
-
### Installation
|
43
|
-
|
44
|
-
Install jenkins_api_client by <tt>sudo gem install jenkins_api_client</tt>
|
45
|
-
Include this gem in your code as a require statement.
|
46
|
-
|
47
|
-
require 'jenkins_api_client'
|
48
|
-
|
49
|
-
### Using with IRB
|
50
|
-
|
51
|
-
If you want to just play with it and not actually want to write a script, you
|
52
|
-
can just use the irb launcher script which is available in
|
53
|
-
<tt>scripts/login_with_irb.rb</tt>. But make sure that you have your credentials
|
54
|
-
available in the correct location. By default the script assumes that you have
|
55
|
-
your credentials file in <tt>~/.jenkins_api_client/login.yml</tt>. If you don't
|
56
|
-
prefer this location and would like to use a different location, just modify
|
57
|
-
that script to point to the location where the credentials file exists.
|
58
|
-
|
59
|
-
ruby scripts/login_with_irb.rb
|
60
|
-
|
61
|
-
You will see the that it entered IRB session and you can play with the API
|
62
|
-
client with the <tt>@client</tt> object that it has returned.
|
63
|
-
|
64
|
-
### Authentication
|
65
|
-
|
66
|
-
Supplying credentials to the client is optional, as not all Jenkins instances
|
67
|
-
require authentication. This project supports two types of password-based
|
68
|
-
authentication. You can just you the plain password by using <tt>password</tt>
|
69
|
-
parameter. If you don't prefer leaving plain passwords in the credentials file,
|
70
|
-
you can encode your password in base64 format and use <tt>password_base64</tt>
|
71
|
-
parameter to specify the password either in the arguments or in the credentials
|
72
|
-
file. To use the client without credentials, just leave out the
|
73
|
-
<tt>username</tt> and <tt>password</tt> parameters. The <tt>password</tt>
|
74
|
-
parameter is only required if <tt>username</tt> is specified.
|
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
|
-
|
84
|
-
### Cross-site Scripting (XSS) and Crumb Support
|
85
|
-
|
86
|
-
Support for Jenkins crumbs has been added. These allow an application to
|
87
|
-
use the Jenkins API POST methods without requiring the 'Prevent Cross Site
|
88
|
-
Request Forgery exploits' to be disabled. The API will check in with the
|
89
|
-
Jenkins server to determine whether crumbs are enabled or not, and use them
|
90
|
-
if appropriate.
|
91
|
-
|
92
|
-
### Basic Usage
|
93
|
-
|
94
|
-
As discussed earlier, you can either specify all the credentials and server
|
95
|
-
information as parameters to the Client or have a credentials file and just
|
96
|
-
parse the yaml file and pass it in. The following call just passes the
|
97
|
-
information as parameters
|
98
|
-
|
99
|
-
```ruby
|
100
|
-
@client = JenkinsApi::Client.new(:server_ip => '0.0.0.0',
|
101
|
-
:username => 'somename', :password => 'secret password')
|
102
|
-
# The following call will return all jobs matching 'Testjob'
|
103
|
-
puts @client.job.list("^Testjob")
|
104
|
-
```
|
105
|
-
|
106
|
-
The following example passes the YAML file contents. An example yaml file is
|
107
|
-
located in <tt>config/login.yml.example</tt>.
|
108
|
-
|
109
|
-
```ruby
|
110
|
-
@client = JenkinsApi::Client.new(YAML.load_file(File.expand_path(
|
111
|
-
"~/.jenkins_api_client/login.yml", __FILE__)))
|
112
|
-
# The following call lists all jobs
|
113
|
-
puts @client.job.list_all
|
114
|
-
```
|
115
|
-
|
116
|
-
### Chaining and Building Jobs
|
117
|
-
|
118
|
-
Sometimes we want certain jobs to be added as downstream projects and run them
|
119
|
-
sequentially. The following example will explain how this could be done.
|
120
|
-
|
121
|
-
```ruby
|
122
|
-
require 'jenkins_api_client'
|
123
|
-
|
124
|
-
# We want to filter all jobs that start with 'test_job'
|
125
|
-
# Just write a regex to match all the jobs that start with 'test_job'
|
126
|
-
jobs_to_filter = "^test_job.*"
|
127
|
-
|
128
|
-
# Create an instance to jenkins_api_client
|
129
|
-
@client = JenkinsApi::Client.new(YAML.load_file(File.expand_path(
|
130
|
-
"~/.jenkins_api_client/login.yml", __FILE__)))
|
131
|
-
|
132
|
-
# Get a filtered list of jobs from the server
|
133
|
-
jobs = @client.job.list(jobs_to_filter)
|
134
|
-
|
135
|
-
# Chain all the jobs with 'success' as the threshold
|
136
|
-
# The chain method will return the jobs that is in the head of the sequence
|
137
|
-
# This method will also remove any existing chaining
|
138
|
-
initial_jobs = @client.job.chain(jobs, 'success', ["all"])
|
139
|
-
|
140
|
-
# Now that we have the initial job(s) we can build them
|
141
|
-
# The build function returns a code from the API which should be 201 if
|
142
|
-
# the build was successful, for Jenkins >= v1.519
|
143
|
-
# For versions older than v1.519, the success code is 302.
|
144
|
-
code = @client.job.build(initial_jobs[0])
|
145
|
-
raise "Could not build the job specified" unless code == '201'
|
146
|
-
```
|
147
|
-
|
148
|
-
In the above example, you might have noticed that the chain method returns an
|
149
|
-
array instead of a single job. There is a reason behind it. In simple chain,
|
150
|
-
such as the one in the example above, all jobs specified are chained one by
|
151
|
-
one. But in some cases they might not be dependent on the previous jobs and we
|
152
|
-
might want to run some jobs parallelly. We just have to specify that as a
|
153
|
-
parameter.
|
154
|
-
|
155
|
-
For example: <tt>parallel = 3</tt> in the parameter list to the <tt>chain</tt>
|
156
|
-
method will take the first three jobs and chain them with the next three jobs
|
157
|
-
and so forth till it reaches the end of the list.
|
158
|
-
|
159
|
-
There is another filter option you can specify for the method to take only
|
160
|
-
jobs that are in a particular state. In case if we want to build only jobs
|
161
|
-
that are failed or unstable, we can achieve that by passing in the states in
|
162
|
-
the third parameter. In the example above, we wanted build all jobs. If we just
|
163
|
-
want to build failed and unstable jobs, just pass
|
164
|
-
<tt>["failure", "unstable"]</tt>. Also if you pass in an empty array, it will
|
165
|
-
assume that you want to consider all jobs and no filtering will be performed.
|
166
|
-
|
167
|
-
There is another parameter called <tt>threshold</tt> you can specify for the
|
168
|
-
chaining and this is used to decide whether to move forward with the next job
|
169
|
-
in the chain or not. A <tt>success</tt> will move to the next job only if the
|
170
|
-
current build succeeds, <tt>failure</tt> will move to the next job even if the
|
171
|
-
build fails, and <tt>unstable</tt> will move to the job even if the build is
|
172
|
-
unstable.
|
173
|
-
|
174
|
-
The following call to the <tt>chain</tt> method will consider only failed and
|
175
|
-
unstable jobs, chain then with 'failure' as the threshold, and also chain three
|
176
|
-
jobs in parallel.
|
177
|
-
|
178
|
-
```ruby
|
179
|
-
initial_jobs = @client.job.chain(jobs, 'failure', ["failure", "unstable"], 3)
|
180
|
-
# We will receive three jobs as a result and we can build them all
|
181
|
-
initial_jobs.each do |job|
|
182
|
-
code = @client.job.build(job)
|
183
|
-
raise "Unable to build job: #{job}" unless code == '201'
|
184
|
-
end
|
185
|
-
```
|
186
|
-
|
187
|
-
### Configuring plugins
|
188
|
-
|
189
|
-
Given the abundance of plugins for Jenkins, we now provide a extensible way to
|
190
|
-
setup jobs and configure their plugins. Right now, the gem ships with the hipchat
|
191
|
-
plugin, with more plugins to follow in the future.
|
192
|
-
|
193
|
-
```ruby
|
194
|
-
hipchat_settings = JenkinsApi::Client::PluginSettings::Hipchat.new({
|
195
|
-
:room => '10000',
|
196
|
-
:start_notification => true,
|
197
|
-
:notify_success => true,
|
198
|
-
:notify_aborted => true,
|
199
|
-
:notify_not_built => true,
|
200
|
-
:notify_unstable => true,
|
201
|
-
:notify_failure => true,
|
202
|
-
:notify_back_to_normal => true,
|
203
|
-
})
|
204
|
-
|
205
|
-
client = JenkinsApi::Client.new(
|
206
|
-
server_url: jenkins_server,
|
207
|
-
username: username,
|
208
|
-
password: password
|
209
|
-
)
|
210
|
-
|
211
|
-
# NOTE: plugins can be splatted so if you had another plugin it could be passed
|
212
|
-
# to the new call below as another arg after hipchat
|
213
|
-
job = JenkinsApi::Client::Job.new(client, hipchat)
|
214
|
-
|
215
|
-
```
|
216
|
-
|
217
|
-
Writing your own plugins is also straightforward. Inherit from the
|
218
|
-
JenkinsApi::Client::PluginSettings::Base class and override the configure method.
|
219
|
-
Jenkins jobs are configured using xml so you just nee to figure out where in the
|
220
|
-
configuration to hook in your plugin settings.
|
221
|
-
|
222
|
-
Here is an example of a plugin written to configure a job for workspace cleanup.
|
223
|
-
|
224
|
-
```ruby
|
225
|
-
module JenkinsApi
|
226
|
-
class Client
|
227
|
-
module PluginSettings
|
228
|
-
class WorkspaceCleanup < Base
|
229
|
-
|
230
|
-
# @option params [Boolean] :delete_dirs (false)
|
231
|
-
# whether to also apply pattern on directories
|
232
|
-
# @option params [String] :cleanup_parameters
|
233
|
-
# @option params [String] :external_delete
|
234
|
-
def initialize(params={})
|
235
|
-
@params = params
|
236
|
-
end
|
237
|
-
|
238
|
-
# Create or Update a job with params given as a hash instead of the xml
|
239
|
-
# This gives some flexibility for creating/updating simple jobs so the
|
240
|
-
# user doesn't have to learn about handling xml.
|
241
|
-
#
|
242
|
-
# @param xml_doc [Nokogiri::XML::Document] xml document to be updated with
|
243
|
-
# the plugin configuration
|
244
|
-
#
|
245
|
-
# @return [Nokogiri::XML::Document]
|
246
|
-
def configure(xml_doc)
|
247
|
-
xml_doc.tap do |doc|
|
248
|
-
Nokogiri::XML::Builder.with(doc.at('buildWrappers')) do |build_wrappers|
|
249
|
-
build_wrappers.send('hudson.plugins.ws__cleanup.PreBuildCleanup') do |x|
|
250
|
-
x.deleteDirs @params.fetch(:delete_dirs) { false }
|
251
|
-
x.cleanupParameter @params.fetch(:cleanup_parameter) { '' }
|
252
|
-
x.externalDelete @params.fetch(:external_delete) { '' }
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
```
|
262
|
-
|
263
|
-
Currently, the skype plugin is still configured directly on the jenkins job. This will
|
264
|
-
likely be extracted into its own plugin in the near future, but we will maintain
|
265
|
-
backwards compatibility until after an official deprecation period.
|
266
|
-
|
267
|
-
### Waiting for a build to start/Getting the build number
|
268
|
-
Newer versions of Jenkins (starting with the 1.519 build) make it easier for
|
269
|
-
an application to determine the build number for a 'build' request. (previously
|
270
|
-
there would be a degree of guesswork involved). The new version actually
|
271
|
-
returns information allowing the jenkins_api_client to check the build queue
|
272
|
-
for the job and see if it has started yet (once it has started, the build-
|
273
|
-
number is available.
|
274
|
-
|
275
|
-
If you wish to take advantage of this hands-off approach, the build method
|
276
|
-
supports an additional 'opts' hash that lets you specify how long you wish to
|
277
|
-
wait for the build to start.
|
278
|
-
|
279
|
-
#### Old Jenkins vs New Jenkins (1.519+)
|
280
|
-
|
281
|
-
##### Old (v < 1.519)
|
282
|
-
The 'opts' parameter will work with older versions of Jenkins with the following
|
283
|
-
caveats:
|
284
|
-
* The 'cancel_on_build_start_timeout' option has no effect
|
285
|
-
* The build_number is calculated by calling 'current_build_number' and adding
|
286
|
-
1 before the build is started. This might break if there are multiple
|
287
|
-
entities running builds on the same job, or there are queued builds.
|
288
|
-
|
289
|
-
##### New (v >= 1.519)
|
290
|
-
* All options work, and build number is accurately determined from queue
|
291
|
-
info.
|
292
|
-
* The build trigger success code is now 201 (Created). Previously it was 302.
|
293
|
-
|
294
|
-
#### Initiating a build and returning the build_number
|
295
|
-
|
296
|
-
##### Minimum required
|
297
|
-
```ruby
|
298
|
-
# Minimum options required
|
299
|
-
opts = {'build_start_timeout' => 30}
|
300
|
-
@client.job.build(job_name, job_params || {}, opts)
|
301
|
-
```
|
302
|
-
This method will block for up to 30 seconds, while waiting for the build to
|
303
|
-
start. Instead of returning an http-status code, it will return the
|
304
|
-
build_number, or if the build has not started will raise 'Timeout::Error'
|
305
|
-
Note: to maintain legacy compatibility, passing 'true' will set the timeout
|
306
|
-
to the default timeout specified when creating the @client.
|
307
|
-
|
308
|
-
##### Auto cancel the queued-build on timeout
|
309
|
-
```ruby
|
310
|
-
# Wait for up to 30 seconds, attempt to cancel queued build
|
311
|
-
opts = {'build_start_timeout' => 30,
|
312
|
-
'cancel_on_build_start_timeout' => true}
|
313
|
-
@client.job.build(job_name, job_params || {}, opts)
|
314
|
-
```
|
315
|
-
This method will block for up to 30 seconds, while waiting for the build to
|
316
|
-
start. Instead of returning an http-status code, it will return the
|
317
|
-
build_number, or if the build has not started will raise 'Timeout::Error'.
|
318
|
-
Prior to raising the Timeout::Error, it will attempt to cancel the queued
|
319
|
-
build - thus preventing it from starting.
|
320
|
-
|
321
|
-
##### Getting some feedback while you're waiting
|
322
|
-
The opts parameter supports two values that can be assigned proc objects
|
323
|
-
(which will be 'call'ed). Both are optional, and will only be called if
|
324
|
-
specified in opts.
|
325
|
-
These are initially intended to assist with logging progress.
|
326
|
-
|
327
|
-
* 'progress_proc' - called when job is initially queued, and periodically
|
328
|
-
thereafter.
|
329
|
-
* max_wait - the value of 'build_start_timeout'
|
330
|
-
* current_wait - how long we've been waiting so far
|
331
|
-
* poll_count - how many times we've polled the queue
|
332
|
-
* 'completion_proc' - called just prior to return/Timeout::Error
|
333
|
-
* build_number - the build number assigned (or nil if timeout)
|
334
|
-
* cancelled - whether the build was cancelled (true if 'new' Jenkins
|
335
|
-
and it was able to cancel the build, false otherwise)
|
336
|
-
|
337
|
-
To use a class method, just specify 'instance.method(:method_name)', or
|
338
|
-
use a proc or lambda
|
339
|
-
|
340
|
-
```ruby
|
341
|
-
# Wait for up to 30 seconds, attempt to cancel queued build, progress
|
342
|
-
opts = {'build_start_timeout' => 30,
|
343
|
-
'cancel_on_build_start_timeout' => true,
|
344
|
-
'poll_interval' => 2, # 2 is actually the default :)
|
345
|
-
'progress_proc' => lambda {|max,curr,count| ... },
|
346
|
-
'completion_proc' => lambda {|build_number,cancelled| ... }}
|
347
|
-
@client.job.build(job_name, job_params || {}, opts)
|
348
|
-
```
|
349
|
-
### Running Jenkins CLI
|
350
|
-
To running [Jenkins CLI](https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI)
|
351
|
-
|
352
|
-
* authentication with username/password (deprecated)
|
353
|
-
|
354
|
-
```ruby
|
355
|
-
@client = JenkinsApi::Client.new(:server_ip => '127.0.0.1',
|
356
|
-
:username => 'somename', :password => 'secret password')
|
357
|
-
# The following call will return the version of Jenkins instance
|
358
|
-
puts @client.exec_cli("version")
|
359
|
-
```
|
360
|
-
|
361
|
-
* authentication with public/private key file
|
362
|
-
remember to upload the public key to:
|
363
|
-
|
364
|
-
`http://#{Server IP}:#{Server Port}/user/#{Username}/configure`
|
365
|
-
|
366
|
-
```ruby
|
367
|
-
@client = JenkinsApi::Client.new(:server_ip => '127.0.0.1',
|
368
|
-
:identity_file => '~/.ssh/id_rsa')
|
369
|
-
# The following call will return the version of Jenkins instance
|
370
|
-
puts @client.exec_cli("version")
|
371
|
-
```
|
372
|
-
|
373
|
-
Before you run the CLI, please make sure the following requirements are
|
374
|
-
fulfilled:
|
375
|
-
* JRE/JDK 6 (or above) is installed, and 'java' is on the $PATH environment
|
376
|
-
variable
|
377
|
-
* The ```jenkins_api_client/java_deps/jenkins-cli.jar``` is required as the
|
378
|
-
client to run the CLI. You can retrieve the available commands via accessing
|
379
|
-
the URL: ```http://<server>:<port>/cli```
|
380
|
-
* (Optional) required if you run the Groovy Script through CLI, make sure
|
381
|
-
the *user* have the privilige to run script
|
382
|
-
|
383
|
-
### Using with command line
|
384
|
-
Command line interface is supported only from version 0.2.0.
|
385
|
-
See help using <tt>jenkinscli help</tt>
|
386
|
-
|
387
|
-
There are three ways for authentication using command line interface
|
388
|
-
1. Passing all credentials and server information using command line parameters
|
389
|
-
2. Passing the credentials file as the command line parameter
|
390
|
-
3. Having the credentials file in the default location
|
391
|
-
<tt>HOME/.jenkins_api_client/login.yml</tt>
|
392
|
-
|
393
|
-
### Debug
|
394
|
-
|
395
|
-
As of v0.13.0, this debug parameter is removed. Use the logger instead. See the
|
396
|
-
next section for more information about this option.
|
397
|
-
|
398
|
-
### Logger
|
399
|
-
|
400
|
-
As of v0.13.0, support for logger is introduced. Since it would be nice to have
|
401
|
-
the activities of the jenkins_api_client in a log file, this feature is
|
402
|
-
implemented using the Ruby's standard Logger class. For using this feature,
|
403
|
-
there are two new input arguments used during the initialization of Client.
|
404
|
-
|
405
|
-
1. `:log_location` - This argument specifies the location for the log file. A
|
406
|
-
good location for linux based systems would be
|
407
|
-
'/var/log/jenkins_api_client.log'. The default for this values is STDOUT.
|
408
|
-
This will print the log messages on the console itself.
|
409
|
-
2. `:log_level` - This argument specifies the level of messages to be logged.
|
410
|
-
It should be one of Logger::DEBUG (0), Logger::INFO (1), Logger::WARN (2),
|
411
|
-
Logger::ERROR (3), Logger::FATAL (4). It can be specified either using the
|
412
|
-
constants available in the Logger class or using these integers provided
|
413
|
-
here. The default for this argument is Logger::INFO (1)
|
414
|
-
|
415
|
-
If you want customization on the functionality Logger provides such as leave n
|
416
|
-
old log files, open the log file in append mode, create your own logger and
|
417
|
-
then set that in the client.
|
418
|
-
|
419
|
-
#### Examples
|
420
|
-
|
421
|
-
```ruby
|
422
|
-
@client = JenkinsApi::Client.new(...)
|
423
|
-
# Create a logger which ages logfile once it reaches a certain size. Leave 10
|
424
|
-
# “old log files” and each file is about 1,024,000 bytes.
|
425
|
-
@client.logger = Logger.new('foo.log', 10, 1024000)
|
426
|
-
```
|
427
|
-
Please refer to [Ruby
|
428
|
-
Logger](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html)
|
429
|
-
for more information.
|
430
|
-
|
431
|
-
CONTRIBUTING:
|
432
|
-
-------------
|
433
|
-
|
434
|
-
If you would like to contribute to this project, just do the following:
|
435
|
-
|
436
|
-
1. Fork the repo on Github.
|
437
|
-
2. Add your features and make commits to your forked repo.
|
438
|
-
3. Make a pull request to this repo.
|
439
|
-
4. Review will be done and changes will be requested.
|
440
|
-
5. Once changes are done or no changes are required, pull request will be merged.
|
441
|
-
6. The next release will have your changes in it.
|
442
|
-
|
443
|
-
Please take a look at the issues page if you want to get started.
|
444
|
-
|
445
|
-
FEATURE REQUEST:
|
446
|
-
----------------
|
447
|
-
|
448
|
-
If you use this gem for your project and you think it would be nice to have a
|
449
|
-
particular feature that is presently not implemented, I would love to hear that
|
450
|
-
and consider working on it. Just open an issue in Github as a feature request.
|
451
|
-
|
452
|
-
|
453
|
-
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/arangamani/jenkins_api_client/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
454
|
-
|