jenkins_api_client 0.5.0 → 0.6.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
@@ -6,7 +6,8 @@ before_install:
6
6
  - sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
7
7
  - sudo apt-get update -qq
8
8
  - sudo apt-get install -qq jenkins
9
- - echo `service jenkins status`
9
+ - echo `sudo service jenkins status`
10
+ - cat /var/log/jenkins/jenkins.log
10
11
  - echo `curl 10.0.2.15:8080`
11
12
  - echo `curl 10.0.2.15`
12
13
  - echo `curl localhost:8080`
@@ -1,41 +1,58 @@
1
- = CHANGELOG
1
+ CHANGELOG
2
+ =========
2
3
 
3
- ===== v0.5.0 [22-DEC-2012]
4
+ v0.6.0
5
+ ------
6
+ * Added functionality to get progressive console output from Jenkins.
7
+ * Added CLI command `console` for printing progressive console output on terminal.
8
+ * Fixed a bug with `get_current_build_number` not returning the recent running build number.
9
+
10
+ v0.5.0 [22-DEC-2012]
11
+ ---------------------
4
12
  * Added functionality to create jobs with params.
5
13
  * Added View class and added methods accessing List Views of Jenkins server.
6
14
  * Added functionality to abort a running job.
7
- * Deprecated list_running of Job class. list_by_status('running') is suggested.
15
+ * Deprecated `list_running` of Job class. `list_by_status('running')` is suggested.
8
16
 
9
- ===== v0.4.0 [07-DEC-2012]
17
+ v0.4.0 [07-DEC-2012]
18
+ ---------------------
10
19
  * Added some methods for handling jobs.
11
- * The status 'not run' is not returned as 'not_run' from job status.
20
+ * The status `not run` is not returned as `not_run` from job status.
12
21
 
13
- ===== v0.3.2 [17-NOV-2012]
22
+ v0.3.2 [17-NOV-2012]
23
+ ---------------------
14
24
  * Added some new methods for Job class
15
25
 
16
- ===== v0.3.1 [11-NOV-2012]
26
+ v0.3.1 [11-NOV-2012]
27
+ ---------------------
17
28
  * Removed unnecessary debug statements
18
29
 
19
- ===== v0.3.0 [11-NOV-2012]
30
+ v0.3.0 [11-NOV-2012]
31
+ ---------------------
20
32
  * Added System class to support quietdown and restart functionality.
21
33
  * Added Node class to query the node interface of Jenkins server.
22
34
  * Added Command line interface for System and Node class.
23
35
  * Introduced terminal tables for displaying attributes in command line.
24
36
 
25
- ===== v0.2.1 [02-NOV-2012]
37
+ v0.2.1 [02-NOV-2012]
38
+ ---------------------
26
39
  * Added command line interface for basic operations
27
40
 
28
- ===== v0.1.1 [30-OCT-2012]
41
+ v0.1.1 [30-OCT-2012]
42
+ ---------------------
29
43
  * Updated gem dependencies to work with Ruby 1.8.7
30
44
 
31
- ===== v0.1.0 [26-OCT-2012]
45
+ v0.1.0 [26-OCT-2012]
46
+ ---------------------
32
47
  * Improved performance
33
48
  * Added job create feature, delete feature, chaining feature, and build feature
34
49
  * Added exception handling mechanism
35
50
 
36
- ===== v0.0.2 [16-OCT-2012]
51
+ v0.0.2 [16-OCT-2012]
52
+ ---------------------
37
53
  * Added documentation
38
54
  * Added some more smal features to Job class
39
55
 
40
- ===== v0.0.1 [15-OCT-2012]
56
+ v0.0.1 [15-OCT-2012]
57
+ ---------------------
41
58
  * Initial Release
@@ -76,6 +76,30 @@ module JenkinsApi
76
76
  puts @client.job.delete(job)
77
77
  end
78
78
 
79
+ desc "console JOB", "Print the progressive console output of a job"
80
+ method_option :sleep, :aliases => "-z", :desc => "Time to wait between querying the API for console output"
81
+ def console(job)
82
+ @client = Helper.setup(parent_options)
83
+ # If debug is enabled, disable it. It shouldn't interfere with console output.
84
+ debug_changed = false
85
+ if @client.debug == true
86
+ @client.debug = false
87
+ debug_changed = true
88
+ end
89
+
90
+ # Print progressive console output
91
+ response = @client.job.get_console_output(job)
92
+ puts response['output'] unless response['more']
93
+ while response['more']
94
+ size = response['size']
95
+ puts response['output'] unless response['output'].chomp.empty?
96
+ sleep options[:sleep].to_i if options[:sleep]
97
+ response = @client.job.get_console_output(job, 0, size)
98
+ end
99
+ # Change the debug back if we changed it now
100
+ @client.toggle_debug if debug_changed
101
+ end
102
+
79
103
  desc "restrict JOB", "Restricts a job to a specific node"
80
104
  method_option :node, :aliases => "-n", :desc => "Node to be restricted to"
81
105
  def restrict(job)
@@ -112,16 +112,20 @@ module JenkinsApi
112
112
  #
113
113
  # @param [String] url_prefix
114
114
  #
115
- def api_get_request(url_prefix, tree = nil)
115
+ def api_get_request(url_prefix, tree = nil, url_suffix ="/api/json")
116
116
  http = Net::HTTP.start(@server_ip, @server_port)
117
- request = Net::HTTP::Get.new("#{url_prefix}/api/json")
118
- puts "[INFO] GET #{url_prefix}/api/json" if @debug
119
- request = Net::HTTP::Get.new("#{url_prefix}/api/json?#{tree}") if tree
117
+ request = Net::HTTP::Get.new("#{url_prefix}#{url_suffix}")
118
+ puts "[INFO] GET #{url_prefix}#{url_suffix}" if @debug
119
+ request = Net::HTTP::Get.new("#{url_prefix}#{url_suffix}?#{tree}") if tree
120
120
  request.basic_auth @username, @password
121
121
  response = http.request(request)
122
122
  case response.code.to_i
123
123
  when 200
124
- return JSON.parse(response.body)
124
+ if url_suffix =~ /json/
125
+ return JSON.parse(response.body)
126
+ else
127
+ return response
128
+ end
125
129
  when 401
126
130
  raise Exceptions::UnautherizedException.new("HTTP Code: #{response.code.to_s}, Response Body: #{response.body}")
127
131
  when 404
@@ -215,6 +215,41 @@ module JenkinsApi
215
215
  create(job_name, job_xml)
216
216
  end
217
217
 
218
+ # Get progressive console output from Jenkins server for a job
219
+ #
220
+ # @param [String] job_name Name of the Jenkins job
221
+ # @param [Number] build_number Specific build number to obtain the console output from. Default is the recent build
222
+ # @param [Number] start start offset to get only a portion of the text
223
+ # @param [String] mode Mode of text output. 'text' or 'html'
224
+ #
225
+ # @return [Hash] response
226
+ # * +output+ Console output of the job
227
+ # * +size+ Size of the text. This can be used as 'start' for the next call to get progressive output
228
+ # * +more+ More data available for the job. 'true' if available and nil otherwise
229
+ #
230
+ def get_console_output(job_name, build_number = 0, start = 0, mode = 'text')
231
+ build_number = get_current_build_number(job_name) if build_number == 0
232
+ if build_number == 0
233
+ puts "No builds for this job '#{job_name}' yet."
234
+ return nil
235
+ end
236
+ if mode == 'text'
237
+ mode = 'Text'
238
+ elsif mode == 'html'
239
+ mode = 'Html'
240
+ else
241
+ raise "Mode should either be 'text' or 'html'. You gave: #{mode}"
242
+ end
243
+ api_response = @client.api_get_request("/job/#{job_name}/#{build_number}/logText/progressive#{mode}?start=#{start}", nil, nil)
244
+ #puts "Response: #{api_response.header['x-more-data']}"
245
+ response = {}
246
+ response['output'] = api_response.body
247
+ response['size'] = api_response.header['x-text-size']
248
+ response['more'] = api_response.header['x-more-data']
249
+
250
+ response
251
+ end
252
+
218
253
  # List all jobs on the Jenkins CI server
219
254
  #
220
255
  def list_all
@@ -348,8 +383,7 @@ module JenkinsApi
348
383
  # @param [String] job_name
349
384
  #
350
385
  def get_current_build_number(job_name)
351
- builds = get_builds(job_name)
352
- builds.length > 0 ? builds.first["number"] : nil
386
+ @client.api_get_request("/job/#{job_name}")['nextBuildNumber'] - 1
353
387
  end
354
388
 
355
389
  # This functions lists all jobs that are currently running on the Jenkins CI server
@@ -23,7 +23,7 @@
23
23
  module JenkinsApi
24
24
  class Client
25
25
  MAJOR = 0
26
- MINOR = 5
26
+ MINOR = 6
27
27
  TINY = 0
28
28
  PRE = nil
29
29
  VERSION = [MAJOR, MINOR, TINY, PRE].compact.join('.')
data/spec/job_spec.rb CHANGED
@@ -117,16 +117,16 @@ describe JenkinsApi::Client::Job do
117
117
  end
118
118
  end
119
119
 
120
- # it "Should be able to abort a recent build of a running job" do
121
- # @client.job.get_current_build_status(@job_name).should_not == "running"
122
- # @client.job.build(@job_name)
123
- # sleep 20
124
- # @client.job.get_current_build_status(@job_name).should == "running"
125
- # sleep 20
126
- # @client.job.stop_build(@job_name).should == 302
127
- # sleep 20
128
- # @client.job.get_current_build_status(@job_name).should == "aborted"
129
- # end
120
+ it "Should be able to abort a recent build of a running job" do
121
+ @client.job.get_current_build_status(@job_name).should_not == "running"
122
+ @client.job.build(@job_name)
123
+ sleep 20
124
+ @client.job.get_current_build_status(@job_name).should == "running"
125
+ sleep 20
126
+ @client.job.stop_build(@job_name).should.to_i == 302
127
+ sleep 20
128
+ @client.job.get_current_build_status(@job_name).should == "aborted"
129
+ end
130
130
 
131
131
  it "Should be able to restrict a job to a node" do
132
132
  @client.job.restrict_to_node(@job_name, 'master').to_i.should == 200
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-22 00:00:00.000000000 Z
12
+ date: 2013-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -181,12 +181,11 @@ email:
181
181
  executables:
182
182
  - jenkinscli
183
183
  extensions: []
184
- extra_rdoc_files:
185
- - CHANGELOG.rdoc
184
+ extra_rdoc_files: []
186
185
  files:
187
186
  - .gitignore
188
187
  - .travis.yml
189
- - CHANGELOG.rdoc
188
+ - CHANGELOG.md
190
189
  - Gemfile
191
190
  - LICENCE
192
191
  - README.md