jenkins_pipeline_builder 0.4.2 → 0.5.0

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +65 -0
  3. data/LICENSE +1 -1
  4. data/README.md +64 -2
  5. data/Rakefile +13 -11
  6. data/bin/generate +2 -4
  7. data/jenkins_pipeline_builder.gemspec +14 -11
  8. data/lib/jenkins_pipeline_builder.rb +2 -1
  9. data/lib/jenkins_pipeline_builder/builders.rb +89 -33
  10. data/lib/jenkins_pipeline_builder/cli/base.rb +21 -29
  11. data/lib/jenkins_pipeline_builder/cli/helper.rb +12 -15
  12. data/lib/jenkins_pipeline_builder/cli/pipeline.rb +6 -1
  13. data/lib/jenkins_pipeline_builder/cli/view.rb +2 -2
  14. data/lib/jenkins_pipeline_builder/compiler.rb +58 -56
  15. data/lib/jenkins_pipeline_builder/generator.rb +362 -172
  16. data/lib/jenkins_pipeline_builder/job_builder.rb +48 -45
  17. data/lib/jenkins_pipeline_builder/module_registry.rb +4 -6
  18. data/lib/jenkins_pipeline_builder/publishers.rb +53 -38
  19. data/lib/jenkins_pipeline_builder/pull_request.rb +156 -0
  20. data/lib/jenkins_pipeline_builder/triggers.rb +24 -25
  21. data/lib/jenkins_pipeline_builder/utils.rb +13 -7
  22. data/lib/jenkins_pipeline_builder/version.rb +2 -2
  23. data/lib/jenkins_pipeline_builder/view.rb +120 -98
  24. data/lib/jenkins_pipeline_builder/wrappers.rb +44 -44
  25. data/lib/jenkins_pipeline_builder/xml_helper.rb +4 -4
  26. data/spec/func_tests/spec_helper.rb +2 -2
  27. data/spec/func_tests/view_spec.rb +6 -6
  28. data/spec/unit_tests/compiler_spec.rb +7 -7
  29. data/spec/unit_tests/fixtures/files/Job-Gem-Build.xml +2 -2
  30. data/spec/unit_tests/fixtures/files/Job-Gem-Build.yaml +1 -0
  31. data/spec/unit_tests/fixtures/files/concurrent_build.xml +17 -0
  32. data/spec/unit_tests/fixtures/files/concurrent_build.yaml +4 -0
  33. data/spec/unit_tests/fixtures/files/downstream_blocking.xml +19 -0
  34. data/spec/unit_tests/fixtures/files/downstream_blocking.yaml +15 -0
  35. data/spec/unit_tests/fixtures/files/groovy_postbuild.xml +29 -0
  36. data/spec/unit_tests/fixtures/files/groovy_postbuild.yaml +9 -0
  37. data/spec/unit_tests/generator_spec.rb +30 -25
  38. data/spec/unit_tests/module_registry_spec.rb +9 -9
  39. data/spec/unit_tests/resolve_dependencies_spec.rb +108 -89
  40. data/spec/unit_tests/spec_helper.rb +1 -1
  41. metadata +62 -4
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -22,51 +22,50 @@
22
22
 
23
23
  module JenkinsPipelineBuilder
24
24
  class Triggers
25
- def self.enable_git_push(git_push, xml)
26
- xml.send('com.cloudbees.jenkins.GitHubPushTrigger') {
25
+ def self.enable_git_push(_, xml)
26
+ xml.send('com.cloudbees.jenkins.GitHubPushTrigger') do
27
27
  xml.spec
28
- }
28
+ end
29
29
  end
30
30
 
31
31
  def self.enable_scm_polling(scm_polling, xml)
32
- xml.send('hudson.triggers.SCMTrigger') {
32
+ xml.send('hudson.triggers.SCMTrigger') do
33
33
  xml.spec scm_polling
34
34
  xml.ignorePostCommitHooks false
35
- }
35
+ end
36
36
  end
37
37
 
38
38
  def self.enable_periodic_build(periodic_build, xml)
39
- xml.send('hudson.triggers.TimerTrigger') {
39
+ xml.send('hudson.triggers.TimerTrigger') do
40
40
  xml.spec periodic_build
41
- }
41
+ end
42
42
  end
43
43
 
44
44
  def self.enable_upstream_check(params, xml)
45
45
  case params[:status]
46
- when "unstable"
47
- name = "UNSTABLE"
48
- ordinal = "1"
49
- color = "yellow"
50
- when "failed"
51
- name = "FAILURE"
52
- ordinal = "2"
53
- color = "RED"
46
+ when 'unstable'
47
+ name = 'UNSTABLE'
48
+ ordinal = '1'
49
+ color = 'yellow'
50
+ when 'failed'
51
+ name = 'FAILURE'
52
+ ordinal = '2'
53
+ color = 'RED'
54
54
  else
55
- name = "SUCCESS"
56
- ordinal = "0"
57
- color = "BLUE"
55
+ name = 'SUCCESS'
56
+ ordinal = '0'
57
+ color = 'BLUE'
58
58
  end
59
- xml.send('jenkins.triggers.ReverseBuildTrigger') {
59
+ xml.send('jenkins.triggers.ReverseBuildTrigger') do
60
60
  xml.spec
61
61
  xml.upstreamProjects params[:projects]
62
- xml.send('threshold'){
62
+ xml.send('threshold') do
63
63
  xml.name name
64
64
  xml.ordinal ordinal
65
65
  xml.color color
66
66
  xml.completeBuild true
67
- }
68
- }
67
+ end
68
+ end
69
69
  end
70
-
71
70
  end
72
- end
71
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -23,8 +23,8 @@
23
23
  module JenkinsPipelineBuilder
24
24
  class ::Hash
25
25
  def deep_merge(second)
26
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
27
- self.merge(second, &merger)
26
+ merger = proc { |_key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : v2 }
27
+ merge(second, &merger)
28
28
  end
29
29
  end
30
30
 
@@ -36,11 +36,17 @@ module JenkinsPipelineBuilder
36
36
  ks = k.respond_to?(:to_sym) ? k.to_sym : k
37
37
  h[ks] = h.delete k # Preserve order even when k == ks
38
38
  symbolize_keys_deep! h[ks] if h[ks].kind_of? Hash
39
- if h[ks].kind_of? Array
40
- #puts "Array #{h[ks]}"
41
- h[ks].each { |item| symbolize_keys_deep!(item) }
39
+ h[ks].each { |item| symbolize_keys_deep!(item) } if h[ks].is_a?(Array)
40
+ end
41
+ end
42
+ def self.hash_merge!(old, new)
43
+ old.merge!(new) do |_key, old, new|
44
+ if old.is_a?(Hash) && new.is_a?(Hash)
45
+ hash_merge!(old, new)
46
+ else
47
+ new
42
48
  end
43
49
  end
44
50
  end
45
51
  end
46
- end
52
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = "0.4.2"
24
+ VERSION = '0.5.0'
25
25
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -45,20 +45,20 @@ module JenkinsPipelineBuilder
45
45
 
46
46
  def get_mode(type)
47
47
  case type
48
- when 'listview'
49
- 'hudson.model.ListView'
50
- when 'myview'
51
- 'hudson.model.MyView'
52
- when 'nestedView'
53
- 'hudson.plugins.nested_view.NestedView'
54
- when 'categorizedView'
55
- 'org.jenkinsci.plugins.categorizedview.CategorizedJobsView'
56
- when 'dashboardView'
57
- 'hudson.plugins.view.dashboard.Dashboard'
58
- when 'multijobView'
59
- 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
60
- else
61
- raise "Type #{type} is not supported by Jenkins."
48
+ when 'listview'
49
+ 'hudson.model.ListView'
50
+ when 'myview'
51
+ 'hudson.model.MyView'
52
+ when 'nestedView'
53
+ 'hudson.plugins.nested_view.NestedView'
54
+ when 'categorizedView'
55
+ 'org.jenkinsci.plugins.categorizedview.CategorizedJobsView'
56
+ when 'dashboardView'
57
+ 'hudson.plugins.view.dashboard.Dashboard'
58
+ when 'multijobView'
59
+ 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
60
+ else
61
+ fail "Type #{type} is not supported by Jenkins."
62
62
  end
63
63
  end
64
64
 
@@ -72,12 +72,12 @@ module JenkinsPipelineBuilder
72
72
  @logger.info "Creating a view '#{view_name}' of type '#{type}'"
73
73
  mode = get_mode(type)
74
74
  initial_post_params = {
75
+ 'name' => view_name,
76
+ 'mode' => mode,
77
+ 'json' => {
75
78
  'name' => view_name,
76
- 'mode' => mode,
77
- 'json' => {
78
- 'name' => view_name,
79
- 'mode' => mode
80
- }.to_json
79
+ 'mode' => mode
80
+ }.to_json
81
81
  }
82
82
 
83
83
  if @generator.debug
@@ -110,46 +110,57 @@ module JenkinsPipelineBuilder
110
110
  #
111
111
  def create(params)
112
112
  # Name is a required parameter. Raise an error if not specified
113
- raise ArgumentError, "Name is required for creating view" \
114
- unless params.is_a?(Hash) && params[:name]
113
+ fail ArgumentError, 'Name is required for creating view' unless params.is_a?(Hash) && params[:name]
115
114
  unless @generator.debug
116
- if @client.view.exists?(params[:name])
117
- @client.view.delete(params[:name])
115
+ # If we have a parent view, we need to do some additional checks
116
+ if params[:parent_view]
117
+ # If there is no current parent view, create it
118
+ unless @client.view.exists?(params[:parent_view])
119
+ create_base_view(params[:parent_view], 'nestedView')
120
+ end
121
+ # If the view currently exists, delete it
122
+ if exists?(params[:name], params[:parent_view])
123
+ delete(params[:name], params[:parent_view])
124
+ end
125
+ else
126
+ if @client.view.exists?(params[:name])
127
+ @client.view.delete(params[:name])
128
+ end
118
129
  end
119
130
  end
120
131
  params[:type] = 'listview' unless params[:type]
121
132
  create_base_view(params[:name], params[:type], params[:parent_view])
122
133
  @logger.debug "Creating a #{params[:type]} view with params: #{params.inspect}"
123
134
  status_filter = case params[:status_filter]
124
- when "all_selected_jobs"
125
- ""
126
- when "enabled_jobs_only"
127
- "1"
128
- when "disabled_jobs_only"
129
- "2"
130
- else
131
- ""
135
+ when 'all_selected_jobs'
136
+ ''
137
+ when 'enabled_jobs_only'
138
+ '1'
139
+ when 'disabled_jobs_only'
140
+ '2'
141
+ else
142
+ ''
132
143
  end
133
144
 
134
145
  json = {
135
- "name" => params[:name],
136
- "description" => params[:description],
137
- "mode" => get_mode(params[:type]),
138
- "statusFilter" => "",
139
- "columns" => get_columns(params[:type])
146
+ 'name' => params[:name],
147
+ 'description' => params[:description],
148
+ 'mode' => get_mode(params[:type]),
149
+ 'statusFilter' => '',
150
+ 'columns' => get_columns(params[:type])
140
151
  }
141
- json.merge!("groupingRules" => params[:groupingRules]) if params[:groupingRules]
152
+ json.merge!('groupingRules' => params[:groupingRules]) if params[:groupingRules]
142
153
  post_params = {
143
- "name" => params[:name],
144
- "mode" => get_mode(params[:type]),
145
- "description" => params[:description],
146
- "statusFilter" => status_filter,
147
- "json" => json.to_json
154
+ 'name' => params[:name],
155
+ 'mode' => get_mode(params[:type]),
156
+ 'description' => params[:description],
157
+ 'statusFilter' => status_filter,
158
+ 'json' => json.to_json
148
159
  }
149
- post_params.merge!("filterQueue" => "on") if params[:filter_queue]
150
- post_params.merge!("filterExecutors" => "on") if params[:filter_executors]
151
- post_params.merge!("useincluderegex" => "on",
152
- "includeRegex" => params[:regex]) if params[:regex]
160
+ post_params.merge!('filterQueue' => 'on') if params[:filter_queue]
161
+ post_params.merge!('filterExecutors' => 'on') if params[:filter_executors]
162
+ post_params.merge!('useincluderegex' => 'on',
163
+ 'includeRegex' => params[:regex]) if params[:regex]
153
164
 
154
165
  if @generator.debug
155
166
  pp post_params
@@ -164,60 +175,60 @@ module JenkinsPipelineBuilder
164
175
 
165
176
  def get_columns(type)
166
177
  columns_repository = {
167
- 'Status' =>
168
- {
169
- 'stapler-class' => 'hudson.views.StatusColumn',
170
- 'kind' => 'hudson.views.StatusColumn'
171
- },
172
- 'Weather' =>
173
- {
174
- "stapler-class" => "hudson.views.WeatherColumn",
175
- "kind" => "hudson.views.WeatherColumn"
176
- },
177
- 'Name' =>
178
- {
179
- "stapler-class" => "hudson.views.JobColumn",
180
- "kind" => "hudson.views.JobColumn"
181
- },
182
- 'Last Success' =>
183
- {
184
- "stapler-class" => "hudson.views.LastSuccessColumn",
185
- "kind" => "hudson.views.LastSuccessColumn"
186
- },
187
- 'Last Failure' =>
188
- {
189
- "stapler-class" => "hudson.views.LastFailureColumn",
190
- "kind" => "hudson.views.LastFailureColumn"
191
- },
192
- 'Last Duration' =>
193
- {
194
- "stapler-class" => "hudson.views.LastDurationColumn",
195
- "kind" => "hudson.views.LastDurationColumn"
196
- },
197
- 'Build Button' =>
198
- {
199
- 'stapler-class' => 'hudson.views.BuildButtonColumn',
200
- 'kind' => 'hudson.views.BuildButtonColumn'
201
- },
202
- 'Categorized - Job' =>
203
- {
204
- 'stapler-class' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn',
205
- 'kind' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn'
206
- }
178
+ 'Status' =>
179
+ {
180
+ 'stapler-class' => 'hudson.views.StatusColumn',
181
+ 'kind' => 'hudson.views.StatusColumn'
182
+ },
183
+ 'Weather' =>
184
+ {
185
+ 'stapler-class' => 'hudson.views.WeatherColumn',
186
+ 'kind' => 'hudson.views.WeatherColumn'
187
+ },
188
+ 'Name' =>
189
+ {
190
+ 'stapler-class' => 'hudson.views.JobColumn',
191
+ 'kind' => 'hudson.views.JobColumn'
192
+ },
193
+ 'Last Success' =>
194
+ {
195
+ 'stapler-class' => 'hudson.views.LastSuccessColumn',
196
+ 'kind' => 'hudson.views.LastSuccessColumn'
197
+ },
198
+ 'Last Failure' =>
199
+ {
200
+ 'stapler-class' => 'hudson.views.LastFailureColumn',
201
+ 'kind' => 'hudson.views.LastFailureColumn'
202
+ },
203
+ 'Last Duration' =>
204
+ {
205
+ 'stapler-class' => 'hudson.views.LastDurationColumn',
206
+ 'kind' => 'hudson.views.LastDurationColumn'
207
+ },
208
+ 'Build Button' =>
209
+ {
210
+ 'stapler-class' => 'hudson.views.BuildButtonColumn',
211
+ 'kind' => 'hudson.views.BuildButtonColumn'
212
+ },
213
+ 'Categorized - Job' =>
214
+ {
215
+ 'stapler-class' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn',
216
+ 'kind' => 'org.jenkinsci.plugins.categorizedview.IndentedJobColumn'
217
+ }
207
218
  }
208
219
 
209
220
  column_names = case type
210
- when 'categorizedView'
211
- ['Status', 'Weather', 'Categorized - Job', 'Last Success', 'Last Failure', 'Last Duration', 'Build Button']
212
- else
213
- ['Status', 'Weather', 'Name', 'Last Success', 'Last Failure', 'Last Duration', 'Build Button']
221
+ when 'categorizedView'
222
+ ['Status', 'Weather', 'Categorized - Job', 'Last Success', 'Last Failure', 'Last Duration', 'Build Button']
223
+ else
224
+ ['Status', 'Weather', 'Name', 'Last Success', 'Last Failure', 'Last Duration', 'Build Button']
214
225
  end
215
226
 
216
227
  result = []
217
228
  column_names.each do |name|
218
229
  result << columns_repository[name]
219
230
  end
220
- return result
231
+ result
221
232
  end
222
233
 
223
234
  def path_encode(path)
@@ -230,18 +241,18 @@ module JenkinsPipelineBuilder
230
241
  # @param [String] filter a regex to filter view names
231
242
  # @param [Bool] ignorecase whether to be case sensitive or not
232
243
  #
233
- def list_children(parent_view = nil, filter = "", ignorecase = true)
244
+ def list_children(parent_view = nil, filter = '', ignorecase = true)
234
245
  @logger.info "Obtaining children views of parent #{parent_view} based on filter '#{filter}'"
235
246
  view_names = []
236
247
  path = parent_view.nil? ? '' : "/view/#{parent_view}"
237
248
  response_json = @client.api_get_request(path)
238
- response_json["views"].each { |view|
249
+ response_json['views'].each do |view|
239
250
  if ignorecase
240
- view_names << view["name"] if view["name"] =~ /#{filter}/i
251
+ view_names << view['name'] if view['name'] =~ /#{filter}/i
241
252
  else
242
- view_names << view["name"] if view["name"] =~ /#{filter}/
253
+ view_names << view['name'] if view['name'] =~ /#{filter}/
243
254
  end
244
- }
255
+ end
245
256
  view_names
246
257
  end
247
258
 
@@ -255,5 +266,16 @@ module JenkinsPipelineBuilder
255
266
  path += "/view/#{view_name}/doDelete"
256
267
  @client.api_post_request(path)
257
268
  end
269
+ # Checks if the given view exists in Jenkins
270
+ #
271
+ # @param [String] view_name
272
+ #
273
+ def exists?(view_name, parent_view = nil)
274
+ if parent_view
275
+ list_children(parent_view, view_name).include?(view_name)
276
+ else
277
+ list(view_name).include?(view_name)
278
+ end
279
+ end
258
280
  end
259
- end
281
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2014 Igor Moochnick
2
+ # Copyright (c) 2014 Constant Contact
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -22,102 +22,102 @@
22
22
 
23
23
  module JenkinsPipelineBuilder
24
24
  class Wrappers
25
- def self.ansicolor(wrapper, xml)
26
- xml.send('hudson.plugins.ansicolor.AnsiColorBuildWrapper') {
25
+ def self.ansicolor(_, xml)
26
+ xml.send('hudson.plugins.ansicolor.AnsiColorBuildWrapper') do
27
27
  xml.colorMapName 'xterm'
28
- }
28
+ end
29
29
  end
30
30
 
31
- def self.console_timestamp(wrapper, xml)
31
+ def self.console_timestamp(_, xml)
32
32
  xml.send('hudson.plugins.timestamper.TimestamperBuildWrapper', 'plugin' => 'timestamper')
33
33
  end
34
34
 
35
35
  def self.run_with_rvm05(wrapper, xml)
36
- xml.send('ruby-proxy-object') {
37
- xml.send('ruby-object', 'ruby-class' => 'Jenkins::Tasks::BuildWrapperProxy', 'pluginid' => 'rvm') {
38
- xml.object('ruby-class' => 'RvmWrapper', 'pluginid' => 'rvm') {
39
- xml.impl('pluginid' => "rvm", 'ruby-class' => 'String') { xml.text wrapper }
40
- }
36
+ xml.send('ruby-proxy-object') do
37
+ xml.send('ruby-object', 'ruby-class' => 'Jenkins::Tasks::BuildWrapperProxy', 'pluginid' => 'rvm') do
38
+ xml.object('ruby-class' => 'RvmWrapper', 'pluginid' => 'rvm') do
39
+ xml.impl('pluginid' => 'rvm', 'ruby-class' => 'String') { xml.text wrapper }
40
+ end
41
41
  xml.pluginid(:pluginid => 'rvm', 'ruby-class' => 'String') { xml.text 'rvm' }
42
- }
43
- }
42
+ end
43
+ end
44
44
  end
45
45
  def self.run_with_rvm(wrapper, xml)
46
- xml.send('ruby-proxy-object') {
47
- xml.send('ruby-object', 'ruby-class' => 'Jenkins::Plugin::Proxies::BuildWrapper', 'pluginid' => 'rvm') {
48
- xml.object('ruby-class' => 'RvmWrapper', 'pluginid' => 'rvm') {
49
- xml.impl('pluginid' => "rvm", 'ruby-class' => 'String') { xml.text wrapper }
50
- }
46
+ xml.send('ruby-proxy-object') do
47
+ xml.send('ruby-object', 'ruby-class' => 'Jenkins::Plugin::Proxies::BuildWrapper', 'pluginid' => 'rvm') do
48
+ xml.object('ruby-class' => 'RvmWrapper', 'pluginid' => 'rvm') do
49
+ xml.impl('pluginid' => 'rvm', 'ruby-class' => 'String') { xml.text wrapper }
50
+ end
51
51
  xml.pluginid(:pluginid => 'rvm', 'ruby-class' => 'String') { xml.text 'rvm' }
52
- }
53
- }
52
+ end
53
+ end
54
54
  end
55
55
 
56
56
  def self.inject_passwords(passwords, xml)
57
- xml.EnvInjectPasswordWrapper {
57
+ xml.EnvInjectPasswordWrapper do
58
58
  xml.injectGlobalPasswords false
59
- xml.passwordEntries {
59
+ xml.passwordEntries do
60
60
  passwords.each do |password|
61
- xml.EnvInjectPasswordEntry {
61
+ xml.EnvInjectPasswordEntry do
62
62
  xml.name password[:name]
63
63
  xml.value password[:value]
64
- }
64
+ end
65
65
  end
66
- }
67
- }
66
+ end
67
+ end
68
68
  end
69
69
 
70
70
  def self.inject_env_vars(params, xml)
71
- xml.EnvInjectBuildWrapper {
72
- xml.info {
71
+ xml.EnvInjectBuildWrapper do
72
+ xml.info do
73
73
  xml.propertiesFilePath params[:file] if params[:file]
74
74
  xml.propertiesContent params[:content] if params[:content]
75
75
  xml.loadFilesFromMaster false
76
- }
77
- }
76
+ end
77
+ end
78
78
  end
79
79
 
80
80
  def self.publish_to_artifactory(wrapper, xml)
81
- xml.send('org.jfrog.hudson.generic.ArtifactoryGenericConfigurator') {
82
- xml.details {
81
+ xml.send('org.jfrog.hudson.generic.ArtifactoryGenericConfigurator') do
82
+ xml.details do
83
83
  xml.artifactoryUrl wrapper[:url]
84
84
  xml.artifactoryName wrapper[:'artifactory-name']
85
85
  xml.repositoryKey wrapper[:'release-repo']
86
86
  xml.snapshotsRepositoryKey wrapper.fetch(:'snapshot-repo', wrapper[:'release-repo'])
87
- }
87
+ end
88
88
  xml.deployPattern wrapper[:publish]
89
89
  xml.resolvePattern
90
- xml.matrixParams
90
+ xml.matrixParams wrapper[:properties]
91
91
  xml.deployBuildInfo wrapper[:'publish-build-info']
92
92
  xml.includeEnvVars false
93
- xml.envVarsPatterns {
93
+ xml.envVarsPatterns do
94
94
  xml.includePatterns
95
95
  xml.excludePatterns '*password*,*secret*'
96
- }
96
+ end
97
97
  xml.discardOldBuilds false
98
98
  xml.discardBuildArtifacts true
99
- }
99
+ end
100
100
  end
101
101
 
102
102
  def self.artifactory_maven3_configurator(wrapper, xml)
103
- xml.send('org.jfrog.hudson.maven3.ArtifactoryMaven3Configurator') { # plugin="artifactory@2.2.1"
104
- xml.details {
103
+ xml.send('org.jfrog.hudson.maven3.ArtifactoryMaven3Configurator') do # plugin='artifactory@2.2.1'
104
+ xml.details do
105
105
  xml.artifactoryUrl wrapper[:url]
106
106
  xml.artifactoryName wrapper[:'artifactory-name']
107
107
  xml.repositoryKey wrapper[:'release-repo']
108
108
  xml.snapshotsRepositoryKey wrapper.fetch(:'snapshot-repo', wrapper[:'release-repo'])
109
- }
109
+ end
110
110
  xml.deployArtifacts wrapper.fetch(:'deploy', true)
111
- xml.artifactDeploymentPatterns {
111
+ xml.artifactDeploymentPatterns do
112
112
  xml.includePatterns
113
113
  xml.excludePatterns
114
- }
114
+ end
115
115
  xml.includeEnvVars false
116
116
  xml.deployBuildInfo wrapper.fetch(:'publish-build-info', true)
117
- xml.envVarsPatterns {
117
+ xml.envVarsPatterns do
118
118
  xml.includePatterns
119
119
  xml.excludePatterns '*password*,*secret*'
120
- }
120
+ end
121
121
  xml.runChecks false
122
122
  xml.violationRecipients
123
123
  xml.includePublishArtifacts false
@@ -138,7 +138,7 @@ module JenkinsPipelineBuilder
138
138
  xml.autoCreateMissingComponentRequests true
139
139
  xml.autoDiscardStaleComponentRequests true
140
140
  xml.filterExcludedArtifactsFromBuild false
141
- }
141
+ end
142
142
  end
143
143
  end
144
144
  end