jenkins_pipeline_builder 0.10.12 → 0.10.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -44,6 +44,7 @@ module JenkinsPipelineBuilder
44
44
  @xml = setup_freestyle_base(job)
45
45
  payload = update_job_dsl
46
46
  when 'multi_project'
47
+ # TODO: Add multi_job as another, more logically named option
47
48
  @xml = setup_freestyle_base(job)
48
49
  payload = adjust_multi_project
49
50
  when 'build_flow'
@@ -23,6 +23,10 @@ module JenkinsPipelineBuilder
23
23
  result
24
24
  end
25
25
 
26
+ def standalone_jobs
27
+ jobs.map { |job| { result: job } }
28
+ end
29
+
26
30
  def jobs
27
31
  result = []
28
32
  collection.values.each do |item|
@@ -49,29 +53,27 @@ module JenkinsPipelineBuilder
49
53
  if File.directory?(path)
50
54
  logger.info "Generating from folder #{path}"
51
55
  Dir[File.join(path, '/*.{yaml,yml}')].each do |file|
52
- logger.info "Loading file #{file}"
53
- yaml = YAML.load_file(file)
54
- load_file(yaml, remote)
56
+ load_file(file, remote)
55
57
  end
56
58
  Dir[File.join(path, '/*.json')].each do |file|
57
- logger.info "Loading file #{file}"
58
- json = JSON.parse(IO.read(file))
59
- load_file(json, remote)
59
+ load_file(file, remote)
60
60
  end
61
61
  else
62
- logger.info "Loading file #{path}"
63
- if path.end_with? 'json'
64
- hash = JSON.parse(IO.read(path))
65
- else # elsif path.end_with?("yml") || path.end_with?("yaml")
66
- hash = YAML.load_file(path)
67
- end
68
- load_file(hash, remote)
62
+ load_file(path, remote)
69
63
  end
70
64
  remote_dependencies.cleanup if remote
71
65
  end
72
66
 
73
- def load_file(yaml, remote = false)
74
- yaml.each do |section|
67
+ private
68
+
69
+ def load_file(path, remote = false)
70
+ if path.end_with? 'json'
71
+ hash = JSON.parse(IO.read(path))
72
+ else # elsif path.end_with?("yml") || path.end_with?("yaml")
73
+ hash = YAML.load_file(path)
74
+ end
75
+ logger.info "Loading file #{path}"
76
+ hash.each do |section|
75
77
  Utils.symbolize_keys_deep!(section)
76
78
  key = section.keys.first
77
79
  value = section[key]
@@ -93,7 +93,7 @@ module JenkinsPipelineBuilder
93
93
  if reg_value.is_a? ExtensionSet
94
94
  ext = reg_value.extension
95
95
  logger.debug "Using #{ext.type} #{ext.name} version #{ext.min_version}"
96
- success = execute_extension ext, value, n_xml
96
+ success = ext.execute value, n_xml
97
97
  fail 'Encountered errors compiling the xml' unless success
98
98
  elsif value.is_a? Hash
99
99
  traverse_registry reg_value, value, n_xml, true
@@ -104,30 +104,5 @@ module JenkinsPipelineBuilder
104
104
  end
105
105
  end
106
106
  end
107
-
108
- def execute_extension(extension, value, n_xml)
109
- errors = []
110
- params = extension.parameters
111
- if params == false || params.any?
112
- if value.is_a? Hash
113
- value.each_key do |key|
114
- next if params && params.include?(key)
115
- errors << "Extension #{extension.name} does not support parameter #{key}"
116
- end
117
- end
118
- end
119
- errors.each do |error|
120
- logger.error error
121
- end
122
- return false if errors.any?
123
-
124
- n_builders = n_xml.xpath(extension.path).first
125
- n_builders.instance_exec(value, &extension.before) if extension.before
126
- Nokogiri::XML::Builder.with(n_builders) do |xml|
127
- xml.instance_exec value, &extension.xml
128
- end
129
- n_builders.instance_exec(value, &extension.after) if extension.after
130
- true
131
- end
132
107
  end
133
108
  end
@@ -24,24 +24,20 @@ module JenkinsPipelineBuilder
24
24
  attr_reader :project # The root project YAML as a hash
25
25
  attr_reader :number # The pull request number
26
26
  attr_reader :jobs # The jobs in the pull request as an array of hashes
27
- attr_reader :generator # The generator job YAML as a hash
27
+ attr_reader :pull_generator # The generator job YAML as a hash
28
28
 
29
- # Initialize
30
- def initialize(project, number, jobs, generator)
31
- # Set instance vars
29
+ def initialize(project, number, jobs, pull_generator)
32
30
  @project = Marshal.load(Marshal.dump(project))
33
31
  @number = number
34
32
  @jobs = Marshal.load(Marshal.dump(jobs))
35
- @generator = Marshal.load(Marshal.dump(generator))
33
+ @pull_generator = Marshal.load(Marshal.dump(pull_generator))
36
34
  @project[:value][:pull_request_number] = "#{@number}"
37
35
 
38
- # Run
39
36
  run!
40
37
  end
41
38
 
42
39
  private
43
40
 
44
- # Apply all changes
45
41
  def run!
46
42
  git_version = JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version
47
43
  if git_version >= Gem::Version.new(2.0)
@@ -64,7 +60,8 @@ module JenkinsPipelineBuilder
64
60
  @jobs.each_value do |job|
65
61
  job[:value][:scm_branch] = 'origin/pr/{{pull_request_number}}/head'
66
62
  job[:value][:scm_params] = {} unless job[:value][:scm_params]
67
- job[:value][:scm_params][:refspec] = 'refs/pull/*:refs/remotes/origin/pr/*'
63
+ refspec = 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head'
64
+ job[:value][:scm_params][:refspec] = refspec
68
65
  end
69
66
  end
70
67
 
@@ -79,8 +76,7 @@ module JenkinsPipelineBuilder
79
76
  @jobs.each_value do |job|
80
77
  name = job[:name]
81
78
  changes = nil
82
- # Search the generator for changes
83
- @generator[:jobs].each do |gen|
79
+ @pull_generator[:value][:jobs].each do |gen|
84
80
  changes = gen[name.to_sym] if gen.is_a?(Hash) && gen.keys[0] == name.to_sym
85
81
  end
86
82
  # Apply changes
@@ -22,20 +22,44 @@
22
22
 
23
23
  module JenkinsPipelineBuilder
24
24
  class PullRequestGenerator
25
- attr_reader :purge
26
- attr_reader :create
27
- attr_reader :jobs
25
+ attr_reader :purge, :create, :jobs, :project, :generator, :pull_generator, :errors, :pull_requests
26
+
27
+ def initialize(project, generator)
28
+ @project = project
29
+ @generator = generator
28
30
 
29
- def initialize(project, jobs, pull_job)
30
31
  @purge = []
31
32
  @create = []
32
- @jobs = {}
33
33
 
34
- pull_requests = check_for_pull pull_job
35
- purge_old(pull_requests, project)
36
- pull_requests.each do |number|
37
- # Manipulate the YAML
38
- req = JenkinsPipelineBuilder::PullRequest.new(project, number, jobs, pull_job)
34
+ @errors = {}
35
+ @pull_generator = find
36
+ success, payload = compile_generator
37
+ unless success
38
+ @errors[@pull_generator[:name]] = payload
39
+ return false
40
+ end
41
+ @jobs = filter_jobs
42
+
43
+ # old init
44
+ @pull_requests = check_for_pull payload
45
+ find_old_pull_requests
46
+ generate_pull_requests
47
+
48
+ @generator.job_collection.collection.merge! @jobs
49
+ @errors.merge! create_jobs
50
+
51
+ purge_jobs
52
+ end
53
+
54
+ def valid?
55
+ errors.empty?
56
+ end
57
+
58
+ private
59
+
60
+ def generate_pull_requests
61
+ @pull_requests.each do |number|
62
+ req = JenkinsPipelineBuilder::PullRequest.new(project, number, jobs, @pull_generator)
39
63
  @jobs.merge! req.jobs
40
64
  project_new = req.project
41
65
 
@@ -45,7 +69,63 @@ module JenkinsPipelineBuilder
45
69
  end
46
70
  end
47
71
 
48
- private
72
+ def purge_jobs
73
+ purge.each do |purge_job|
74
+ jobs = JenkinsPipelineBuilder.client.job.list "#{purge_job}.*"
75
+ jobs.each do |job|
76
+ JenkinsPipelineBuilder.client.job.delete job
77
+ end
78
+ end
79
+ end
80
+
81
+ def create_jobs
82
+ errors = {}
83
+ create.each do |pull_project|
84
+ success, compiled_project = generator.resolve_project(pull_project)
85
+ compiled_project[:value][:jobs].each do |i|
86
+ job = i[:result]
87
+ job = Job.new job
88
+ success, payload = job.create_or_update
89
+ errors[job.name] = payload unless success
90
+ end
91
+ end
92
+ errors
93
+ end
94
+
95
+ def filter_jobs
96
+ jobs = {}
97
+ pull_jobs = pull_generator[:value][:jobs] || []
98
+ pull_jobs.each do |job|
99
+ if job.is_a? String
100
+ jobs[job.to_s] = generator.job_collection.collection[job.to_s]
101
+ else
102
+ jobs[job.keys.first.to_s] = generator.job_collection.collection[job.keys.first.to_s]
103
+ end
104
+ end
105
+ fail 'No jobs found for pull request' if jobs.empty?
106
+ jobs
107
+ end
108
+
109
+ def compile_generator
110
+ defaults = generator.job_collection.defaults
111
+ settings = defaults.nil? ? {} : defaults[:value] || {}
112
+ compiler = Compiler.new generator
113
+ settings = compiler.get_settings_bag(project, settings)
114
+ generator.resolve_job_by_name(pull_generator[:name], settings)
115
+ end
116
+
117
+ def find
118
+ project_jobs = project[:value][:jobs] || []
119
+ pull_job = nil
120
+ project_jobs.each do |job|
121
+ job = job.keys.first if job.is_a? Hash
122
+ job = generator.job_collection.collection[job.to_s]
123
+
124
+ pull_job = job if job[:value][:job_type] == 'pull_request_generator'
125
+ end
126
+ fail 'No jobs of type pull_request_generator found' unless pull_job
127
+ pull_job
128
+ end
49
129
 
50
130
  # Check for Github Pull Requests
51
131
  #
@@ -64,10 +144,10 @@ module JenkinsPipelineBuilder
64
144
  pulls.map { |p| p['number'] }
65
145
  end
66
146
 
67
- # Purge old builds
68
- def purge_old(pull_requests, project)
147
+ def find_old_pull_requests
69
148
  reqs = pull_requests.clone.map { |req| "#{project[:name]}-PR#{req}" }
70
149
  # Read File
150
+ # FIXME: Shouldn't this be opening just with read permissions?
71
151
  old_requests = File.new('pull_requests.csv', 'a+').read.split(',')
72
152
 
73
153
  # Pop off current pull requests
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = '0.10.12'
24
+ VERSION = '0.10.13'
25
25
  end
@@ -187,26 +187,16 @@ module JenkinsPipelineBuilder
187
187
  'Status' => { 'stapler-class' => 'hudson.views.StatusColumn', 'kind' => 'hudson.views.StatusColumn' },
188
188
  'Weather' => { 'stapler-class' => 'hudson.views.WeatherColumn', 'kind' => 'hudson.views.WeatherColumn' },
189
189
  'Name' => { 'stapler-class' => 'hudson.views.JobColumn', 'kind' => 'hudson.views.JobColumn' },
190
- 'Last Success' => {
191
- 'stapler-class' => 'hudson.views.LastSuccessColumn',
192
- 'kind' => 'hudson.views.LastSuccessColumn'
193
- },
194
- 'Last Failure' => {
195
- 'stapler-class' => 'hudson.views.LastFailureColumn',
196
- 'kind' => 'hudson.views.LastFailureColumn'
197
- },
198
- 'Last Duration' => {
199
- 'stapler-class' => 'hudson.views.LastDurationColumn',
200
- 'kind' => 'hudson.views.LastDurationColumn'
201
- },
202
- 'Build Button' => {
203
- 'stapler-class' => 'hudson.views.BuildButtonColumn',
204
- 'kind' => 'hudson.views.BuildButtonColumn'
205
- },
206
- 'Categorized - Job' => {
207
- 'stapler-class' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn',
208
- 'kind' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn'
209
- }
190
+ 'Last Success' => { 'stapler-class' => 'hudson.views.LastSuccessColumn',
191
+ 'kind' => 'hudson.views.LastSuccessColumn' },
192
+ 'Last Failure' => { 'stapler-class' => 'hudson.views.LastFailureColumn',
193
+ 'kind' => 'hudson.views.LastFailureColumn' },
194
+ 'Last Duration' => { 'stapler-class' => 'hudson.views.LastDurationColumn',
195
+ 'kind' => 'hudson.views.LastDurationColumn' },
196
+ 'Build Button' => { 'stapler-class' => 'hudson.views.BuildButtonColumn',
197
+ 'kind' => 'hudson.views.BuildButtonColumn' },
198
+ 'Categorized - Job' => { 'stapler-class' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn',
199
+ 'kind' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn' }
210
200
  }
211
201
  end
212
202
 
@@ -9,18 +9,26 @@ describe JenkinsPipelineBuilder::Compiler do
9
9
  log_location: '/dev/null'
10
10
  }
11
11
  end
12
- let(:compiler) { JenkinsPipelineBuilder::Compiler }
13
- let(:settings_project) { { name: 'DummyPipeline', type: :project, value: { name: 'DummyPipeline', jobs: ['{{name}}-00', { '{{name}}-01' => { job_name: '{{name}}-02' } }] } } }
12
+ let(:generator) { double(job_collection: double(collection: job_collection)) }
13
+ let(:compiler) { JenkinsPipelineBuilder::Compiler.new generator }
14
14
  let(:settings_global) { { name: 'global', description: 'Do not edit this job through the web!', discard_days: '14', pipeline_repo: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', pipeline_branch: 'master' } }
15
15
  let(:settings_bag) { { name: 'DummyPipeline', description: 'Do not edit this job through the web!', discard_days: '14', pipeline_repo: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', pipeline_branch: 'master' } }
16
- let(:job0) { { name: '{{name}}-00', description: '{{description}}', scm_provider: 'git', scm_url: '{{pipeline_repo}}', scm_branch: '{{pipeline_branch}}', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running {{name}}'\necho 'About to run {{job@{{name}}-01}}'\n" }], publishers: [{ downstream: { project: '{{job@{{name}}-01}}' } }] } }
17
- let(:job0_compiled) { { name: 'DummyPipeline-00', description: 'Do not edit this job through the web!', scm_provider: 'git', scm_url: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', scm_branch: 'master', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running DummyPipeline'\necho 'About to run DummyPipeline-02'\n" }], publishers: [{ downstream: { project: 'DummyPipeline-02' } }] } }
18
- let(:job2) { { name: '{{name}}-02', description: '{{description}}', scm_provider: 'git', scm_url: '{{pipeline_repo}}', scm_branch: '{{pipeline_branch}}', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running {{name}}'" }] } }
19
- let(:job2_compiled) { { name: 'DummyPipeline-02', description: 'Do not edit this job through the web!', scm_provider: 'git', scm_url: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', scm_branch: 'master', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running DummyPipeline'" }] } }
20
16
  let(:job_collection) { { '{{name}}-00' => { name: '{{name}}-00', type: :job, value: { name: '{{name}}-00', description: '{{description}}', scm_provider: 'git', scm_url: '{{pipeline_repo}}', scm_branch: '{{pipeline_branch}}', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running {{name}}'\necho 'About to run {{job@{{name}}-01}}'\n" }], publishers: [{ downstream: { project: '{{job@{{name}}-01}}' } }] } }, '{{name}}-01' => { name: '{{name}}-01', type: :job, value: { name: '{{name}}-02', description: '{{description}}', scm_provider: 'git', scm_url: '{{pipeline_repo}}', scm_branch: '{{pipeline_branch}}', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running {{name}}'" }] }, job_name: '{{name}}-02' }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'Do not edit this job through the web!', discard_days: '14', pipeline_repo: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', pipeline_branch: 'master' } }, 'DummyPipeline' => { name: 'DummyPipeline', type: :project, value: { name: 'DummyPipeline', jobs: [{ '{{name}}-00' => {}, result: { name: 'DummyPipeline-00', description: 'Do not edit this job through the web!', scm_provider: 'git', scm_url: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', scm_branch: 'master', scm_params: { remote_name: 'origin', skip_tag: true }, wrappers: [{ ansicolor: true }], builders: [{ shell_command: "echo 'Running DummyPipeline'\necho 'About to run DummyPipeline-02'\n" }], publishers: [{ downstream: { project: 'DummyPipeline-02' } }] } }, { '{{name}}-01' => { job_name: '{{name}}-02' } }] }, settings: { name: 'DummyPipeline', description: 'Do not edit this job through the web!', discard_days: '14', pipeline_repo: 'git@github.com:constantcontact/jenkins_pipeline_builder.git', pipeline_branch: 'master' } } } }
21
17
 
22
18
  describe '#get_settings_bag' do
23
19
  it 'merge settings' do
20
+ settings_project = {
21
+ name: 'DummyPipeline',
22
+ type: :project,
23
+ value: {
24
+ name: 'DummyPipeline',
25
+ jobs: [
26
+ '{{name}}-00',
27
+ { '{{name}}-01' => { job_name: '{{name}}-02' }
28
+ }
29
+ ]
30
+ }
31
+ }
24
32
  settings = compiler.get_settings_bag(settings_project, settings_global)
25
33
  expect(settings).to eq(settings_bag)
26
34
  end
@@ -28,13 +36,67 @@ describe JenkinsPipelineBuilder::Compiler do
28
36
 
29
37
  describe '#compile' do
30
38
  it 'compiles a job with a name change' do
31
- result = compiler.compile(job2, settings_bag, job_collection)
32
- expect(result[1]).to eq(job2_compiled)
39
+ job = {
40
+ name: '{{name}}-02',
41
+ description: '{{description}}',
42
+ scm_provider: 'git',
43
+ scm_url: '{{pipeline_repo}}',
44
+ scm_branch: '{{pipeline_branch}}',
45
+ scm_params: {
46
+ remote_name: 'origin',
47
+ skip_tag: true
48
+ },
49
+ wrappers: [{ ansicolor: true }],
50
+ builders: [{ shell_command: "echo 'Running {{name}}'" }]
51
+ }
52
+ job_compiled = {
53
+ name: 'DummyPipeline-02',
54
+ description: 'Do not edit this job through the web!',
55
+ scm_provider: 'git',
56
+ scm_url: 'git@github.com:constantcontact/jenkins_pipeline_builder.git',
57
+ scm_branch: 'master',
58
+ scm_params: {
59
+ remote_name: 'origin',
60
+ skip_tag: true
61
+ },
62
+ wrappers: [{ ansicolor: true }],
63
+ builders: [{ shell_command: "echo 'Running DummyPipeline'" }]
64
+ }
65
+ result = compiler.compile(job, settings_bag)
66
+ expect(result[1]).to eq(job_compiled)
33
67
  end
34
68
 
35
69
  it 'compiles a job with a downstream name change' do
36
- result = compiler.compile(job0, settings_bag, job_collection)
37
- expect(result[1]).to eq(job0_compiled)
70
+ job = {
71
+ name: '{{name}}-00',
72
+ description: '{{description}}',
73
+ scm_provider: 'git',
74
+ scm_url: '{{pipeline_repo}}',
75
+ scm_branch: '{{pipeline_branch}}',
76
+ scm_params: {
77
+ remote_name: 'origin',
78
+ skip_tag: true
79
+ },
80
+ wrappers: [{ ansicolor: true }],
81
+ builders: [{ shell_command: "echo 'Running {{name}}'\necho 'About to run {{job@{{name}}-01}}'\n" }],
82
+ publishers: [{ downstream: { project: '{{job@{{name}}-01}}' } }]
83
+ }
84
+ job_compiled = {
85
+ name: 'DummyPipeline-00',
86
+ description: 'Do not edit this job through the web!',
87
+ scm_provider: 'git',
88
+ scm_url: 'git@github.com:constantcontact/jenkins_pipeline_builder.git',
89
+ scm_branch: 'master',
90
+ scm_params: {
91
+ remote_name: 'origin',
92
+ skip_tag: true
93
+ },
94
+ wrappers: [{ ansicolor: true }],
95
+ builders: [{ shell_command: "echo 'Running DummyPipeline'\necho 'About to run DummyPipeline-02'\n" }],
96
+ publishers: [{ downstream: { project: 'DummyPipeline-02' } }]
97
+ }
98
+ result = compiler.compile(job, settings_bag)
99
+ expect(result[1]).to eq(job_compiled)
38
100
  end
39
101
 
40
102
  it 'compiles an enabled job with a string parameter' do
@@ -44,7 +106,7 @@ describe JenkinsPipelineBuilder::Compiler do
44
106
  triggers: [{ periodic_build: 'this_is_a_var' }] }
45
107
  settings_bag = { var: 'this_is_a_var', name: 'name' }
46
108
 
47
- result = compiler.compile(my_job, settings_bag, job_collection)
109
+ result = compiler.compile(my_job, settings_bag)
48
110
  expect(result[1]).to eq(compiled_job)
49
111
  end
50
112
  end
@@ -53,8 +115,7 @@ describe JenkinsPipelineBuilder::Compiler do
53
115
  it 'generates correct new jobs with true' do
54
116
  item = { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } }
55
117
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true }
56
- job_collection = { '{{name}}-build' => { name: '{{name}}-build', type: :job, value: { name: '{{name}}-build', project_name: '{{name}}', builders: [{ maven3: { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } } }] } }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } }, 'PushTest' => { name: 'PushTest', type: :project, value: { name: 'PushTest', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', jobs: [{ :"{{name}}-build" => {} }] }, settings: { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } } }
57
- success, item = compiler.handle_enable(item, settings, job_collection)
118
+ success, item = compiler.handle_enable(item, settings)
58
119
  expect(success).to be true
59
120
  expect(item).to eq(rootPom: 'path_to_pomasd')
60
121
  end
@@ -62,8 +123,7 @@ describe JenkinsPipelineBuilder::Compiler do
62
123
  it 'generates correct new jobs when the params are a string' do
63
124
  item = { enabled: '{{use1}}', parameters: 'path_to_pomasd' }
64
125
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true }
65
- job_collection = { '{{name}}-build' => { name: '{{name}}-build', type: :job, value: { name: '{{name}}-build', project_name: '{{name}}', builders: [{ maven3: { enabled: '{{use1}}', parameters: 'path_to_pomasd' } }] } }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } }, 'PushTest' => { name: 'PushTest', type: :project, value: { name: 'PushTest', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', jobs: [{ :"{{name}}-build" => {} }] }, settings: { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } } }
66
- success, item = compiler.handle_enable(item, settings, job_collection)
126
+ success, item = compiler.handle_enable(item, settings)
67
127
  expect(success).to be true
68
128
  expect(item).to eq('path_to_pomasd')
69
129
  end
@@ -71,8 +131,7 @@ describe JenkinsPipelineBuilder::Compiler do
71
131
  it 'generates correct new jobs with false' do
72
132
  item = { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } }
73
133
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: false }
74
- job_collection = { '{{name}}-build' => { name: '{{name}}-build', type: :job, value: { name: '{{name}}-build', project_name: '{{name}}', builders: [{ maven3: { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } } }] } }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } }, 'PushTest' => { name: 'PushTest', type: :project, value: { name: 'PushTest', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', jobs: [{ :"{{name}}-build" => {} }] }, settings: { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } } }
75
- success, item = compiler.handle_enable(item, settings, job_collection)
134
+ success, item = compiler.handle_enable(item, settings)
76
135
  expect(success).to be true
77
136
  expect(item).to eq({})
78
137
  end
@@ -80,16 +139,14 @@ describe JenkinsPipelineBuilder::Compiler do
80
139
  it 'fails when value not found' do
81
140
  item = { enabled: '{{use_fail}}', parameters: { rootPom: 'path_to_pomasd' } }
82
141
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true }
83
- job_collection = { '{{name}}-build' => { name: '{{name}}-build', type: :job, value: { name: '{{name}}-build', project_name: '{{name}}', builders: [{ maven3: { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } } }] } }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } }, 'PushTest' => { name: 'PushTest', type: :project, value: { name: 'PushTest', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', jobs: [{ :"{{name}}-build" => {} }] }, settings: { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true } } }
84
- success, _ = compiler.handle_enable(item, settings, job_collection)
142
+ success, _ = compiler.handle_enable(item, settings)
85
143
  expect(success).to be false
86
144
  end
87
145
 
88
146
  it 'removes empty builders' do
89
147
  item = { enabled: '{{use}}', parameters: { rootPom: 'one' } }
90
148
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use: false }
91
- job_collection = { '{{name}}-build' => { name: '{{name}}-build', type: :job, value: { name: '{{name}}-build', project_name: '{{name}}', builders: [{ maven3: { enabled: '{{use}}', parameters: { rootPom: 'one' } } }] }, use: false }, 'global' => { name: 'global', type: :defaults, value: { name: 'global', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/' } }, 'PushTest' => { name: 'PushTest', type: :project, value: { name: 'PushTest', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', jobs: [{ :"{{name}}-build" => { use: false } }] }, settings: { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/' } } }
92
- success, result = compiler.compile_hash(item, settings, job_collection)
149
+ success, result = compiler.handle_enable(item, settings)
93
150
  expect(success).to be true
94
151
  expect(result).to eq({})
95
152
  end