jenkins_pipeline_builder 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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