jenkins_pipeline_builder 0.10.16 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.rubocop.yml +4 -4
- data/lib/jenkins_pipeline_builder.rb +5 -0
- data/lib/jenkins_pipeline_builder/compiler.rb +27 -24
- data/lib/jenkins_pipeline_builder/extension_dsl.rb +1 -0
- data/lib/jenkins_pipeline_builder/extension_set.rb +8 -8
- data/lib/jenkins_pipeline_builder/extensions.rb +12 -24
- data/lib/jenkins_pipeline_builder/extensions/builders.rb +36 -27
- data/lib/jenkins_pipeline_builder/extensions/helpers/builders/blocking_downstream_helper.rb +18 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/builders/maven3_helper.rb +11 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/extension_helper.rb +26 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/job_attributes/parameters_helper.rb +18 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/publishers/cobertura_report_helper.rb +40 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/publishers/email_ext_helper.rb +148 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/triggers/upstream_helper.rb +21 -0
- data/lib/jenkins_pipeline_builder/extensions/job_attributes.rb +1 -15
- data/lib/jenkins_pipeline_builder/extensions/publishers.rb +263 -6
- data/lib/jenkins_pipeline_builder/extensions/triggers.rb +3 -17
- data/lib/jenkins_pipeline_builder/extensions/wrappers.rb +3 -3
- data/lib/jenkins_pipeline_builder/generator.rb +10 -11
- data/lib/jenkins_pipeline_builder/job.rb +29 -25
- data/lib/jenkins_pipeline_builder/job_collection.rb +31 -21
- data/lib/jenkins_pipeline_builder/module_registry.rb +5 -1
- data/lib/jenkins_pipeline_builder/project.rb +28 -0
- data/lib/jenkins_pipeline_builder/pull_request_generator.rb +8 -8
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extension_dsl_spec.rb +43 -0
- data/spec/lib/jenkins_pipeline_builder/extension_set_spec.rb +110 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +56 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/job_attributes_spec.rb +85 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/publishers_spec.rb +81 -9
- data/spec/lib/jenkins_pipeline_builder/extensions/registered_spec.rb +134 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/triggers_spec.rb +88 -0
- data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +0 -97
- data/spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/extension.rb +11 -0
- data/spec/lib/jenkins_pipeline_builder/fixtures/job_collection/extensions/helpers/my_test_thing_helper.rb +5 -0
- data/spec/lib/jenkins_pipeline_builder/job_collection_spec.rb +46 -0
- data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +1 -110
- data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +12 -0
- metadata +24 -2
@@ -0,0 +1,148 @@
|
|
1
|
+
class EmailExtHelper < ExtensionHelper
|
2
|
+
# rubocop:disable Metrics/MethodLength
|
3
|
+
def trigger_defaults
|
4
|
+
{
|
5
|
+
first_failure: {
|
6
|
+
name: 'FirstFailureTrigger',
|
7
|
+
send_to_recipient_list: true,
|
8
|
+
send_to_developers: true,
|
9
|
+
send_to_requester: false,
|
10
|
+
include_culprits: false
|
11
|
+
},
|
12
|
+
first_unstable: {
|
13
|
+
name: 'FirstUnstableTrigger',
|
14
|
+
send_to_recipient_list: false,
|
15
|
+
send_to_developers: true,
|
16
|
+
send_to_requester: false,
|
17
|
+
include_culprits: false
|
18
|
+
},
|
19
|
+
second_failure: {
|
20
|
+
name: 'SecondFailureTrigger',
|
21
|
+
send_to_recipient_list: true,
|
22
|
+
send_to_developers: true,
|
23
|
+
send_to_requester: false,
|
24
|
+
include_culprits: false
|
25
|
+
},
|
26
|
+
aborted: {
|
27
|
+
name: 'AbortedTrigger',
|
28
|
+
send_to_recipient_list: true,
|
29
|
+
send_to_developers: true,
|
30
|
+
send_to_requester: false,
|
31
|
+
include_culprits: false
|
32
|
+
},
|
33
|
+
always: {
|
34
|
+
name: 'AlwaysTrigger',
|
35
|
+
send_to_recipient_list: true,
|
36
|
+
send_to_developers: true,
|
37
|
+
send_to_requester: false,
|
38
|
+
include_culprits: false
|
39
|
+
},
|
40
|
+
before_build: {
|
41
|
+
name: 'PreBuildTrigger',
|
42
|
+
send_to_recipient_list: true,
|
43
|
+
send_to_developers: false,
|
44
|
+
send_to_requester: false,
|
45
|
+
include_culprits: false
|
46
|
+
},
|
47
|
+
building: {
|
48
|
+
name: 'BuildingTrigger',
|
49
|
+
send_to_recipient_list: true,
|
50
|
+
send_to_developers: true,
|
51
|
+
send_to_requester: false,
|
52
|
+
include_culprits: false
|
53
|
+
},
|
54
|
+
failure: {
|
55
|
+
name: 'FailureTrigger',
|
56
|
+
send_to_recipient_list: false,
|
57
|
+
send_to_developers: true,
|
58
|
+
send_to_requester: false,
|
59
|
+
include_culprits: false
|
60
|
+
},
|
61
|
+
fixed: {
|
62
|
+
name: 'FixedTrigger',
|
63
|
+
send_to_recipient_list: true,
|
64
|
+
send_to_developers: true,
|
65
|
+
send_to_requester: false,
|
66
|
+
include_culprits: false
|
67
|
+
},
|
68
|
+
fixed_unhealthy: {
|
69
|
+
name: 'FixedUnhealthyTrigger',
|
70
|
+
send_to_recipient_list: true,
|
71
|
+
send_to_developers: true,
|
72
|
+
send_to_requester: false,
|
73
|
+
include_culprits: false
|
74
|
+
},
|
75
|
+
improvement: {
|
76
|
+
name: 'ImprovementTrigger',
|
77
|
+
send_to_recipient_list: true,
|
78
|
+
send_to_developers: true,
|
79
|
+
send_to_requester: false,
|
80
|
+
include_culprits: false
|
81
|
+
},
|
82
|
+
not_built: {
|
83
|
+
name: 'NotBuiltTrigger',
|
84
|
+
send_to_recipient_list: true,
|
85
|
+
send_to_developers: true,
|
86
|
+
send_to_requester: false,
|
87
|
+
include_culprits: false
|
88
|
+
},
|
89
|
+
prebuild_script: {
|
90
|
+
name: 'PreBuildScriptTrigger',
|
91
|
+
send_to_recipient_list: false,
|
92
|
+
send_to_developers: false,
|
93
|
+
send_to_requester: false,
|
94
|
+
include_culprits: false
|
95
|
+
},
|
96
|
+
regression: {
|
97
|
+
name: 'RegressionTrigger',
|
98
|
+
send_to_recipient_list: true,
|
99
|
+
send_to_developers: true,
|
100
|
+
send_to_requester: false,
|
101
|
+
include_culprits: false
|
102
|
+
},
|
103
|
+
script: {
|
104
|
+
name: 'ScriptTrigger',
|
105
|
+
send_to_recipient_list: true,
|
106
|
+
send_to_developers: false,
|
107
|
+
send_to_requester: false,
|
108
|
+
include_culprits: false
|
109
|
+
},
|
110
|
+
status_changed: {
|
111
|
+
name: 'StatusChangedTrigger',
|
112
|
+
send_to_recipient_list: false,
|
113
|
+
send_to_developers: true,
|
114
|
+
send_to_requester: false,
|
115
|
+
include_culprits: false
|
116
|
+
},
|
117
|
+
still_failing: {
|
118
|
+
name: 'StillFailingTrigger',
|
119
|
+
send_to_recipient_list: false,
|
120
|
+
send_to_developers: true,
|
121
|
+
send_to_requester: false,
|
122
|
+
include_culprits: false
|
123
|
+
},
|
124
|
+
still_unstable: {
|
125
|
+
name: 'StillUnstableTrigger',
|
126
|
+
send_to_recipient_list: false,
|
127
|
+
send_to_developers: true,
|
128
|
+
send_to_requester: false,
|
129
|
+
include_culprits: false
|
130
|
+
},
|
131
|
+
success: {
|
132
|
+
name: 'SuccessTrigger',
|
133
|
+
send_to_recipient_list: false,
|
134
|
+
send_to_developers: true,
|
135
|
+
send_to_requester: false,
|
136
|
+
include_culprits: false
|
137
|
+
},
|
138
|
+
unstable: {
|
139
|
+
name: 'UnstableTrigger',
|
140
|
+
send_to_recipient_list: false,
|
141
|
+
send_to_developers: true,
|
142
|
+
send_to_requester: false,
|
143
|
+
include_culprits: false
|
144
|
+
}
|
145
|
+
}
|
146
|
+
end
|
147
|
+
# rubocop:enable Metrics/MethodLength
|
148
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class UpstreamHelper < ExtensionHelper
|
2
|
+
attr_reader :color, :name, :ordinal
|
3
|
+
def initialize(params, builder)
|
4
|
+
super params, builder
|
5
|
+
|
6
|
+
case params[:status]
|
7
|
+
when 'unstable'
|
8
|
+
@name = 'UNSTABLE'
|
9
|
+
@ordinal = '1'
|
10
|
+
@color = 'yellow'
|
11
|
+
when 'failed'
|
12
|
+
@name = 'FAILURE'
|
13
|
+
@ordinal = '2'
|
14
|
+
@color = 'RED'
|
15
|
+
else
|
16
|
+
@name = 'SUCCESS'
|
17
|
+
@ordinal = '0'
|
18
|
+
@color = 'BLUE'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -238,22 +238,8 @@ job_attribute do
|
|
238
238
|
send('hudson.model.ParametersDefinitionProperty') do
|
239
239
|
parameterDefinitions do
|
240
240
|
params.each do |param|
|
241
|
-
case param[:type]
|
242
|
-
when 'string'
|
243
|
-
paramType = 'hudson.model.StringParameterDefinition'
|
244
|
-
when 'bool'
|
245
|
-
paramType = 'hudson.model.BooleanParameterDefinition'
|
246
|
-
when 'text'
|
247
|
-
paramType = 'hudson.model.TextParameterDefinition'
|
248
|
-
when 'password'
|
249
|
-
paramType = 'hudson.model.PasswordParameterDefinition'
|
250
|
-
when 'choice'
|
251
|
-
paramType = 'hudson.model.ChoiceParameterDefinition'
|
252
|
-
else
|
253
|
-
paramType = 'hudson.model.StringParameterDefinition'
|
254
|
-
end
|
255
241
|
|
256
|
-
send(
|
242
|
+
send(params.param_type param) do
|
257
243
|
name param[:name]
|
258
244
|
description param[:description]
|
259
245
|
defaultValue param[:default]
|
@@ -80,14 +80,35 @@ publisher do
|
|
80
80
|
jenkins_name 'HipChat Notifications'
|
81
81
|
announced false
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
83
|
+
version '0' do
|
84
|
+
xml do |params|
|
85
|
+
params = {} if params == true
|
86
|
+
send('jenkins.plugins.hipchat.HipChatNotifier') do
|
87
|
+
jenkinsUrl params[:jenkinsUrl] || ''
|
88
|
+
authToken params[:authToken] || ''
|
89
|
+
room params[:room] || ''
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
version '0.1.9' do
|
95
|
+
xml do |params|
|
96
|
+
send('jenkins.plugins.hipchat.HipChatNotifier') do
|
97
|
+
token params[:token] || params[:authToken] || ''
|
98
|
+
room params[:room] || ''
|
99
|
+
startNotification params[:start_notify] || false
|
100
|
+
notifySuccess params[:success_notify] || false
|
101
|
+
notifyAborted params[:aborted_notify] || false
|
102
|
+
notifyNotBuilt params[:notbuilt_notify] || false
|
103
|
+
notifyUnstable params[:unstable_notify] || false
|
104
|
+
notifyFailure params[:failure_notify] || false
|
105
|
+
notifyBackToNormal params[:normal_notify] || false
|
106
|
+
startJobMessage params[:start_message] || ''
|
107
|
+
completeJobMessage params[:complete_message] || ''
|
108
|
+
end
|
89
109
|
end
|
90
110
|
end
|
111
|
+
|
91
112
|
end
|
92
113
|
|
93
114
|
publisher do
|
@@ -298,3 +319,239 @@ publisher do
|
|
298
319
|
end
|
299
320
|
end
|
300
321
|
end
|
322
|
+
|
323
|
+
publisher do
|
324
|
+
name :brakeman
|
325
|
+
plugin_id 'brakeman'
|
326
|
+
description 'Parses results from Brakeman, a static-analysis vulnerability scanner for Ruby on Rails.'
|
327
|
+
jenkins_name 'Brakeman Plugin'
|
328
|
+
announced false
|
329
|
+
|
330
|
+
xml do |params|
|
331
|
+
|
332
|
+
send('hudson.plugins.brakeman.BrakemanPublisher', 'plugin' => 'brakeman') do
|
333
|
+
healthy params[:healthy] || ''
|
334
|
+
unHealthy params[:unhealthy] || ''
|
335
|
+
thresholdLimit params[:threshold_limit] || 'low'
|
336
|
+
pluginName '[BRAKEMAN] '
|
337
|
+
defaultEncoding 'UTF-8'
|
338
|
+
canRunOnFailed params[:can_run_on_failed] || false
|
339
|
+
useStableBuildAsReference params[:use_stable_build_as_reference] || false
|
340
|
+
useDeltaValues params[:use_delta_values] || false
|
341
|
+
|
342
|
+
thresholds = params[:thresholds] || {}
|
343
|
+
send('thresholds', 'plugin' => 'analysis-core') do
|
344
|
+
unstableTotalAll { text(thresholds[:unstable_total_all] || '') }
|
345
|
+
unstableTotalHigh { text(thresholds[:unstable_total_high] || '') }
|
346
|
+
unstableTotalNormal { text(thresholds[:unstable_total_normal] || '') }
|
347
|
+
unstableTotalLow { text(thresholds[:unstable_total_low] || '') }
|
348
|
+
failedTotalAll { text(thresholds[:failed_total_all] || '') }
|
349
|
+
failedTotalHigh { text(thresholds[:failed_total_high] || '') }
|
350
|
+
failedTotalNormal { text(thresholds[:failed_total_normal] || '') }
|
351
|
+
failedTotalLow { text(thresholds[:failed_total_low] || '') }
|
352
|
+
end
|
353
|
+
|
354
|
+
shouldDetectModules { text(params[:should_detect_modules] || false) }
|
355
|
+
dontComputeNew { text(params[:dont_compute_new] || true) }
|
356
|
+
doNotResolveRelativePaths { text(params[:do_not_resolve_relative_paths] || false) }
|
357
|
+
outputFile { text(params[:output_file] || 'brakeman-output.tabs') }
|
358
|
+
end
|
359
|
+
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
publisher do
|
364
|
+
name :claim_broken_build
|
365
|
+
plugin_id 'claim'
|
366
|
+
description 'This plugin allows users to claim failed builds.'
|
367
|
+
jenkins_name 'Jenkins Claim Plugin'
|
368
|
+
announced false
|
369
|
+
|
370
|
+
xml do |allow_claim|
|
371
|
+
send('hudson.plugins.claim.ClaimPublisher', 'plugin' => 'claim') if allow_claim
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
publisher do
|
376
|
+
name :cobertura_report
|
377
|
+
plugin_id 'cobertura'
|
378
|
+
description 'This plugin integrates Cobertura coverage reports to Jenkins.'
|
379
|
+
jenkins_name 'Cobertura Plugin'
|
380
|
+
announced false
|
381
|
+
|
382
|
+
xml do |params|
|
383
|
+
send('hudson.plugins.cobertura.CoberturaPublisher', 'plugin' => 'cobertura') do
|
384
|
+
|
385
|
+
coberturaReportFile params[:cobertura_report_file]
|
386
|
+
onlyStable params[:only_stable] || false
|
387
|
+
failUnhealthy params[:fail_unhealthy] || false
|
388
|
+
failUnstable params[:fail_unstable] || false
|
389
|
+
autoUpdateHealth params[:auto_update_health] || false
|
390
|
+
autoUpdateStability params[:auto_update_stability] || false
|
391
|
+
zoomCoverageChart params[:zoom_coverage_chart] || false
|
392
|
+
maxNumberOfBuilds params[:max_number_of_builds] || 0
|
393
|
+
failNoReports params[:fail_no_reports] || true
|
394
|
+
|
395
|
+
params.send_metric_targets(:failing)
|
396
|
+
params.send_metric_targets(:unhealthy)
|
397
|
+
params.send_metric_targets(:healthy)
|
398
|
+
|
399
|
+
sourceEncoding params[:source_encoding] || 'ASCII'
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
end
|
404
|
+
|
405
|
+
publisher do
|
406
|
+
name :email_ext
|
407
|
+
plugin_id 'email-ext'
|
408
|
+
description 'This plugin is a replacement for Jenkins\'s email publisher.'
|
409
|
+
jenkins_name 'Email-ext plugin'
|
410
|
+
announced false
|
411
|
+
|
412
|
+
xml do |params|
|
413
|
+
send('hudson.plugins.emailext.ExtendedEmailPublisher', 'plugin' => 'email-ext') do
|
414
|
+
recipientList { text(params[:recipient_list] || '$DEFAULT_RECIPIENTS') }
|
415
|
+
|
416
|
+
unless params[:triggers].nil?
|
417
|
+
|
418
|
+
configuredTriggers do
|
419
|
+
params[:triggers].each do |trigger_params|
|
420
|
+
|
421
|
+
trigger_type = trigger_params[:type].to_sym
|
422
|
+
defaults = params.trigger_defaults[trigger_type]
|
423
|
+
|
424
|
+
send("hudson.plugins.emailext.plugins.trigger.#{defaults[:name]}") do
|
425
|
+
email do
|
426
|
+
recipientList { text(trigger_params[:recipient_list] || '') }
|
427
|
+
subject { text(trigger_params[:subject] || '$PROJECT_DEFAULT_SUBJECT') }
|
428
|
+
body { text(trigger_params[:body] || '$PROJECT_DEFAULT_CONTENT') }
|
429
|
+
sendToDevelopers { text(!trigger_params[:send_to_developers].nil? ? trigger_params[:send_to_developers] : defaults[:send_to_developers]) }
|
430
|
+
sendToRequester { text(!trigger_params[:send_to_requester].nil? ? trigger_params[:send_to_requester] : defaults[:send_to_requester]) }
|
431
|
+
includeCulprits { text(!trigger_params[:include_culprits].nil? ? trigger_params[:include_culprits] : defaults[:include_culprits]) }
|
432
|
+
sendToRecipientList { text(!trigger_params[:send_to_recipient_list].nil? ? trigger_params[:send_to_recipient_list] : defaults[:send_to_recipient_list]) }
|
433
|
+
attachmentsPattern { text(trigger_params[:attachments_pattern] || '') }
|
434
|
+
attachBuildLog { text(trigger_params[:attach_build_log] || false) }
|
435
|
+
compressBuildLog { text(trigger_params[:compress_build_log] || false) }
|
436
|
+
replyTo { text(trigger_params[:reply_to] || '$PROJECT_DEFAULT_REPLYTO') }
|
437
|
+
contentType { text(trigger_params[:content_type] || 'project') }
|
438
|
+
end
|
439
|
+
|
440
|
+
failureCount { text '1' } if trigger_type == :first_failure
|
441
|
+
failureCount { text '2' } if trigger_type == :second_failure
|
442
|
+
if trigger_type == :prebuild_script || trigger_type == :script
|
443
|
+
triggerScript { text(trigger_params[:trigger_script] || '') }
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
contentType { text(params[:content_type] || 'default') }
|
451
|
+
defaultSubject { text(params[:default_subject] || '$DEFAULT_SUBJECT') }
|
452
|
+
defaultContent { text(params[:default_content] || '$DEFAULT_CONTENT') }
|
453
|
+
attachmentsPattern { text(params[:attachments_pattern] || '') }
|
454
|
+
presendScript { text(params[:presend_script] || '$DEFAULT_PRESEND_SCRIPT') }
|
455
|
+
attachBuildLog { text(params[:attach_build_log] || 'false') }
|
456
|
+
compressBuildLog { text(params[:compress_build_log] || 'false') }
|
457
|
+
replyTo { text(params[:reply_to] || '$DEFAULT_REPLYTO') }
|
458
|
+
saveOutput { text(params[:save_output] || 'false') }
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
publisher do
|
464
|
+
name :html_publisher
|
465
|
+
plugin_id 'htmlpublisher'
|
466
|
+
description 'This plugin publishes HTML reports.'
|
467
|
+
jenkins_name 'HTML Publisher Plugin'
|
468
|
+
announced false
|
469
|
+
|
470
|
+
xml do |params|
|
471
|
+
send('htmlpublisher.HtmlPublisher', 'plugin' => 'htmlpublisher') do
|
472
|
+
send('reportTargets') do
|
473
|
+
unless params[:report_targets].nil?
|
474
|
+
params[:report_targets].each do |target|
|
475
|
+
send('htmlpublisher.HtmlPublisherTarget') do
|
476
|
+
reportName target[:report_title] || 'HTML Report'
|
477
|
+
reportDir target[:report_dir] || ''
|
478
|
+
reportFiles target[:index_pages] || 'index.html'
|
479
|
+
keepAll target[:keep_past] || false
|
480
|
+
allowMissing target[:allow_missing] || false
|
481
|
+
wrapperName 'htmlpublisher-wrapper.html'
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
publisher do
|
491
|
+
name :publish_tap_results
|
492
|
+
plugin_id 'tap'
|
493
|
+
description 'This plug-in adds support to TAP test result files to Jenkins. It lets you specify an ant-like pattern for a directory that contains your TAP files.'
|
494
|
+
jenkins_name 'TAP Plugin'
|
495
|
+
announced false
|
496
|
+
|
497
|
+
xml do |params|
|
498
|
+
send('org.tap4j.plugin.TapPublisher', 'plugin' => 'tap') do
|
499
|
+
testResults params[:test_results]
|
500
|
+
failIfNoResults params[:fail_if_no_results] || false
|
501
|
+
failedTestsMarkBuildAsFailure params[:failed_test_mark_as_failure] || false
|
502
|
+
outputTapToConsole params[:output_to_console] || false
|
503
|
+
enableSubtests params[:enable_subtests] || false
|
504
|
+
discardOldReports params[:discard_old_reports] || false
|
505
|
+
todoIsFailure params[:todo_is_failure] || false
|
506
|
+
includeCommentDiagnostics params[:include_comment_diagnostics] || false
|
507
|
+
validateNumberOfTests params[:validate_number_tests] || false
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
end
|
512
|
+
|
513
|
+
publisher do
|
514
|
+
name :xunit
|
515
|
+
plugin_id 'xunit'
|
516
|
+
description 'This plugin makes it possible to record xUnit test reports.'
|
517
|
+
jenkins_name 'xUnit Plugin'
|
518
|
+
announced false
|
519
|
+
|
520
|
+
xml do |params|
|
521
|
+
send('xunit', 'plugin' => 'xunit') do
|
522
|
+
send('types') do
|
523
|
+
unless params[:types].nil?
|
524
|
+
params[:types].each do |type|
|
525
|
+
send(type[:type]) do
|
526
|
+
pattern type[:pattern]
|
527
|
+
skipNoTestFiles type[:skip_no_test_files] || false
|
528
|
+
failIfNotNew type[:fail_if_not_new] || true
|
529
|
+
deleteOutputFiles type[:delete_output_files] || true
|
530
|
+
stopProcessingIfError type[:stop_processing_error] || true
|
531
|
+
end
|
532
|
+
end
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
536
|
+
params[:thresholds] ||= {}
|
537
|
+
failed_thresholds = params[:thresholds][:failed] || {}
|
538
|
+
skipped_thresholds = params[:thresholds][:skipped] || {}
|
539
|
+
thresholds do
|
540
|
+
send('org.jenkinsci.plugins.xunit.threshold.FailedThreshold') do
|
541
|
+
unstableThreshold failed_thresholds[:unstable_threshold] || ''
|
542
|
+
unstableNewThreshold failed_thresholds[:unstable_new_threshold] || ''
|
543
|
+
failureThreshold failed_thresholds[:failure_threshold] || ''
|
544
|
+
failureNewThreshold failed_thresholds[:failure_new_threshold] || ''
|
545
|
+
end
|
546
|
+
send('org.jenkinsci.plugins.xunit.threshold.SkippedThreshold') do
|
547
|
+
unstableThreshold skipped_thresholds[:unstable_threshold] || ''
|
548
|
+
unstableNewThreshold skipped_thresholds[:unstable_new_threshold] || ''
|
549
|
+
failureThreshold skipped_thresholds[:failure_threshold] || ''
|
550
|
+
failureNewThreshold skipped_thresholds[:failure_new_threshold] || ''
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
thresholdMode params[:threshold_mode] || 1
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|