jenkins_api_client 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,16 +30,28 @@ module JenkinsApi
30
30
  include Thor::Actions
31
31
 
32
32
  desc "list", "List jobs"
33
+ method_option :status, :aliases => "-t", :desc => "Status to filter"
33
34
  method_option :filter, :aliases => "-f", :desc => "Regular expression to filter jobs"
34
35
  def list
35
36
  @client = Helper.setup(parent_options)
36
- if options[:filter]
37
+ if options[:filter] && options[:status]
38
+ name_filtered = @client.job.list(options[:filter])
39
+ puts @client.job.list_by_status(options[:status], name_filtered)
40
+ elsif options[:filter]
37
41
  puts @client.job.list(options[:filter])
42
+ elsif options[:status]
43
+ puts @client.job.list_by_status(options[:status])
38
44
  else
39
45
  puts @client.job.list_all
40
46
  end
41
47
  end
42
48
 
49
+ desc "recreate JOB", "Recreate a specified job"
50
+ def recreate(job)
51
+ @client = Helper.setup(parent_options)
52
+ @client.job.recreate(job)
53
+ end
54
+
43
55
  desc "build JOB", "Build a job"
44
56
  def build(job)
45
57
  @client = Helper.setup(parent_options)
@@ -53,6 +53,17 @@ module JenkinsApi
53
53
  @client.api_post_request("/job/#{job_name}/doDelete")
54
54
  end
55
55
 
56
+ # Re-create the same job
57
+ # This is a hack to clear any existing builds
58
+ #
59
+ # @param [String] job_name
60
+ #
61
+ def recreate(job_name)
62
+ job_xml = get_config(job_name)
63
+ delete(job_name)
64
+ create(job_name, job_xml)
65
+ end
66
+
56
67
  # List all jobs on the Jenkins CI server
57
68
  #
58
69
  def list_all
@@ -64,6 +75,22 @@ module JenkinsApi
64
75
  jobs.sort!
65
76
  end
66
77
 
78
+ # List all Jobs matching the given status
79
+ # You can optionally pass in jobs list to filter the status from
80
+ #
81
+ # @param [String] status
82
+ # @param [Array] jobs
83
+ #
84
+ def list_by_status(status, jobs = [])
85
+ jobs = list_all if jobs.empty?
86
+ xml_response = @client.api_get_request("", "tree=jobs[name,color]")
87
+ filtered_jobs = []
88
+ xml_response["jobs"].each { |job|
89
+ filtered_jobs << job["name"] if color_to_status(job["color"]) == status && jobs.include?(job["name"])
90
+ }
91
+ filtered_jobs
92
+ end
93
+
67
94
  # List all jobs that match the given regex
68
95
  #
69
96
  # @param [String] filter - a regex
@@ -72,7 +72,7 @@ module JenkinsApi
72
72
  response = @client.get_root
73
73
  puts "[INFO] Waiting for jenkins to restart..." if @client.debug
74
74
  if (response.body =~ /Please wait while Jenkins is restarting/ || response.body =~ /Please wait while Jenkins is getting ready to work/)
75
- sleep 15
75
+ sleep 30
76
76
  redo
77
77
  else
78
78
  return true
@@ -24,7 +24,7 @@ module JenkinsApi
24
24
  class Client
25
25
  MAJOR = 0
26
26
  MINOR = 3
27
- TINY = 1
27
+ TINY = 2
28
28
  PRE = nil
29
29
  VERSION = [MAJOR, MINOR, TINY, PRE].compact.join('.')
30
30
  end
@@ -38,6 +38,10 @@ describe JenkinsApi::Client::Job do
38
38
  @client.job.create("some_random_nonexistent_job", xml).to_i.should == 200
39
39
  end
40
40
 
41
+ it "Should be able to re-create a job" do
42
+ @client.job.recreate("some_random_nonexistent_job").to_i.should == 200
43
+ end
44
+
41
45
  it "Should be able to change the description of a job" do
42
46
  @client.job.change_description("some_random_nonexistent_job", "The description has been changed by the spec test").to_i.should == 200
43
47
  end
@@ -58,6 +62,15 @@ describe JenkinsApi::Client::Job do
58
62
  }
59
63
  end
60
64
 
65
+ it "Should be able to list jobs by status" do
66
+ names = @client.job.list('success')
67
+ names.class.should == Array
68
+ names.each do |name|
69
+ status = @client.job.get_current_build_status(name)
70
+ status.should == 'success'
71
+ end
72
+ end
73
+
61
74
  it "Should return all job names with details" do
62
75
  @client.job.list_all_with_details.class.should == Array
63
76
  end
metadata CHANGED
@@ -1,189 +1,186 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 2
10
+ version: 0.3.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Kannan Manickam
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-11-11 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: nokogiri
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
17
+
18
+ date: 2012-11-18 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
23
21
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: activesupport
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 3.2.8
38
22
  type: :runtime
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ version_requirements: *id001
33
+ name: nokogiri
34
+ - !ruby/object:Gem::Dependency
39
35
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
36
+ type: :runtime
37
+ requirement: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
- requirements:
39
+ requirements:
43
40
  - - ~>
44
- - !ruby/object:Gem::Version
41
+ - !ruby/object:Gem::Version
42
+ hash: 31
43
+ segments:
44
+ - 3
45
+ - 2
46
+ - 8
45
47
  version: 3.2.8
46
- - !ruby/object:Gem::Dependency
47
- name: thor
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 0.16.0
54
- type: :runtime
48
+ version_requirements: *id002
49
+ name: activesupport
50
+ - !ruby/object:Gem::Dependency
55
51
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
52
+ type: :runtime
53
+ requirement: &id003 !ruby/object:Gem::Requirement
57
54
  none: false
58
- requirements:
55
+ requirements:
59
56
  - - ~>
60
- - !ruby/object:Gem::Version
57
+ - !ruby/object:Gem::Version
58
+ hash: 95
59
+ segments:
60
+ - 0
61
+ - 16
62
+ - 0
61
63
  version: 0.16.0
62
- - !ruby/object:Gem::Dependency
63
- name: json
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
64
+ version_requirements: *id003
65
+ name: thor
66
+ - !ruby/object:Gem::Dependency
71
67
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: terminal-table
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: 1.4.0
86
68
  type: :runtime
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ version_requirements: *id004
79
+ name: json
80
+ - !ruby/object:Gem::Dependency
87
81
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
82
+ type: :runtime
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 7
89
+ segments:
90
+ - 1
91
+ - 4
92
+ - 0
93
93
  version: 1.4.0
94
- - !ruby/object:Gem::Dependency
95
- name: bundler
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '1.0'
102
- type: :development
94
+ version_requirements: *id005
95
+ name: terminal-table
96
+ - !ruby/object:Gem::Dependency
103
97
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '1.0'
110
- - !ruby/object:Gem::Dependency
111
- name: jeweler
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: 1.6.4
118
98
  type: :development
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 15
105
+ segments:
106
+ - 1
107
+ - 0
108
+ version: "1.0"
109
+ version_requirements: *id006
110
+ name: bundler
111
+ - !ruby/object:Gem::Dependency
119
112
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: 1.6.4
126
- - !ruby/object:Gem::Dependency
127
- name: builder
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ~>
132
- - !ruby/object:Gem::Version
133
- version: 3.1.3
134
113
  type: :development
114
+ requirement: &id007 !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 7
120
+ segments:
121
+ - 1
122
+ - 6
123
+ - 4
124
+ version: 1.6.4
125
+ version_requirements: *id007
126
+ name: jeweler
127
+ - !ruby/object:Gem::Dependency
135
128
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
129
+ type: :development
130
+ requirement: &id008 !ruby/object:Gem::Requirement
137
131
  none: false
138
- requirements:
132
+ requirements:
139
133
  - - ~>
140
- - !ruby/object:Gem::Version
134
+ - !ruby/object:Gem::Version
135
+ hash: 5
136
+ segments:
137
+ - 3
138
+ - 1
139
+ - 3
141
140
  version: 3.1.3
142
- - !ruby/object:Gem::Dependency
143
- name: simplecov
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
150
- type: :development
141
+ version_requirements: *id008
142
+ name: builder
143
+ - !ruby/object:Gem::Dependency
151
144
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: rspec
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
145
  type: :development
146
+ requirement: &id009 !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 3
152
+ segments:
153
+ - 0
154
+ version: "0"
155
+ version_requirements: *id009
156
+ name: simplecov
157
+ - !ruby/object:Gem::Dependency
167
158
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- description: ! '
175
-
159
+ type: :development
160
+ requirement: &id010 !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ hash: 3
166
+ segments:
167
+ - 0
168
+ version: "0"
169
+ version_requirements: *id010
170
+ name: rspec
171
+ description: |-
172
+
176
173
  This is a simple and easy-to-use Jenkins Api client with features focused on
177
-
178
- automating Job configuration programaticaly and so forth'
179
- email:
174
+ automating Job configuration programaticaly and so forth
175
+ email:
180
176
  - arangamani.kannan@gmail.com
181
- executables:
177
+ executables:
182
178
  - jenkinscli
183
179
  extensions: []
184
- extra_rdoc_files:
180
+
181
+ extra_rdoc_files:
185
182
  - CHANGELOG.rdoc
186
- files:
183
+ files:
187
184
  - .gitignore
188
185
  - .travis.yml
189
186
  - CHANGELOG.rdoc
@@ -213,29 +210,36 @@ files:
213
210
  - spec/system_spec.rb
214
211
  homepage: https://github.com/arangamani/jenkins_api_client
215
212
  licenses: []
213
+
216
214
  post_install_message:
217
215
  rdoc_options: []
218
- require_paths:
216
+
217
+ require_paths:
219
218
  - lib
220
- required_ruby_version: !ruby/object:Gem::Requirement
219
+ required_ruby_version: !ruby/object:Gem::Requirement
221
220
  none: false
222
- requirements:
223
- - - ! '>='
224
- - !ruby/object:Gem::Version
225
- version: '0'
226
- segments:
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ hash: 3
225
+ segments:
227
226
  - 0
228
- hash: -2953561023250567894
229
- required_rubygems_version: !ruby/object:Gem::Requirement
227
+ version: "0"
228
+ required_rubygems_version: !ruby/object:Gem::Requirement
230
229
  none: false
231
- requirements:
232
- - - ! '>='
233
- - !ruby/object:Gem::Version
234
- version: '0'
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ hash: 3
234
+ segments:
235
+ - 0
236
+ version: "0"
235
237
  requirements: []
238
+
236
239
  rubyforge_project:
237
240
  rubygems_version: 1.8.24
238
241
  signing_key:
239
242
  specification_version: 3
240
243
  summary: Jenkins JSON API Client
241
244
  test_files: []
245
+