jenkins_pipeline_builder 0.2.2 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c085dfdc7cec7f2d1df4f4d46ec4d2a53854b0d1
4
- data.tar.gz: 11741c96a3ffb283b2c88e6d9e2f90452eac2964
3
+ metadata.gz: 1ea8f087d4b224af599c56541ff63949b52d753c
4
+ data.tar.gz: a48aaa32057bb025ff671ecde36ba4a63934d6dc
5
5
  SHA512:
6
- metadata.gz: 964a0077ffefc1a869fb1b1ba1f153e244c5752317270521294e3e058e20fb19866021c191f3c3f737357ce5f104ba0ecaaaed2ea9051fc58e9909e78a147456
7
- data.tar.gz: 42f1dd78be906eef930b94e63ede816ddae53b859334e2726ad88a5fc1182001e2c8e56a96d0ea10571a5c13f4d620477891c3c255708601bc1e89962e522d22
6
+ metadata.gz: 2625db8daaf9376596495cfc9df690833476fd82e9764f703a636b8457782e23fef998bcdc8c64f3e0e8055b34f7ea331384fce2aac6285e3e64c15981b5d9c8
7
+ data.tar.gz: 34e0e2d66b774240172c5dde403e0fb571ec3b542ca3215af2baa2e081672ef407e0b8cb150040233af0b36c123371a9c98446ebedd49543ec0aeccb60562bb6
@@ -24,6 +24,7 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
24
24
  spec.add_dependency 'nokogiri', '~> 1.5.0'
25
25
  spec.add_dependency 'jenkins_api_client', '~> 0.14.1'
26
26
  spec.add_dependency 'thor', '>= 0.18.0'
27
+ spec.add_dependency 'activesupport'
27
28
 
28
29
  spec.add_development_dependency 'bundler', '~> 1.3'
29
30
  spec.add_development_dependency 'rake'
@@ -37,3 +37,4 @@ require 'jenkins_pipeline_builder/cli/helper'
37
37
  require 'jenkins_pipeline_builder/cli/view'
38
38
  require 'jenkins_pipeline_builder/cli/pipeline'
39
39
  require 'jenkins_pipeline_builder/cli/base'
40
+ require 'active_support/core_ext'
@@ -36,7 +36,7 @@ module JenkinsPipelineBuilder
36
36
  xml.configs {
37
37
  if job[:config].has_key? :predefined_build_parameters
38
38
  xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') {
39
- xml.properties job[:config][:predefined_build_parameters].join ' '
39
+ xml.properties job[:config][:predefined_build_parameters].join "\n"
40
40
  }
41
41
  end
42
42
  }
@@ -66,4 +66,4 @@ module JenkinsPipelineBuilder
66
66
  end
67
67
  end
68
68
  end
69
- end
69
+ end
@@ -37,4 +37,4 @@ module JenkinsPipelineBuilder
37
37
  end
38
38
  end
39
39
  end
40
- end
40
+ end
@@ -23,10 +23,11 @@
23
23
  module JenkinsPipelineBuilder
24
24
  class Compiler
25
25
  def self.resolve_value(value, settings)
26
+ settings = settings.with_indifferent_access
26
27
  value_s = value.to_s.clone
27
- vars = value_s.scan(/{{([^}]+)}}/).flatten
28
+ vars = value_s.scan(/{{([^{}]+)}}/).flatten
28
29
  vars.select! do |var|
29
- var_val = settings[var.to_sym]
30
+ var_val = settings[var]
30
31
  value_s.gsub!("{{#{var.to_s}}}", var_val) unless var_val.nil?
31
32
  var_val.nil?
32
33
  end
@@ -51,31 +52,63 @@ module JenkinsPipelineBuilder
51
52
  end
52
53
 
53
54
  def self.compile(item, settings = {})
55
+ errors = {}
54
56
  case item
55
57
  when String
56
58
  new_value = resolve_value(item, settings)
57
- puts "Failed to resolve #{item}" if new_value.nil?
58
- return new_value
59
+ if new_value.nil?
60
+ errors[item] = "Failed to resolve #{item}"
61
+ end
62
+ unless errors.empty?
63
+ return false, errors
64
+ end
65
+ return true, new_value
59
66
  when Hash
60
67
  result = {}
61
68
  item.each do |key, value|
62
- new_value = compile(value, settings)
63
- puts "Failed to resolve #{value}" if new_value.nil?
64
- return nil if new_value.nil?
65
- result[key] = new_value
69
+ if value.nil?
70
+ errors[key] = "key: #{key} has a nil value, this is likely a yaml syntax error. Skipping children and siblings"
71
+ break
72
+ end
73
+ success, payload = compile(value, settings)
74
+ unless success
75
+ errors.merge!(payload)
76
+ next
77
+ end
78
+ if payload.nil?
79
+ errors[key] = "Failed to resolve:\n===>key: #{key}\n\n===>value: #{value}\n\n===>of: #{item}"
80
+ next
81
+ end
82
+ result[key] = payload
66
83
  end
67
- return result
84
+ unless errors.empty?
85
+ return false, errors
86
+ end
87
+ return true, result
68
88
  when Array
69
89
  result = []
70
90
  item.each do |value|
71
- new_value = compile(value, settings)
72
- puts "Failed to resolve #{value}" if new_value.nil?
73
- return nil if new_value.nil?
74
- result << new_value
91
+ if value.nil?
92
+ errors[item] = "found a nil value when processing following array:\n #{item.inspect}"
93
+ break
94
+ end
95
+ success, payload = compile(value, settings)
96
+ unless success
97
+ errors.merge!(payload)
98
+ next
99
+ end
100
+ if payload.nil?
101
+ errors[value] = "Failed to resolve:\n===>item #{value}\n\n===>of list: #{item}"
102
+ next
103
+ end
104
+ result << payload
105
+ end
106
+ unless errors.empty?
107
+ return false, errors
75
108
  end
76
- return result
109
+ return true, result
77
110
  end
78
- return item
111
+ return true, item
79
112
  end
80
113
  end
81
114
  end
@@ -65,7 +65,8 @@ module JenkinsPipelineBuilder
65
65
  description_setter: Publishers.method(:description_setter),
66
66
  downstream: Publishers.method(:push_to_projects),
67
67
  junit_result: Publishers.method(:publish_junit),
68
- coverage_result: Publishers.method(:publish_rcov)
68
+ coverage_result: Publishers.method(:publish_rcov),
69
+ post_build_script: Publishers.method(:post_build_script)
69
70
  },
70
71
  method:
71
72
  lambda { |registry, params, n_xml| @module_registry.run_registry_on_path('//publishers', registry, params, n_xml) }
@@ -96,7 +97,6 @@ module JenkinsPipelineBuilder
96
97
  end
97
98
 
98
99
  attr_accessor :client
99
- #attr_accessor :debug
100
100
  def debug=(value)
101
101
  @debug = value
102
102
  @logger.level = (value) ? Logger::DEBUG : Logger::INFO;
@@ -166,11 +166,17 @@ module JenkinsPipelineBuilder
166
166
  jobs.map! do |job|
167
167
  job.kind_of?(String) ? { job.to_sym => {} } : job
168
168
  end
169
+ errors = {}
169
170
  @logger.info project
170
171
  jobs.each do |job|
171
172
  job_id = job.keys.first
172
173
  settings = project[:settings].clone.merge(job[job_id])
173
- job[:result] = resolve_job_by_name(job_id, settings)
174
+ success, payload = resolve_job_by_name(job_id, settings)
175
+ if success
176
+ job[:result] = payload
177
+ else
178
+ errors[job_id] = payload
179
+ end
174
180
  end
175
181
 
176
182
  # Process views
@@ -182,10 +188,24 @@ module JenkinsPipelineBuilder
182
188
  view_id = view.keys.first
183
189
  settings = project[:settings].clone.merge(view[view_id])
184
190
  # TODO: rename resolve_job_by_name properly
185
- view[:result] = resolve_job_by_name(view_id, settings)
191
+ success, payload = resolve_job_by_name(view_id, settings)
192
+ if success
193
+ view[:result] = payload
194
+ else
195
+ errors[view_id] = payload
196
+ end
186
197
  end
187
198
 
188
- project
199
+ errors.each do |k,v|
200
+ puts "Encountered errors processing: #{k}:"
201
+ v.each do |key, error|
202
+ puts " key: #{key} had the following error:"
203
+ puts " #{error.inspect}"
204
+ end
205
+ end
206
+ return false, "Encountered errors exiting" unless errors.empty?
207
+
208
+ return true, project
189
209
  end
190
210
 
191
211
  def resolve_job_by_name(name, settings = {})
@@ -193,8 +213,9 @@ module JenkinsPipelineBuilder
193
213
  raise "Failed to locate job by name '#{name}'" if job.nil?
194
214
  job_value = job[:value]
195
215
  @logger.debug "Compiling job #{name}"
196
- compiled_job = Compiler.compile(job_value, settings)
197
- return compiled_job
216
+
217
+ success, payload = Compiler.compile(job_value, settings)
218
+ return success, payload
198
219
  end
199
220
 
200
221
  def projects
@@ -217,23 +238,40 @@ module JenkinsPipelineBuilder
217
238
  @logger.info "Bootstrapping pipeline from path #{path}"
218
239
  load_collection_from_path(path)
219
240
 
241
+ errors = {}
220
242
  # Publish all the jobs if the projects are not found
221
243
  if projects.count == 0
222
244
  jobs.each do |i|
223
245
  job = i[:value]
224
- xml = compile_job_to_xml(job)
225
- create_or_update(job, xml)
246
+ success, payload = compile_job_to_xml(job)
247
+ if success
248
+ create_or_update(job, payload)
249
+ else
250
+ errors[job[:name]] = payload
251
+ end
226
252
  end
227
253
  else
228
254
  projects.each do |project|
229
- compiled_project = resolve_project(project)
230
- #pp compiled_project
255
+ success, payload = resolve_project(project)
256
+ if success
257
+ puts 'successfully resolved project'
258
+ compiled_project = payload
259
+ else
260
+ puts payload
261
+ return false
262
+ end
231
263
 
232
264
  if compiled_project[:value][:jobs]
233
265
  compiled_project[:value][:jobs].each do |i|
266
+ puts "Processing #{i}"
234
267
  job = i[:result]
235
- xml = compile_job_to_xml(job)
236
- create_or_update(job, xml)
268
+ fail "Result is empty for #{i}" if job.nil?
269
+ success, payload = compile_job_to_xml(job)
270
+ if success
271
+ create_or_update(job, payload)
272
+ else
273
+ errors[job[:name]] = payload
274
+ end
237
275
  end
238
276
  end
239
277
 
@@ -245,6 +283,10 @@ module JenkinsPipelineBuilder
245
283
  end
246
284
  end
247
285
  end
286
+ errors.each do |k,v|
287
+ @logger.error "Encountered errors compiling: #{k}:"
288
+ @logger.error v
289
+ end
248
290
  end
249
291
 
250
292
  def dump(job_name)
@@ -278,20 +320,20 @@ module JenkinsPipelineBuilder
278
320
  case job[:job_type]
279
321
  when 'job_dsl'
280
322
  xml = compile_freestyle_job_to_xml(job)
281
- update_job_dsl(job, xml)
323
+ payload = update_job_dsl(job, xml)
282
324
  when 'multi_project'
283
325
  xml = compile_freestyle_job_to_xml(job)
284
- adjust_multi_project xml
326
+ payload = adjust_multi_project xml
285
327
  when 'build_flow'
286
328
  xml = compile_freestyle_job_to_xml(job)
287
- add_job_dsl(job, xml)
329
+ payload = add_job_dsl(job, xml)
288
330
  when 'free_style'
289
- compile_freestyle_job_to_xml job
331
+ payload = compile_freestyle_job_to_xml job
290
332
  else
291
- @logger.info 'Unknown job type'
292
- ''
333
+ return false, "Job type: #{job[:job_type]} is not one of job_dsl, multi_project, build_flow or free_style"
293
334
  end
294
335
 
336
+ return true, payload
295
337
  end
296
338
 
297
339
  def adjust_multi_project(xml)
@@ -53,8 +53,8 @@ module JenkinsPipelineBuilder
53
53
  end
54
54
  }
55
55
  xml.projects params[:project]
56
- xml.condition 'SUCCESS'
57
- xml.triggerWithNoParameters false
56
+ xml.condition params[:condition] || 'SUCCESS'
57
+ xml.triggerWithNoParameters params[:trigger_with_no_parameters] || false
58
58
  }
59
59
  }
60
60
  }
@@ -109,5 +109,20 @@ module JenkinsPipelineBuilder
109
109
  }
110
110
  }
111
111
  end
112
+
113
+ def self.post_build_script(params, xml)
114
+ xml.send('org.jenkinsci.plugins.postbuildscript.PostBuildScript') {
115
+ xml.buildSteps {
116
+ if params[:shell_command]
117
+ xml.send('hudson.tasks.Shell') {
118
+ xml.command params[:shell_command]
119
+ }
120
+ end
121
+ }
122
+ xml.scriptOnlyIfSuccess params[:on_success]
123
+ xml.scriptOnlyIfFailure params[:on_failure]
124
+ xml.executeOn params[:execute_on] || 'BOTH'
125
+ }
126
+ end
112
127
  end
113
- end
128
+ end
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = "0.2.2"
24
+ VERSION = "0.2.3"
25
25
  end
@@ -57,10 +57,11 @@ module JenkinsPipelineBuilder
57
57
  }
58
58
  end
59
59
 
60
- def self.inject_env_vars(wrapper, xml)
60
+ def self.inject_env_vars(params, xml)
61
61
  xml.EnvInjectBuildWrapper {
62
62
  xml.info {
63
- xml.propertiesContent wrapper
63
+ xml.propertiesFilePath params[:file] if params[:file]
64
+ xml.propertiesContent params[:content] if params[:content]
64
65
  xml.loadFilesFromMaster false
65
66
  }
66
67
  }
@@ -130,4 +131,4 @@ module JenkinsPipelineBuilder
130
131
  }
131
132
  end
132
133
  end
133
- end
134
+ end
@@ -12,8 +12,9 @@ describe 'Compiler' do
12
12
  z: false
13
13
  }
14
14
 
15
- result = JenkinsPipelineBuilder::Compiler.compile(hash)
15
+ success, result = JenkinsPipelineBuilder::Compiler.compile(hash)
16
16
 
17
+ expect(success).to be_true
17
18
  result.should == hash
18
19
  end
19
20
  end
@@ -126,4 +126,4 @@
126
126
  <filterExcludedArtifactsFromBuild>false</filterExcludedArtifactsFromBuild>
127
127
  </org.jfrog.hudson.maven3.ArtifactoryMaven3Configurator>
128
128
  </buildWrappers>
129
- </project>
129
+ </project>
@@ -17,8 +17,9 @@
17
17
  release-repo: gems-local
18
18
  publish: 'pkg/*.gem'
19
19
  publish-build-info: true
20
- - inject_env_var: >
21
- VAR1 = value_1
20
+ - inject_env_var:
21
+ content: |
22
+ VAR1 = value_1
22
23
  - inject_passwords:
23
24
  - name: OS_PASSWORD
24
25
  value: some_encrypted_password
@@ -76,7 +76,8 @@
76
76
  <exposedSCM>true</exposedSCM>
77
77
  <configs>
78
78
  <hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
79
- <properties>PARENT_WORKSPACE=${WORKSPACE}</properties>
79
+ <properties>GIT_COMMIT=123
80
+ PARENT_WORKSPACE=${WORKSPACE}</properties>
80
81
  </hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
81
82
  </configs>
82
83
  </com.tikal.jenkins.plugins.multijob.PhaseJobsConfig>
@@ -28,6 +28,7 @@
28
28
  current_params: true
29
29
  config:
30
30
  predefined_build_parameters:
31
+ - 'GIT_COMMIT=123'
31
32
  - "PARENT_WORKSPACE=${WORKSPACE}"
32
33
  - name: second
33
34
  continue_condition: COMPLETED
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description/>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>false</concurrentBuild>
14
+ <builders/>
15
+ <publishers>
16
+ <hudson.plugins.parameterizedtrigger.BuildTrigger>
17
+ <configs>
18
+ <hudson.plugins.parameterizedtrigger.BuildTriggerConfig>
19
+ <configs>
20
+ <hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
21
+ <properties>param1 param2</properties>
22
+ </hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
23
+ <hudson.plugins.parameterizedtrigger.FileBuildParameters>
24
+ <propertiesFile>props.file</propertiesFile>
25
+ <failTriggerOnMissing>false</failTriggerOnMissing>
26
+ </hudson.plugins.parameterizedtrigger.FileBuildParameters>
27
+ </configs>
28
+ <projects>downstream</projects>
29
+ <condition>FAILURE</condition>
30
+ <triggerWithNoParameters>false</triggerWithNoParameters>
31
+ </hudson.plugins.parameterizedtrigger.BuildTriggerConfig>
32
+ </configs>
33
+ </hudson.plugins.parameterizedtrigger.BuildTrigger>
34
+ </publishers>
35
+ <buildWrappers/>
36
+ </project>
@@ -0,0 +1,13 @@
1
+ ---
2
+ - job:
3
+ name: downstream
4
+ publishers:
5
+ - downstream:
6
+ project: downstream
7
+ data:
8
+ - params: |
9
+ param1
10
+ param2
11
+ - file: props.file
12
+ condition: FAILURE
13
+ trigger_with_no_parameters: false
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description/>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>false</concurrentBuild>
14
+ <builders/>
15
+ <publishers>
16
+ <org.jenkinsci.plugins.postbuildscript.PostBuildScript>
17
+ <buildSteps>
18
+ <hudson.tasks.Shell>
19
+ <command>echo "line one" echo "line two"</command>
20
+ </hudson.tasks.Shell>
21
+ </buildSteps>
22
+ <scriptOnlyIfSuccess>true</scriptOnlyIfSuccess>
23
+ <scriptOnlyIfFailure>false</scriptOnlyIfFailure>
24
+ <executeOn>BOTH</executeOn>
25
+ </org.jenkinsci.plugins.postbuildscript.PostBuildScript>
26
+ </publishers>
27
+ <buildWrappers/>
28
+ </project>
@@ -0,0 +1,11 @@
1
+ ---
2
+ - job:
3
+ name: post_build_script
4
+ publishers:
5
+ - post_build_script:
6
+ shell_command: |
7
+ echo "line one"
8
+ echo "line two"
9
+ on_success: true
10
+ on_failure: false
11
+ execute_on: BOTH
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description/>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.scm.NullSCM"/>
8
+ <canRoam>true</canRoam>
9
+ <disabled>false</disabled>
10
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
+ <triggers class="vector"/>
13
+ <concurrentBuild>false</concurrentBuild>
14
+ <builders/>
15
+ <publishers/>
16
+ <buildWrappers>
17
+ <EnvInjectBuildWrapper>
18
+ <info>
19
+ <propertiesFilePath>foo.prop</propertiesFilePath>
20
+ <propertiesContent>
21
+ foo=bar
22
+ </propertiesContent>
23
+ <loadFilesFromMaster>false</loadFilesFromMaster>
24
+ </info>
25
+ </EnvInjectBuildWrapper>
26
+ </buildWrappers>
27
+ </project>
@@ -0,0 +1,8 @@
1
+ ---
2
+ - job:
3
+ name: properties_file
4
+ wrappers:
5
+ - inject_env_var:
6
+ file: 'foo.prop'
7
+ content: |
8
+ foo=bar
@@ -16,7 +16,8 @@ describe 'Test YAML jobs conversion to XML' do
16
16
  end
17
17
 
18
18
  def compare_jobs(job, path)
19
- xml = @generator.compile_job_to_xml(job)
19
+ success, xml = @generator.compile_job_to_xml(job)
20
+ expect(success).to be_true
20
21
  doc1 = Nokogiri::XML(xml)
21
22
 
22
23
  sample_job_xml = File.read(path + '.xml')
@@ -26,19 +27,25 @@ describe 'Test YAML jobs conversion to XML' do
26
27
  doc1.should be_equivalent_to(doc2)
27
28
  end
28
29
 
29
- [
30
+ files = [
30
31
  'Job-Multi-Project',
31
32
  'Job-Build-Maven',
32
33
  'Job-Build-Flow',
33
- 'Job-Gem-Build'
34
- ].each do |file|
34
+ 'Job-Gem-Build',
35
+ 'post_build_script',
36
+ 'properties_file',
37
+ 'downstream'
38
+ ]
39
+
40
+ files.each do |file|
35
41
  it "should create expected XML from YAML '#{file}'" do
36
42
  path = File.expand_path('../fixtures/files/' + file, __FILE__)
37
43
 
38
44
  @generator.load_collection_from_path path + '.yaml'
39
45
  job_name = @generator.job_collection.keys.first
40
- job = @generator.resolve_job_by_name(job_name)
46
+ success, job = @generator.resolve_job_by_name(job_name)
41
47
 
48
+ expect(success).to be_true
42
49
  compare_jobs job, path
43
50
  end
44
51
  end
@@ -50,7 +57,9 @@ describe 'Test YAML jobs conversion to XML' do
50
57
 
51
58
  project_name = @generator.projects.first[:name]
52
59
 
53
- project = @generator.resolve_project(@generator.get_item(project_name))
60
+ success, project = @generator.resolve_project(@generator.get_item(project_name))
61
+
62
+ expect(success).to be_true
54
63
 
55
64
  project[:value][:jobs].should_not be_nil
56
65
 
@@ -63,8 +63,10 @@ describe 'Templates resolver' do
63
63
  project = YAML.load(str)
64
64
  @generator.load_job_collection project
65
65
 
66
- @generator.resolve_project(@generator.get_item('project-name')).should ==
67
- {:name=>"project-name",
66
+ success, project = @generator.resolve_project(@generator.get_item('project-name'))
67
+
68
+ expect(success).to be_true
69
+ expect(project).to eq({:name=>"project-name",
68
70
  :type=>:project,
69
71
  :value=>
70
72
  {:name=>"project-name",
@@ -78,7 +80,7 @@ describe 'Templates resolver' do
78
80
  :settings=>
79
81
  {:name=>"project-name",
80
82
  :description=>"Do not edit this job through the web!",
81
- :db=>"my_own_db"}}
83
+ :db=>"my_own_db"}})
82
84
  end
83
85
 
84
86
  it 'should build project collection from jobs templates' do
@@ -112,8 +114,9 @@ describe 'Templates resolver' do
112
114
  project = YAML.load(str)
113
115
  @generator.load_job_collection project
114
116
 
115
- @generator.resolve_project(@generator.get_item('project-name')).should ==
116
- {:name=>"project-name",
117
+ success, project = @generator.resolve_project(@generator.get_item('project-name'))
118
+ expect(success).to be_true
119
+ expect(project).to eq( {:name=>"project-name",
117
120
  :type=>:project,
118
121
  :value=>
119
122
  {:name=>"project-name",
@@ -129,7 +132,7 @@ describe 'Templates resolver' do
129
132
  {:name=>"project-name-perf-tests",
130
133
  :builders=>[{:shell=>"perftest"}],
131
134
  :publishers=>[{:email=>{:recipients=>"projmanager@nowhere.net"}}]}}]},
132
- :settings=>{:name=>"project-name", :db=>"my_own_db"}}
135
+ :settings=>{:name=>"project-name", :db=>"my_own_db"}})
133
136
  end
134
137
 
135
138
  it 'should build project collection from jobs and jobs templates' do
@@ -159,7 +162,9 @@ describe 'Templates resolver' do
159
162
  project = YAML.load(str)
160
163
  @generator.load_job_collection project
161
164
 
162
- @generator.resolve_project(@generator.get_item('project-name')).should ==
165
+ success, project = @generator.resolve_project(@generator.get_item('project-name'))
166
+ expect(success).to be_true
167
+ expect(project).to eq(
163
168
  {:name=>"project-name",
164
169
  :type=>:project,
165
170
  :value=>
@@ -175,23 +180,27 @@ describe 'Templates resolver' do
175
180
  {:name=>"project-name-unit-tests",
176
181
  :builders=>[{:shell=>"unittest"}],
177
182
  :publishers=>[{:email=>{:recipients=>"projmanager@nowhere.net"}}]}}]},
178
- :settings=>{:name=>"project-name", :db=>"my_own_db"}}
183
+ :settings=>{:name=>"project-name", :db=>"my_own_db"}})
179
184
  end
180
185
 
181
186
 
182
187
  describe 'compilation of templates' do
183
188
  it 'compiles String' do
184
- JenkinsPipelineBuilder::Compiler.compile('blah', { item1: 'data1'}).should == 'blah'
189
+ success, string = JenkinsPipelineBuilder::Compiler.compile('blah', { item1: 'data1'})
190
+ expect(success).to be_true
191
+ expect(string).to eq 'blah'
185
192
  end
186
193
 
187
194
  it 'compiles simple Hash' do
188
- JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: 'item1-data'}, { item1: 'data1'}).should ==
189
- { name: 'item-data1', value: 'item1-data'}
195
+ success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: 'item1-data'}, { item1: 'data1'})
196
+ expect(success).to be_true
197
+ expect(hash).to eq({ name: 'item-data1', value: 'item1-data'})
190
198
  end
191
199
 
192
200
  it 'compiles nested Hash' do
193
- JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: { house: 'house-{{item1}}'}}, { item1: 'data1'}).should ==
194
- { name: 'item-data1', value: { house: 'house-data1'}}
201
+ success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: { house: 'house-{{item1}}'}}, { item1: 'data1'})
202
+ expect(success).to be_true
203
+ expect(hash).to eq( { name: 'item-data1', value: { house: 'house-data1'}} )
195
204
  end
196
205
 
197
206
  it 'compiles complex Hash' do
@@ -200,10 +209,12 @@ describe 'Templates resolver' do
200
209
  :publishers=>[{:email=>{:recipients=>"{{mail-to}}"}}]}
201
210
  settings = {:name=>"project-name", :db=>"my_own_db", :'mail-to' => 'developer@nowhere.net'}
202
211
 
203
- JenkinsPipelineBuilder::Compiler.compile(template, settings).should ==
212
+ success, hash = JenkinsPipelineBuilder::Compiler.compile(template, settings)
213
+ expect(success).to be_true
214
+ expect(hash).to eq(
204
215
  {:name=>"project-name-unit-tests",
205
216
  :builders=>[{:shell=>"unittest"}],
206
- :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]}
217
+ :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]})
207
218
  end
208
219
  end
209
220
 
@@ -214,10 +225,12 @@ describe 'Templates resolver' do
214
225
 
215
226
  @generator.load_job_collection project
216
227
 
217
- @generator.resolve_job_by_name('{{name}}-unit-tests', { name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net' }).should ==
228
+ success, job = @generator.resolve_job_by_name('{{name}}-unit-tests', { name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net' })
229
+ expect(success).to be_true
230
+ expect(job).to eq(
218
231
  {:name=>"project-name-unit-tests",
219
232
  :builders=>[{:shell=>"unittest"}],
220
- :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]}
233
+ :publishers=>[{:email=>{:recipients=>"developer@nowhere.net"}}]})
221
234
  end
222
235
 
223
236
  it 'should load from folder' do
@@ -227,4 +240,4 @@ describe 'Templates resolver' do
227
240
  @generator.job_collection.count.should == 4
228
241
  @generator.projects.count == 1
229
242
  end
230
- end
243
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_pipeline_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Moochnick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-13 00:00:00.000000000 Z
11
+ date: 2014-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.18.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -305,7 +319,13 @@ files:
305
319
  - spec/unit_tests/fixtures/files/Job-Generate-From-Template.yaml
306
320
  - spec/unit_tests/fixtures/files/Job-Multi-Project.xml
307
321
  - spec/unit_tests/fixtures/files/Job-Multi-Project.yaml
322
+ - spec/unit_tests/fixtures/files/downstream.xml
323
+ - spec/unit_tests/fixtures/files/downstream.yaml
324
+ - spec/unit_tests/fixtures/files/post_build_script.xml
325
+ - spec/unit_tests/fixtures/files/post_build_script.yaml
308
326
  - spec/unit_tests/fixtures/files/project.yaml
327
+ - spec/unit_tests/fixtures/files/properties_file.xml
328
+ - spec/unit_tests/fixtures/files/properties_file.yaml
309
329
  - spec/unit_tests/fixtures/templates/external_job.yaml
310
330
  - spec/unit_tests/fixtures/templates/project_with_jobs.yaml
311
331
  - spec/unit_tests/generator_spec.rb
@@ -353,7 +373,13 @@ test_files:
353
373
  - spec/unit_tests/fixtures/files/Job-Generate-From-Template.yaml
354
374
  - spec/unit_tests/fixtures/files/Job-Multi-Project.xml
355
375
  - spec/unit_tests/fixtures/files/Job-Multi-Project.yaml
376
+ - spec/unit_tests/fixtures/files/downstream.xml
377
+ - spec/unit_tests/fixtures/files/downstream.yaml
378
+ - spec/unit_tests/fixtures/files/post_build_script.xml
379
+ - spec/unit_tests/fixtures/files/post_build_script.yaml
356
380
  - spec/unit_tests/fixtures/files/project.yaml
381
+ - spec/unit_tests/fixtures/files/properties_file.xml
382
+ - spec/unit_tests/fixtures/files/properties_file.yaml
357
383
  - spec/unit_tests/fixtures/templates/external_job.yaml
358
384
  - spec/unit_tests/fixtures/templates/project_with_jobs.yaml
359
385
  - spec/unit_tests/generator_spec.rb