jenkins_pipeline_builder 1.6.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +22 -3
- data/.rubocop_todo.yml +0 -6
- data/.travis.yml +0 -1
- data/Dockerfile +30 -0
- data/README.md +1 -0
- data/jenkins_pipeline_builder.gemspec +5 -8
- data/lib/jenkins_pipeline_builder.rb +2 -2
- data/lib/jenkins_pipeline_builder/cli/describe.rb +0 -2
- data/lib/jenkins_pipeline_builder/cli/helper.rb +3 -2
- data/lib/jenkins_pipeline_builder/cli/list.rb +2 -1
- data/lib/jenkins_pipeline_builder/cli/pipeline.rb +5 -4
- data/lib/jenkins_pipeline_builder/compiler.rb +15 -2
- data/lib/jenkins_pipeline_builder/extension_set.rb +5 -1
- data/lib/jenkins_pipeline_builder/extensions.rb +6 -2
- data/lib/jenkins_pipeline_builder/extensions/build_steps.rb +1 -1
- data/lib/jenkins_pipeline_builder/extensions/helpers/job_attributes/parameters_helper.rb +2 -2
- data/lib/jenkins_pipeline_builder/extensions/helpers/publishers/cobertura_report_helper.rb +1 -0
- data/lib/jenkins_pipeline_builder/extensions/job_attributes.rb +24 -0
- data/lib/jenkins_pipeline_builder/extensions/publishers.rb +26 -1
- data/lib/jenkins_pipeline_builder/extensions/wrappers.rb +2 -1
- data/lib/jenkins_pipeline_builder/generator.rb +7 -2
- data/lib/jenkins_pipeline_builder/job.rb +3 -0
- data/lib/jenkins_pipeline_builder/job_collection.rb +5 -3
- data/lib/jenkins_pipeline_builder/module_registry.rb +4 -0
- data/lib/jenkins_pipeline_builder/promotion.rb +1 -0
- data/lib/jenkins_pipeline_builder/pull_request_generator.rb +12 -11
- data/lib/jenkins_pipeline_builder/remote_dependencies.rb +2 -2
- data/lib/jenkins_pipeline_builder/utils.rb +12 -7
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/lib/jenkins_pipeline_builder/view.rb +3 -1
- data/spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extension_dsl_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extension_set_spec.rb +3 -3
- data/spec/lib/jenkins_pipeline_builder/extensions/build_steps_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +6 -6
- data/spec/lib/jenkins_pipeline_builder/extensions/job_attributes_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/promotion_conditions_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/publishers_spec.rb +28 -11
- data/spec/lib/jenkins_pipeline_builder/extensions/registered_spec.rb +3 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/triggers_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/wrappers_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/project.yaml +1 -0
- data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +90 -36
- data/spec/lib/jenkins_pipeline_builder/job_collection_spec.rb +2 -2
- data/spec/lib/jenkins_pipeline_builder/job_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/promotion_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb +16 -16
- data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/utils_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/view_spec.rb +2 -2
- data/spec/requests/pipeline_spec.rb +1 -1
- metadata +20 -20
@@ -227,6 +227,7 @@ job_attribute do
|
|
227
227
|
if params[:changelog_to_branch]
|
228
228
|
opts = params[:changelog_to_branch]
|
229
229
|
raise 'remote and branch are required for changelog_to_branch' unless opts[:remote] && opts[:branch]
|
230
|
+
|
230
231
|
send('hudson.plugins.git.extensions.impl.ChangelogToBranch') do
|
231
232
|
options do
|
232
233
|
compareRemote opts[:remote]
|
@@ -264,6 +265,29 @@ job_attribute do
|
|
264
265
|
end
|
265
266
|
end
|
266
267
|
|
268
|
+
job_attribute do
|
269
|
+
name :google_chat
|
270
|
+
plugin_id 'google-chat-notification'
|
271
|
+
description 'This plugin allows your team to setup build notifications to be sent to Google Chat rooms.'
|
272
|
+
jenkins_name 'Google Chat Notification'
|
273
|
+
announced false
|
274
|
+
|
275
|
+
xml path: '//properties' do |params|
|
276
|
+
send('io.cnaik.GoogleChatNotification', 'plugin' => 'google-chat-notification') do
|
277
|
+
url params[:url] || ''
|
278
|
+
notifyAborted params[:notifyAborted] || false
|
279
|
+
notifyFailure params[:notifyFailure] || false
|
280
|
+
notifyNotBuilt params[:notifyNotBuilt] || false
|
281
|
+
notifySuccess params[:notifySuccess] || false
|
282
|
+
notifyUnstable params[:notifyUnstable] || false
|
283
|
+
notifyBackToNormal params[:notifyBackToNormal] || false
|
284
|
+
suppressInfoLoggers params[:suppressInfoLoggers] || false
|
285
|
+
sameThreadNotification params[:sameThreadNotification] || false
|
286
|
+
message params[:message] || ''
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
267
291
|
job_attribute do
|
268
292
|
name :hipchat
|
269
293
|
plugin_id 'hipchat'
|
@@ -72,6 +72,32 @@ publisher do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
publisher do
|
76
|
+
name :google_chat
|
77
|
+
plugin_id 'google-chat-notification'
|
78
|
+
description 'This plugin allows your team to setup build notifications to be sent to Google Chat rooms.'
|
79
|
+
jenkins_name 'Google Chat Notification'
|
80
|
+
announced false
|
81
|
+
|
82
|
+
version '0' do
|
83
|
+
xml do |params|
|
84
|
+
params = {} if params == true
|
85
|
+
send('io.cnaik.GoogleChatNotification') do
|
86
|
+
url params[:url] || ''
|
87
|
+
message params[:message] || ''
|
88
|
+
notifyAborted params[:notifyAborted] || false
|
89
|
+
notifyFailure params[:notifyFailure] || false
|
90
|
+
notifyNotBuilt params[:notifyNotBuilt] || false
|
91
|
+
notifySuccess params[:notifySuccess] || false
|
92
|
+
notifyUnstable params[:notifyUnstable] || false
|
93
|
+
notifyBackToNormal params[:notifyBackToNormal] || false
|
94
|
+
suppressInfoLoggers params[:suppressInfoLoggers] || false
|
95
|
+
sameThreadNotification params[:sameThreadNotification] || false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
75
101
|
publisher do
|
76
102
|
name :hipchat
|
77
103
|
plugin_id 'hipchat'
|
@@ -382,7 +408,6 @@ publisher do
|
|
382
408
|
xml do |params|
|
383
409
|
send('hudson.plugins.sonar.SonarPublisher') do
|
384
410
|
jdk params[:jdk] || '(Inherit From Job)'
|
385
|
-
branch params[:branch] || ''
|
386
411
|
language
|
387
412
|
mavenOpts
|
388
413
|
jobAdditionalProperties params[:additional_properties] || ''
|
@@ -26,7 +26,6 @@ wrapper do
|
|
26
26
|
announced false
|
27
27
|
jenkins_name 'Color ANSI Console Output'
|
28
28
|
description 'This plugin adds support for ANSI escape sequences, including color, to Console Output.'
|
29
|
-
|
30
29
|
xml do |_|
|
31
30
|
send('hudson.plugins.ansicolor.AnsiColorBuildWrapper') do
|
32
31
|
colorMapName 'xterm'
|
@@ -99,6 +98,7 @@ wrapper do
|
|
99
98
|
passwords = wrapper
|
100
99
|
end
|
101
100
|
break unless passwords
|
101
|
+
|
102
102
|
passwordEntries do
|
103
103
|
passwords.each do |password|
|
104
104
|
EnvInjectPasswordEntry do
|
@@ -148,6 +148,7 @@ wrapper do
|
|
148
148
|
resolvePattern
|
149
149
|
matrixParams wrapper[:properties]
|
150
150
|
deployBuildInfo wrapper[:'publish-build-info']
|
151
|
+
useSpecs false
|
151
152
|
includeEnvVars false
|
152
153
|
envVarsPatterns do
|
153
154
|
includePatterns
|
@@ -56,7 +56,7 @@ module JenkinsPipelineBuilder
|
|
56
56
|
publish(project_name || job_collection.projects.first[:name])
|
57
57
|
end
|
58
58
|
|
59
|
-
def pull_request(path, project_name)
|
59
|
+
def pull_request(path, project_name, base_branch_only = false)
|
60
60
|
logger.info "Pull Request Generator Running from path #{path}"
|
61
61
|
load_job_collection path unless job_collection.loaded?
|
62
62
|
defaults = job_collection.defaults[:value]
|
@@ -64,7 +64,9 @@ module JenkinsPipelineBuilder
|
|
64
64
|
pr_generator.delete_closed_prs
|
65
65
|
errors = []
|
66
66
|
pr_generator.open_prs.each do |pr|
|
67
|
-
|
67
|
+
next if base_branch_only && defaults[:git_branch] != pr[:base]
|
68
|
+
|
69
|
+
pr_generator.convert! job_collection, pr[:number]
|
68
70
|
error = publish(project_name)
|
69
71
|
errors << error unless error.empty?
|
70
72
|
end
|
@@ -102,6 +104,7 @@ module JenkinsPipelineBuilder
|
|
102
104
|
def resolve_job_by_name(name, settings = {})
|
103
105
|
job = job_collection.get_item(name)
|
104
106
|
raise "Failed to locate job by name '#{name}'" if job.nil?
|
107
|
+
|
105
108
|
job_value = job[:value]
|
106
109
|
logger.debug "Compiling job #{name}"
|
107
110
|
compiler = JenkinsPipelineBuilder::Compiler.new self
|
@@ -211,6 +214,7 @@ module JenkinsPipelineBuilder
|
|
211
214
|
# A hash of promoted_builds names => associated job names
|
212
215
|
promotion_job_pairs = jobs.each_with_object({}) do |j, acc|
|
213
216
|
next unless j[:result][:promoted_builds]
|
217
|
+
|
214
218
|
j[:result][:promoted_builds].each do |promotion_name|
|
215
219
|
acc[promotion_name] = j[:result][:name]
|
216
220
|
end
|
@@ -235,6 +239,7 @@ module JenkinsPipelineBuilder
|
|
235
239
|
logger.info "Processing #{i}"
|
236
240
|
job = i[:result]
|
237
241
|
raise "Result is empty for #{i}" if job.nil?
|
242
|
+
|
238
243
|
job = Job.new job
|
239
244
|
success, payload = job.create_or_update
|
240
245
|
errors[job.name] = payload unless success
|
@@ -17,6 +17,7 @@ module JenkinsPipelineBuilder
|
|
17
17
|
def create_or_update
|
18
18
|
success, payload = to_xml
|
19
19
|
return success, payload unless success
|
20
|
+
|
20
21
|
xml = payload
|
21
22
|
return local_output(xml) if JenkinsPipelineBuilder.debug || JenkinsPipelineBuilder.file_mode
|
22
23
|
|
@@ -31,6 +32,7 @@ module JenkinsPipelineBuilder
|
|
31
32
|
job[:job_type] = 'free_style' unless job[:job_type]
|
32
33
|
type = job[:job_type]
|
33
34
|
return false, "Job type: #{type} is not one of #{job_methods.join(', ')}" unless known_type? type
|
35
|
+
|
34
36
|
@xml = setup_freestyle_base(job)
|
35
37
|
payload = send("update_#{type}")
|
36
38
|
|
@@ -109,6 +111,7 @@ module JenkinsPipelineBuilder
|
|
109
111
|
if params.key?(:template)
|
110
112
|
template_name = params[:template]
|
111
113
|
raise "Job template '#{template_name}' can't be resolved." unless @job_templates.key?(template_name)
|
114
|
+
|
112
115
|
params.delete(:template)
|
113
116
|
template = @job_templates[template_name]
|
114
117
|
params = template.deep_merge(params)
|
@@ -75,8 +75,8 @@ module JenkinsPipelineBuilder
|
|
75
75
|
hash.each do |section|
|
76
76
|
load_section section, remote
|
77
77
|
end
|
78
|
-
rescue StandardError =>
|
79
|
-
raise CustomErrors::ParseError.new
|
78
|
+
rescue StandardError => e
|
79
|
+
raise CustomErrors::ParseError.new e.message, path
|
80
80
|
end
|
81
81
|
|
82
82
|
def load_section(section, remote)
|
@@ -108,6 +108,7 @@ module JenkinsPipelineBuilder
|
|
108
108
|
# skip if the existing item is local and the new item is remote
|
109
109
|
return if remote && !existing_remote
|
110
110
|
raise "Duplicate item with name '#{name}' was detected." unless existing_remote && !remote
|
111
|
+
|
111
112
|
# override if the existing item is remote and the new is local
|
112
113
|
logger.info "Duplicate item with name '#{name}' was detected from the remote folder."
|
113
114
|
end
|
@@ -118,9 +119,10 @@ module JenkinsPipelineBuilder
|
|
118
119
|
path = "#{path}/extensions"
|
119
120
|
path = File.expand_path(path, Dir.getwd)
|
120
121
|
return unless File.directory?(path)
|
122
|
+
|
121
123
|
logger.info "Loading extensions from folder #{path}"
|
122
124
|
logger.info Dir.glob("#{path}/*.rb").inspect
|
123
|
-
Dir.glob("#{path}/**/*.rb").each do |file|
|
125
|
+
Dir.glob("#{path}/**/*.rb").sort.each do |file|
|
124
126
|
logger.info "Loaded #{file}"
|
125
127
|
require file
|
126
128
|
end
|
@@ -29,6 +29,7 @@ module JenkinsPipelineBuilder
|
|
29
29
|
def versions
|
30
30
|
# Return a hash with a default of 1000 so that we'll get the newest in debug
|
31
31
|
return Hash.new { |_| '1000.0' } if JenkinsPipelineBuilder.debug
|
32
|
+
|
32
33
|
@versions ||= JenkinsPipelineBuilder.client.plugin.list_installed
|
33
34
|
end
|
34
35
|
|
@@ -77,6 +78,7 @@ module JenkinsPipelineBuilder
|
|
77
78
|
def get_by_path_collection(path, registry)
|
78
79
|
item = registry[path.shift.to_sym]
|
79
80
|
return item if path.count == 0
|
81
|
+
|
80
82
|
get_by_path_collection(path, item)
|
81
83
|
end
|
82
84
|
|
@@ -88,8 +90,10 @@ module JenkinsPipelineBuilder
|
|
88
90
|
def traverse_registry(registry, params, n_xml, strict = false)
|
89
91
|
params.each do |key, value|
|
90
92
|
next unless registry.is_a? Hash
|
93
|
+
|
91
94
|
unless registry.key? key
|
92
95
|
raise TypeError, "!!!! could not find key #{key} !!!!" if strict
|
96
|
+
|
93
97
|
next
|
94
98
|
end
|
95
99
|
reg_value = registry[key]
|
@@ -31,6 +31,7 @@ module JenkinsPipelineBuilder
|
|
31
31
|
def create(params, job_name)
|
32
32
|
success, payload = prom_to_xml(params)
|
33
33
|
return success, payload unless success
|
34
|
+
|
34
35
|
xml = payload
|
35
36
|
return local_output(xml) if JenkinsPipelineBuilder.debug || JenkinsPipelineBuilder.file_mode
|
36
37
|
|
@@ -29,32 +29,33 @@ module JenkinsPipelineBuilder
|
|
29
29
|
@open_prs = active_prs defaults[:github_site], defaults[:git_org], defaults[:git_repo_name]
|
30
30
|
end
|
31
31
|
|
32
|
-
def convert!(job_collection,
|
33
|
-
job_collection.defaults[:value][:application_name] = "#{application_name}-PR#{
|
34
|
-
job_collection.defaults[:value][:pull_request_number] =
|
35
|
-
job_collection.jobs.each { |j| override j[:value],
|
32
|
+
def convert!(job_collection, pr_number)
|
33
|
+
job_collection.defaults[:value][:application_name] = "#{application_name}-PR#{pr_number}"
|
34
|
+
job_collection.defaults[:value][:pull_request_number] = pr_number.to_s
|
35
|
+
job_collection.jobs.each { |j| override j[:value], pr_number }
|
36
36
|
end
|
37
37
|
|
38
38
|
def delete_closed_prs
|
39
39
|
return if JenkinsPipelineBuilder.debug
|
40
|
+
|
40
41
|
jobs_to_delete = JenkinsPipelineBuilder.client.job.list "^#{application_name}-PR(\\d+)-(.*)$"
|
41
|
-
open_prs.each do |
|
42
|
-
jobs_to_delete.reject! { |j| j.start_with? "#{application_name}-PR#{
|
42
|
+
open_prs.each do |pr|
|
43
|
+
jobs_to_delete.reject! { |j| j.start_with? "#{application_name}-PR#{pr[:number]}" }
|
43
44
|
end
|
44
45
|
jobs_to_delete.each { |j| JenkinsPipelineBuilder.client.job.delete j }
|
45
46
|
end
|
46
47
|
|
47
48
|
private
|
48
49
|
|
49
|
-
def override(job,
|
50
|
+
def override(job, pr_number)
|
50
51
|
git_version = JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version
|
51
|
-
job[:scm_branch] = "origin/pr/#{
|
52
|
+
job[:scm_branch] = "origin/pr/#{pr_number}/head"
|
52
53
|
job[:scm_params] ||= {}
|
53
|
-
job[:scm_params][:refspec] = "refs/pull/#{
|
54
|
+
job[:scm_params][:refspec] = "refs/pull/#{pr_number}/head:refs/remotes/origin/pr/#{pr_number}/head"
|
54
55
|
job[:scm_params][:changelog_to_branch] ||= {}
|
55
56
|
if Gem::Version.new(2.0) < git_version
|
56
57
|
job[:scm_params][:changelog_to_branch]
|
57
|
-
.merge!(remote: 'origin', branch: "pr/#{
|
58
|
+
.merge!(remote: 'origin', branch: "pr/#{pr_number}/head")
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
@@ -66,7 +67,7 @@ module JenkinsPipelineBuilder
|
|
66
67
|
begin
|
67
68
|
resp = Net::HTTP.get_response(URI.parse(url))
|
68
69
|
pulls = JSON.parse(resp.body)
|
69
|
-
pulls.map { |p| p['number'] }
|
70
|
+
pulls.map { |p| { number: p['number'], base: p['base']['ref'] } }
|
70
71
|
rescue StandardError
|
71
72
|
raise 'Failed connecting to github!'
|
72
73
|
end
|
@@ -88,8 +88,8 @@ module JenkinsPipelineBuilder
|
|
88
88
|
def download_yaml(url, file, remote_opts = {})
|
89
89
|
entries[url] = file
|
90
90
|
logger.info "Downloading #{url} to #{file}.tar"
|
91
|
-
open("#{file}.tar", 'w') do |local_file|
|
92
|
-
open(
|
91
|
+
File.open("#{file}.tar", 'w') do |local_file|
|
92
|
+
URI.parse(url).open(remote_opts) do |remote_file|
|
93
93
|
local_file.write(Zlib::GzipReader.new(remote_file).read)
|
94
94
|
end
|
95
95
|
end
|
@@ -30,14 +30,19 @@ end
|
|
30
30
|
module JenkinsPipelineBuilder
|
31
31
|
class Utils
|
32
32
|
# Code was duplicated from jeknins_api_client
|
33
|
-
def self.symbolize_keys_deep!(
|
34
|
-
return unless
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
def self.symbolize_keys_deep!(to_symbolize)
|
34
|
+
return unless to_symbolize.is_a?(Hash)
|
35
|
+
|
36
|
+
# This lint is disabled here because each_key requires that you not add or remove keys
|
37
|
+
# during iteration, which apparently this block does...
|
38
|
+
# rubocop:disable Style/HashEachMethods
|
39
|
+
to_symbolize.keys.each do |k|
|
40
|
+
ks = k.respond_to?(:to_sym) ? k.to_sym : k
|
41
|
+
to_symbolize[ks] = to_symbolize.delete k # Preserve order even when k == ks
|
42
|
+
symbolize_keys_deep! to_symbolize[ks] if to_symbolize[ks].is_a? Hash
|
43
|
+
to_symbolize[ks].each { |item| symbolize_keys_deep!(item) } if to_symbolize[ks].is_a?(Array)
|
40
44
|
end
|
45
|
+
# rubocop:enable Style/HashEachMethods
|
41
46
|
end
|
42
47
|
|
43
48
|
def self.symbolize_with_empty_hash!(array_of_maybe_str)
|
@@ -67,6 +67,7 @@ module JenkinsPipelineBuilder
|
|
67
67
|
def create(params)
|
68
68
|
# Name is a required parameter. Raise an error if not specified
|
69
69
|
raise ArgumentError, 'Name is required for creating view' unless params.is_a?(Hash) && params[:name]
|
70
|
+
|
70
71
|
clean_up_views(params) unless JenkinsPipelineBuilder.debug
|
71
72
|
params[:type] ||= 'listview'
|
72
73
|
create_base_view(params[:name], params[:type], params[:parent_view])
|
@@ -133,7 +134,8 @@ module JenkinsPipelineBuilder
|
|
133
134
|
'dashboardView' => 'hudson.plugins.view.dashboard.Dashboard',
|
134
135
|
'multijobView' => 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
|
135
136
|
}
|
136
|
-
raise "Type #{type} is not supported by Jenkins." unless types.
|
137
|
+
raise "Type #{type} is not supported by Jenkins." unless types.key?(type)
|
138
|
+
|
137
139
|
types[type]
|
138
140
|
end
|
139
141
|
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('spec_helper', __dir__)
|
2
2
|
|
3
3
|
describe JenkinsPipelineBuilder::ExtensionSet do
|
4
|
-
subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new('foo'){} }
|
4
|
+
subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new('foo') {} }
|
5
5
|
|
6
6
|
before :each do
|
7
7
|
set.name 'example'
|
@@ -108,7 +108,7 @@ describe JenkinsPipelineBuilder::ExtensionSet do
|
|
108
108
|
it 'works for snapshot/beta stuff' do
|
109
109
|
ext_versions ['1.9', '2.3']
|
110
110
|
|
111
|
-
set.installed_version = '2.0-SNAPSHOT
|
111
|
+
set.installed_version = '2.0-SNAPSHOT'
|
112
112
|
# Other examples
|
113
113
|
# set.installed_version = '2.0-beta-1'
|
114
114
|
# set.installed_version = '2.0+build.93'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('../spec_helper', __dir__)
|
2
2
|
|
3
3
|
describe 'builders' do
|
4
4
|
after :each do
|
@@ -329,9 +329,9 @@ describe 'builders' do
|
|
329
329
|
|
330
330
|
begin
|
331
331
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
332
|
-
rescue RuntimeError =>
|
333
|
-
puts "Caught error #{
|
334
|
-
error =
|
332
|
+
rescue RuntimeError => e
|
333
|
+
puts "Caught error #{e}"
|
334
|
+
error = e.to_s
|
335
335
|
end
|
336
336
|
builder = @n_xml.root.children.first
|
337
337
|
expect(builder.name).to match 'hudson.plugins.groovy.SystemGroovy'
|
@@ -407,8 +407,8 @@ describe 'builders' do
|
|
407
407
|
)
|
408
408
|
begin
|
409
409
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
410
|
-
rescue RuntimeError =>
|
411
|
-
puts 'Runtime Error: ' +
|
410
|
+
rescue RuntimeError => e
|
411
|
+
puts 'Runtime Error: ' + e.to_s
|
412
412
|
end
|
413
413
|
builder = @n_xml.root.children.first
|
414
414
|
expect(builder.name).to match 'jenkins.plugins.nodejs.NodeJsCommandInterpreter'
|