jenkins 0.6.6 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.8 - 2011/12/30
4
+
5
+ * re-releasing 0.6.7 which failed to register in RubyGems.org
6
+
3
7
  ## 0.6.4 - 2011/04/13
4
8
 
5
9
  * change from json to json_pure
@@ -94,6 +94,54 @@ Feature: Create and manage jobs
94
94
  </scm>
95
95
  """
96
96
 
97
+ Scenario: Update the SCM configuration of an existing jenkins job (jenkins update . --scm URI --scm-branches='master')
98
+ Given I am in the "ruby" project folder
99
+ And the project uses "git" scm
100
+ And I run local executable "jenkins" with arguments "create . --scm git://localhost/myapp.git --scm-branches 'master,other' --host localhost --port 3010"
101
+ Then I should see "Added ruby project 'ruby' to Jenkins."
102
+ And I run local executable "jenkins" with arguments "update . --scm git://localhost/myapp_new.git --scm-branches 'master' --host localhost --port 3010"
103
+ Then I should see "Updated ruby project 'ruby'."
104
+ And the job "ruby" config "scm" should be:
105
+ """
106
+ <scm class="hudson.plugins.git.GitSCM">
107
+ <configVersion>1</configVersion>
108
+ <remoteRepositories>
109
+ <org.spearce.jgit.transport.RemoteConfig>
110
+ <string>origin</string>
111
+ <int>5</int>
112
+ <string>fetch</string>
113
+ <string>+refs/heads/*:refs/remotes/origin/*</string>
114
+ <string>receivepack</string>
115
+ <string>git-upload-pack</string>
116
+ <string>uploadpack</string>
117
+ <string>git-upload-pack</string>
118
+ <string>url</string>
119
+ <string>git://localhost/myapp_new.git</string>
120
+ <string>tagopt</string>
121
+ <string />
122
+ </org.spearce.jgit.transport.RemoteConfig>
123
+ </remoteRepositories>
124
+ <branches>
125
+ <hudson.plugins.git.BranchSpec>
126
+ <name>master</name>
127
+ </hudson.plugins.git.BranchSpec>
128
+ </branches>
129
+ <localBranch />
130
+ <mergeOptions />
131
+ <recursiveSubmodules>false</recursiveSubmodules>
132
+ <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
133
+ <authorOrCommitter>false</authorOrCommitter>
134
+ <clean>false</clean>
135
+ <wipeOutWorkspace>false</wipeOutWorkspace>
136
+ <buildChooser class="hudson.plugins.git.util.DefaultBuildChooser" />
137
+ <gitTool>Default</gitTool>
138
+ <submoduleCfg class="list" />
139
+ <relativeTargetDir />
140
+ <excludedRegions />
141
+ <excludedUsers />
142
+ </scm>
143
+ """
144
+
97
145
  Scenario: Setup jenkins job with multiple rubies (jenkins create --rubies '1.8.7,rbx-head,jruby')
98
146
  Given I am in the "ruby" project folder
99
147
  And the project uses "git" scm
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency("hpricot")
27
27
  s.add_dependency("json_pure", ">= 1.5.1")
28
28
 
29
- s.add_development_dependency("jenkins-war", ">= 1.396")
29
+ s.add_development_dependency "jenkins-war", ">= 1.396"
30
30
  s.add_development_dependency "rake"
31
31
  s.add_development_dependency "cucumber", "~> 1.0"
32
32
  s.add_development_dependency "rspec", "~> 2.0"
@@ -75,17 +75,7 @@ module Jenkins
75
75
  cache_configuration!
76
76
  true
77
77
  else
78
- require "hpricot"
79
- doc = Hpricot(res.body)
80
- error_msg = doc.search("td#main-panel p")
81
- unless error_msg.inner_text.blank?
82
- $stderr.puts error_msg.inner_text
83
- else
84
- # TODO - what are the errors we get?
85
- puts "Server error:"
86
- p res.code
87
- puts res.body
88
- end
78
+ show_me_the_error(res)
89
79
  false
90
80
  end
91
81
  rescue REXML::ParseException => e
@@ -94,6 +84,25 @@ module Jenkins
94
84
  end
95
85
  end
96
86
 
87
+ # returns true if successfully updated a job on Jenkins
88
+ # +job_config+ is a Jenkins::JobConfigBuilder instance
89
+ #
90
+ # returns true if successful, else false
91
+ #
92
+ # TODO Exceptions?
93
+ def self.update_job(name, job_config)
94
+ res = post "#{job_url name}/config.xml", {
95
+ :body => job_config.to_xml, :format => :xml, :headers => { 'content-type' => 'application/xml' }
96
+ }
97
+ if res.code.to_i == 200
98
+ cache_configuration!
99
+ true
100
+ else
101
+ show_me_the_error(res)
102
+ false
103
+ end
104
+ end
105
+
97
106
  # Attempts to delete a job +name+
98
107
  def self.delete_job(name)
99
108
  res = post_plain "#{job_url name}/doDelete"
@@ -279,7 +288,21 @@ module Jenkins
279
288
  end
280
289
 
281
290
  def self.job_url(name)
282
- "#{base_uri}/job/#{name}"
291
+ "#{base_uri}/job/#{URI.escape(name)}"
292
+ end
293
+
294
+ def self.show_me_the_error(response)
295
+ require "hpricot"
296
+ doc = Hpricot(response.body)
297
+ error_msg = doc.search("td#main-panel p")
298
+ unless error_msg.inner_text.blank?
299
+ $stderr.puts error_msg.inner_text
300
+ else
301
+ # TODO - what are the errors we get?
302
+ puts "Server error:"
303
+ p response.code
304
+ puts response.body
305
+ end
283
306
  end
284
307
  end
285
308
  end
@@ -50,42 +50,62 @@ module Jenkins
50
50
  def create(project_path)
51
51
  select_jenkins_server(options)
52
52
  FileUtils.chdir(project_path) do
53
- unless scm = Jenkins::ProjectScm.discover(options[:scm])
54
- error "Cannot determine project SCM. Currently supported: #{Jenkins::ProjectScm.supported}"
55
- end
56
- unless (options[:template] == "none" || options[:template] == "erlang" || options[:"no-template"]) || File.exists?("Gemfile")
57
- error "Ruby/Rails projects without a Gemfile are currently unsupported."
58
- end
53
+ scm = discover_scm(options)
54
+ ruby_or_rails_project_without_gemfile?(options)
59
55
  begin
60
56
  template = options[:"no-template"] ? 'none' : options[:template]
61
- job_config = Jenkins::JobConfigBuilder.new(template) do |c|
62
- c.rubies = options[:rubies].split(/\s*,\s*/) if options[:rubies]
63
- c.node_labels = options[:"node-labels"].split(/\s*,\s*/) if options[:"node-labels"]
64
- c.scm = scm.url
65
- c.scm_branches = options[:"scm-branches"].split(/\s*,\s*/)
66
- c.assigned_node = options[:"assigned-node"] if options[:"assigned-node"]
67
- c.public_scm = options[:"public-scm"]
68
- end
69
- name = File.basename(FileUtils.pwd)
70
- if Jenkins::Api.create_job(name, job_config, options)
71
- build_url = "#{@uri}/job/#{name.gsub(/\s/,'%20')}/build"
72
- shell.say "Added#{' ' + template unless template == 'none'} project '#{name}' to Jenkins.", :green
57
+ job_config = build_job_config(scm, template, options)
58
+
59
+ if Jenkins::Api.create_job(project_name, job_config, options)
60
+ build_url = "#{@uri}/job/#{project_name.gsub(/\s/,'%20')}/build"
61
+ shell.say "Added#{' ' + template unless template == 'none'} project '#{project_name}' to Jenkins.", :green
73
62
  unless options[:"no-build"]
74
63
  shell.say "Triggering initial build..."
75
- Jenkins::Api.build_job(name)
64
+ Jenkins::Api.build_job(project_name)
76
65
  shell.say "Trigger additional builds via:"
77
66
  else
78
67
  shell.say "Trigger builds via:"
79
68
  end
80
69
  shell.say " URL: "; shell.say "#{build_url}", :yellow
81
- shell.say " CLI: "; shell.say "#{cmd} build #{name}", :yellow
70
+ shell.say " CLI: "; shell.say "#{cmd} build #{project_name}", :yellow
82
71
  else
83
- error "Failed to create project '#{name}'"
72
+ error "Failed to create project '#{project_name}'"
84
73
  end
85
74
  rescue Jenkins::JobConfigBuilder::InvalidTemplate
86
75
  error "Invalid job template '#{template}'."
87
76
  rescue Jenkins::Api::JobAlreadyExistsError
88
- error "Job '#{name}' already exists."
77
+ error "Job '#{project_name}' already exists."
78
+ end
79
+ end
80
+ end
81
+
82
+ desc "update project_path [options]", "update the configuration for your project"
83
+ common_options
84
+ method_option :rubies, :desc => "run tests against multiple explicit rubies via RVM", :type => :string
85
+ method_option :"node-labels", :desc => "run tests against multiple slave nodes by their label (comma separated)"
86
+ method_option :"assigned-node", :desc => "only use slave nodes with this label (similar to --node-labels)"
87
+ method_option :"no-build", :desc => "create job without initial build", :type => :boolean, :default => false
88
+ method_option :"scm", :desc => "specific SCM URI", :type => :string
89
+ method_option :"scm-branches", :desc => "list of branches to build from (comma separated)", :type => :string, :default => "master"
90
+ method_option :"public-scm", :desc => "use public scm URL", :type => :boolean, :default => false
91
+ method_option :template, :desc => "template of job steps (available: #{JobConfigBuilder::VALID_JOB_TEMPLATES.join ','})", :default => 'ruby'
92
+ method_option :"no-template", :desc => "do not use a template of default steps; avoids Gemfile requirement", :type => :boolean, :default => false
93
+ def update(project_path)
94
+ select_jenkins_server(options)
95
+ FileUtils.chdir(project_path) do
96
+ scm = discover_scm(options)
97
+ ruby_or_rails_project_without_gemfile?(options)
98
+ begin
99
+ template = options[:"no-template"] ? 'none' : options[:template]
100
+ job_config = build_job_config(scm, template, options)
101
+
102
+ if Jenkins::Api.update_job(project_name, job_config)
103
+ shell.say "Updated#{' ' + template unless template == 'none'} project '#{project_name}'.", :green
104
+ else
105
+ error "Failed to update project '#{project_name}'"
106
+ end
107
+ rescue Jenkins::JobConfigBuilder::InvalidTemplate
108
+ error "Invalid job template '#{template}'."
89
109
  end
90
110
  end
91
111
  end
@@ -95,11 +115,10 @@ module Jenkins
95
115
  def build(project_path = ".")
96
116
  select_jenkins_server(options)
97
117
  FileUtils.chdir(project_path) do
98
- name = File.basename(FileUtils.pwd)
99
- if Jenkins::Api.build_job(name)
100
- shell.say "Build for '#{name}' running now..."
118
+ if Jenkins::Api.build_job(project_name)
119
+ shell.say "Build for '#{project_name}' running now..."
101
120
  else
102
- error "No job '#{name}' on server."
121
+ error "No job '#{project_name}' on server."
103
122
  end
104
123
  end
105
124
  end
@@ -109,11 +128,10 @@ module Jenkins
109
128
  def remove(project_path)
110
129
  select_jenkins_server(options)
111
130
  FileUtils.chdir(project_path) do
112
- name = File.basename(FileUtils.pwd)
113
- if Jenkins::Api.delete_job(name)
114
- shell.say "Removed project '#{name}' from Jenkins."
131
+ if Jenkins::Api.delete_job(project_name)
132
+ shell.say "Removed project '#{project_name}' from Jenkins."
115
133
  else
116
- error "Failed to delete project '#{name}'."
134
+ error "Failed to delete project '#{project_name}'."
117
135
  end
118
136
  end
119
137
  end
@@ -298,5 +316,33 @@ USEAGE
298
316
  def cmd
299
317
  ENV['CUCUMBER_RUNNING'] ? 'jenkins' : $0
300
318
  end
319
+
320
+ def project_name
321
+ @project_name ||= File.basename(FileUtils.pwd)
322
+ end
323
+
324
+ def build_job_config(scm, template, options)
325
+ Jenkins::JobConfigBuilder.new(template) do |c|
326
+ c.rubies = options[:rubies].split(/\s*,\s*/) if options[:rubies]
327
+ c.node_labels = options[:"node-labels"].split(/\s*,\s*/) if options[:"node-labels"]
328
+ c.scm = scm.url
329
+ c.scm_branches = options[:"scm-branches"].split(/\s*,\s*/)
330
+ c.assigned_node = options[:"assigned-node"] if options[:"assigned-node"]
331
+ c.public_scm = options[:"public-scm"]
332
+ end
333
+ end
334
+
335
+ def ruby_or_rails_project_without_gemfile?(options)
336
+ unless (options[:template] == "none" || options[:template] == "erlang" || options[:"no-template"]) || File.exists?("Gemfile")
337
+ error "Ruby/Rails projects without a Gemfile are currently unsupported."
338
+ end
339
+ end
340
+
341
+ def discover_scm(options)
342
+ unless scm = Jenkins::ProjectScm.discover(options[:scm])
343
+ error "Cannot determine project SCM. Currently supported: #{Jenkins::ProjectScm.supported}"
344
+ end
345
+ scm
346
+ end
301
347
  end
302
348
  end
@@ -4,14 +4,21 @@ module Jenkins
4
4
  class JobConfigBuilder
5
5
  attr_accessor :job_type
6
6
  attr_accessor :steps, :rubies
7
+ attr_accessor :triggers
8
+ attr_accessor :publishers
9
+ attr_accessor :log_rotate
7
10
  attr_accessor :scm, :public_scm, :scm_branches
8
- attr_accessor :scm, :public_scm, :git_branches
9
11
  attr_accessor :assigned_node, :node_labels # TODO just one of these
10
12
  attr_accessor :envfile
11
13
 
12
14
  InvalidTemplate = Class.new(StandardError)
13
15
 
14
16
  VALID_JOB_TEMPLATES = %w[none rails rails3 ruby rubygem erlang]
17
+ JOB_TRIGGER_THRESHOLDS = {
18
+ "SUCCESS" => {:ordinal => 0, :color => "BLUE"},
19
+ "UNSTABLE" => {:ordinal => 1, :color => "YELLOW"},
20
+ "FAILURE" => {:ordinal => 2, :color => "RED"}
21
+ }
15
22
 
16
23
  # +job_type+ - template of default steps to create with the job
17
24
  # +steps+ - array of [:method, cmd], e.g. [:build_shell_step, "bundle initial"]
@@ -20,7 +27,10 @@ module Jenkins
20
27
  # +public_scm+ - convert the +scm+ URL to a publicly accessible URL for the Jenkins job config.
21
28
  # +scm_branches+ - array of branches to run builds. Default: ['master']
22
29
  # +rubies+ - list of RVM rubies to run tests (via Jenkins Axes).
30
+ # +triggers+ - list of triggers to start the build. Currently only support time triggers
23
31
  # +assigned_node+ - restrict this job to running on slaves with these labels (space separated)
32
+ # +publishers+ - define publishers to be performed after a build
33
+ # +log_rotate+ - define log rotation
24
34
  def initialize(job_type = :ruby, &block)
25
35
  self.job_type = job_type.to_s if job_type
26
36
 
@@ -36,6 +46,7 @@ module Jenkins
36
46
  b.tag!(matrix_project? ? "matrix-project" : "project") do
37
47
  b.actions
38
48
  b.description
49
+ build_log_rotator b
39
50
  b.keepDependencies false
40
51
  b.properties
41
52
  build_scm b
@@ -43,11 +54,11 @@ module Jenkins
43
54
  b.canRoam !assigned_node
44
55
  b.disabled false
45
56
  b.blockBuildWhenUpstreamBuilding false
46
- b.triggers :class => "vector"
57
+ build_triggers b
47
58
  b.concurrentBuild false
48
59
  build_axes b if matrix_project?
49
60
  build_steps b
50
- b.publishers
61
+ build_publishers b
51
62
  build_wrappers b
52
63
  b.runSequentially false if matrix_project?
53
64
  end
@@ -174,6 +185,100 @@ module Jenkins
174
185
  b.buildWrappers
175
186
  end
176
187
  end
188
+
189
+ # Example
190
+ # <triggers class="vector">
191
+ # <hudson.triggers.TimerTrigger>
192
+ # <spec>* * * * *</spec>
193
+ # </hudson.triggers.TimerTrigger>
194
+ # </triggers>
195
+ def build_triggers(b)
196
+ if triggers
197
+ b.triggers :class => "vector" do
198
+ triggers.each do |trigger|
199
+ case trigger[:class]
200
+ when :timer
201
+ b.tag! "hudson.triggers.TimerTrigger" do
202
+ b.spec trigger[:spec]
203
+ end
204
+ end
205
+ end
206
+ end
207
+ else
208
+ b.triggers :class => "vector"
209
+ end
210
+ end
211
+
212
+ # Example
213
+ # <logRotator>
214
+ # <daysToKeep>14</daysToKeep>
215
+ # <numToKeep>-1</numToKeep>
216
+ # <artifactDaysToKeep>-1</artifactDaysToKeep>
217
+ # <artifactNumToKeep>-1</artifactNumToKeep>
218
+ # </logRotator>
219
+ def build_log_rotator(b)
220
+ if log_rotate
221
+ b.logRotator do
222
+ b.daysToKeep log_rotate[:days_to_keep] || -1
223
+ b.numToKeep log_rotate[:num_to_keep] || -1
224
+ b.artifactDaysToKeep log_rotate[:artifact_days_to_keep] || -1
225
+ b.artifactNumToKeep log_rotate[:artifact_num_to_keep] || -1
226
+ end
227
+ end
228
+ end
229
+
230
+ # Example
231
+ # <publishers>
232
+ # <hudson.plugins.chucknorris.CordellWalkerRecorder>
233
+ # <factGenerator/>
234
+ # </hudson.plugins.chucknorris.CordellWalkerRecorder>
235
+ # <hudson.tasks.BuildTrigger>
236
+ # <childProjects>Dependent Job, Even more dependent job</childProjects>
237
+ # <threshold>
238
+ # <name>SUCCESS</name>
239
+ # <ordinal>0</ordinal>
240
+ # <color>BLUE</color>
241
+ # </threshold>
242
+ # </hudson.tasks.BuildTrigger>
243
+ # <hudson.tasks.Mailer>
244
+ # <recipients>some.guy@example.com, another.guy@example.com</recipients>
245
+ # <dontNotifyEveryUnstableBuild>false</dontNotifyEveryUnstableBuild>
246
+ # <sendToIndividuals>true</sendToIndividuals>
247
+ # </hudson.tasks.Mailer>
248
+ # </publishers>
249
+ def build_publishers(b)
250
+ if publishers
251
+ b.publishers do
252
+ publishers.each do |publisher|
253
+ publisher_name, params = publisher.to_a.first
254
+ case publisher_name
255
+ when :mailer
256
+ b.tag! "hudson.tasks.Mailer" do
257
+ b.recipients params.join(', ')
258
+ b.dontNotifyEveryUnstableBuild false
259
+ b.sendToIndividuals true
260
+ end
261
+ when :job_triggers
262
+ b.tag! "hudson.tasks.BuildTrigger" do
263
+ b.childProjects params[:projects].join(', ')
264
+ b.threshold do
265
+ trigger_event = params[:on] || "SUCCESS"
266
+ b.name trigger_event
267
+ b.ordinal JOB_TRIGGER_THRESHOLDS[trigger_event][:ordinal]
268
+ b.color JOB_TRIGGER_THRESHOLDS[trigger_event][:color]
269
+ end
270
+ end
271
+ when :chuck_norris
272
+ b.tag! "hudson.plugins.chucknorris.CordellWalkerRecorder" do
273
+ b.factGenerator
274
+ end
275
+ end
276
+ end
277
+ end
278
+ else
279
+ b.publishers
280
+ end
281
+ end
177
282
 
178
283
  # The important sequence of steps that are run to process a job build.
179
284
  # Can be defaulted by the +job_type+ using +default_steps(job_type)+,
@@ -289,4 +394,4 @@ module Jenkins
289
394
  end
290
395
  end
291
396
  end
292
- end
397
+ end
@@ -1,3 +1,3 @@
1
1
  module Jenkins
2
- VERSION = "0.6.6"
2
+ VERSION = "0.6.8"
3
3
  end
@@ -19,7 +19,6 @@ describe Jenkins::JobConfigBuilder do
19
19
  end
20
20
  end
21
21
 
22
-
23
22
  describe "rails job; single axis" do
24
23
  before do
25
24
  @config = Jenkins::JobConfigBuilder.new(:rails) do |c|
@@ -31,8 +30,6 @@ describe Jenkins::JobConfigBuilder do
31
30
  end
32
31
  end
33
32
 
34
-
35
-
36
33
  describe "many rubies" do
37
34
  before do
38
35
  @config = Jenkins::JobConfigBuilder.new(:ruby) do |c|
@@ -135,6 +132,81 @@ describe Jenkins::JobConfigBuilder do
135
132
  end
136
133
  end
137
134
 
135
+ describe "setup log rotator" do
136
+ before do
137
+ @config = Jenkins::JobConfigBuilder.new(:rails) do |c|
138
+ c.log_rotate = { :days_to_keep => 14 }
139
+ end
140
+ end
141
+
142
+ it 'builds config.xml' do
143
+ xml_bite = <<-XML.gsub(/^ /, '')
144
+ <logRotator>
145
+ <daysToKeep>14</daysToKeep>
146
+ <numToKeep>-1</numToKeep>
147
+ <artifactDaysToKeep>-1</artifactDaysToKeep>
148
+ <artifactNumToKeep>-1</artifactNumToKeep>
149
+ </logRotator>
150
+ XML
151
+ Hpricot.XML(@config.to_xml).search("logRotator").to_s.should == xml_bite.strip
152
+ end
153
+ end
154
+
155
+ describe "setup build triggers" do
156
+ before do
157
+ @config = Jenkins::JobConfigBuilder.new(:rails) do |c|
158
+ c.triggers = [{:class => :timer, :spec => "5 * * * *"}]
159
+ end
160
+ end
161
+
162
+ it 'builds config.xml' do
163
+ xml_bite = <<-XML.gsub(/^ /, '')
164
+ <triggers class="vector">
165
+ <hudson.triggers.TimerTrigger>
166
+ <spec>5 * * * *</spec>
167
+ </hudson.triggers.TimerTrigger>
168
+ </triggers>
169
+ XML
170
+ Hpricot.XML(@config.to_xml).search("triggers").to_s.should == xml_bite.strip
171
+ end
172
+ end
173
+
174
+ describe "setup publishers for a build" do
175
+ before do
176
+ @config = Jenkins::JobConfigBuilder.new(:none) do |c|
177
+ c.publishers = [
178
+ { :chuck_norris => true },
179
+ { :job_triggers => { :projects => ["Dependent Job", "Even more dependent job"], :on => "FAILURE" } },
180
+ { :mailer => ["some.guy@example.com", "another.guy@example.com"] }
181
+ ]
182
+ end
183
+ end
184
+
185
+ it 'builds config.xml' do
186
+ xml_bite = <<-XML.gsub(/^ /, '')
187
+ <publishers>
188
+ <hudson.plugins.chucknorris.CordellWalkerRecorder>
189
+ <factGenerator />
190
+ </hudson.plugins.chucknorris.CordellWalkerRecorder>
191
+ <hudson.tasks.BuildTrigger>
192
+ <childProjects>Dependent Job, Even more dependent job</childProjects>
193
+ <threshold>
194
+ <name>FAILURE</name>
195
+ <ordinal>2</ordinal>
196
+ <color>RED</color>
197
+ </threshold>
198
+ </hudson.tasks.BuildTrigger>
199
+ <hudson.tasks.Mailer>
200
+ <recipients>some.guy@example.com, another.guy@example.com</recipients>
201
+ <dontNotifyEveryUnstableBuild>false</dontNotifyEveryUnstableBuild>
202
+ <sendToIndividuals>true</sendToIndividuals>
203
+ </hudson.tasks.Mailer>
204
+ </publishers>
205
+ XML
206
+ Hpricot.XML(@config.to_xml).search("publishers").to_s.should == xml_bite.strip
207
+ end
208
+ end
209
+
138
210
  describe "erlang job; single axis" do
139
211
  before do
140
212
  @config = Jenkins::JobConfigBuilder.new(:erlang) do |c|
@@ -147,4 +219,4 @@ describe Jenkins::JobConfigBuilder do
147
219
  end
148
220
 
149
221
 
150
- end
222
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6
4
+ version: 0.6.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-05 00:00:00.000000000 Z
13
+ date: 2011-12-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: term-ansicolor
17
- requirement: &2153858500 !ruby/object:Gem::Requirement
17
+ requirement: &70195831626640 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.4
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2153858500
25
+ version_requirements: *70195831626640
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: httparty
28
- requirement: &2153906860 !ruby/object:Gem::Requirement
28
+ requirement: &70195831626120 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.6.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2153906860
36
+ version_requirements: *70195831626120
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: builder
39
- requirement: &2160258200 !ruby/object:Gem::Requirement
39
+ requirement: &70195831625640 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.1.2
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2160258200
47
+ version_requirements: *70195831625640
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: thor
50
- requirement: &2153763220 !ruby/object:Gem::Requirement
50
+ requirement: &70195831625180 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.14.2
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2153763220
58
+ version_requirements: *70195831625180
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hpricot
61
- requirement: &2153421620 !ruby/object:Gem::Requirement
61
+ requirement: &70195831624800 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *2153421620
69
+ version_requirements: *70195831624800
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: json_pure
72
- requirement: &2153226880 !ruby/object:Gem::Requirement
72
+ requirement: &70195831624260 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 1.5.1
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *2153226880
80
+ version_requirements: *70195831624260
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: jenkins-war
83
- requirement: &2153031100 !ruby/object:Gem::Requirement
83
+ requirement: &70195831623760 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '1.396'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2153031100
91
+ version_requirements: *70195831623760
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rake
94
- requirement: &2152673180 !ruby/object:Gem::Requirement
94
+ requirement: &70195831639760 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2152673180
102
+ version_requirements: *70195831639760
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: cucumber
105
- requirement: &2152176120 !ruby/object:Gem::Requirement
105
+ requirement: &70195831639220 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '1.0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2152176120
113
+ version_requirements: *70195831639220
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rspec
116
- requirement: &2151800240 !ruby/object:Gem::Requirement
116
+ requirement: &70195831638640 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '2.0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2151800240
124
+ version_requirements: *70195831638640
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: awesome_print
127
- requirement: &2151798120 !ruby/object:Gem::Requirement
127
+ requirement: &70195831638140 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,7 +132,7 @@ dependencies:
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2151798120
135
+ version_requirements: *70195831638140
136
136
  description: A suite of utilities for bringing continous integration to your projects
137
137
  (not the other way around) with jenkins CI
138
138
  email: