rubyjobbuilderdsl 0.0.6 → 0.0.8

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.
@@ -1,923 +1,940 @@
1
- require 'builder'
2
-
3
- class BasicObject
4
- def class
5
- (class << self; self end).superclass
6
- end
7
- end
8
-
9
- module JenkinsJob
10
- class XmlGenerator
11
- GENERATOR_BY_CLASS = {
12
- FreeStyle => lambda { |generator, model, xml_node| generator.generate_freestyle(model, xml_node) },
13
- Flow => lambda { |generator, model, xml_node| generator.generate_flow(model, xml_node) },
14
- Pipeline => lambda { |generator, model, xml_node| generator.generate_pipeline(model, xml_node) },
15
- MultiJob => lambda { |generator, model, xml_node| generator.generate_multi_job(model, xml_node) },
16
- View => lambda { |generator, model, xml_node| generator.generate_view(model, xml_node) },
17
- Common::Throttle => lambda { |generator, model, xml_node| generator.generate_throttle(model, xml_node) },
18
- Common::LogRotate => lambda { |generator, model, xml_node| generator.generate_logrotate(model, xml_node) },
19
- Common::PollSCM => lambda { |generator, model, xml_node| generator.generate_pollscm(model, xml_node) },
20
- Common::Timed => lambda { |generator, model, xml_node| generator.generate_timed(model, xml_node) },
21
- Common::BuildTimeout => lambda { |generator, model, xml_node| generator.generate_build_timeout(model, xml_node) },
22
- Common::Timestamps => lambda { |generator, model, xml_node| generator.generate_timestamps(model, xml_node) },
23
- Common::Artifactory => lambda { |generator, model, xml_node| generator.generate_artifactory(model, xml_node) },
24
- Common::Password => lambda { |generator, model, xml_node| generator.generate_password(model, xml_node) },
25
- Common::Gerrit => lambda { |generator, model, xml_node| generator.generate_gerrit(model, xml_node) },
26
- Common::GerritProject => lambda { |generator, model, xml_node| generator.generate_gerrit_project(model, xml_node) },
27
- Common::Git => lambda { |generator, model, xml_node| generator.generate_git(model, xml_node) },
28
- Common::Scms => lambda { |generator, model, xml_node| generator.generate_scms(model, xml_node) },
29
- Common::Parameter => lambda { |generator, model, xml_node| generator.generate_param(model, xml_node) },
30
- Common::PasswordParameter => lambda { |generator, model, xml_node| generator.generate_password_param(model, xml_node) },
31
- Common::BlockingJob => lambda { |generator, model, xml_node| generator.generate_blocking_job(model, xml_node) },
32
- BuildStep::Shell => lambda { |generator, model, xml_node| generator.generate_shell(model, xml_node) },
33
- BuildStep::Powershell => lambda { |generator, model, xml_node| generator.generate_powershell(model, xml_node) },
34
- BuildStep::Batch => lambda { |generator, model, xml_node| generator.generate_batch(model, xml_node) },
35
- BuildStep::CopyArtifact => lambda { |generator, model, xml_node| generator.generate_copyartifact(model, xml_node) },
36
- BuildStep::InjectEnv => lambda { |generator, model, xml_node| generator.generate_inject_env(model, xml_node) },
37
- BuildStep::Ant => lambda { |generator, model, xml_node| generator.generate_ant(model, xml_node) },
38
- BuildStep::Phase => lambda { |generator, model, xml_node| generator.generate_phase(model, xml_node) },
39
- BuildStep::Xvfb => lambda { |generator, model, xml_node| generator.generate_xvfb(model, xml_node) },
40
- Postbuild::Postbuild => lambda { |generator, model, xml_node| generator.generate_postbuild(model, xml_node) },
41
- Postbuild::Archive => lambda { |generator, model, xml_node| generator.generate_archive(model, xml_node) },
42
- Postbuild::EmailPublisher => lambda { |generator, model, xml_node| generator.generate_email_publisher(model, xml_node) },
43
- Postbuild::NUnitPublisher => lambda { |generator, model, xml_node| generator.generate_nunit_publisher(model, xml_node) },
44
- Postbuild::XUnitPublisher => lambda { |generator, model, xml_node| generator.generate_xunit_publisher(model, xml_node) },
45
- Postbuild::HtmlPublisher => lambda { |generator, model, xml_node| generator.generate_html_publisher(model, xml_node) },
46
- Postbuild::CucumberJsonPublisher => lambda { |generator, model, xml_node| generator.generate_cucumber_publisher(model, xml_node) },
47
- Postbuild::LogParser => lambda { |generator, model, xml_node| generator.generate_logparser(model, xml_node) },
48
- Postbuild::PostbuildScript => lambda { |generator, model, xml_node| generator.generate_postbuild_script(model, xml_node) },
49
- Postbuild::PostbuildGroovy => lambda { |generator, model, xml_node| generator.generate_postbuild_groovy(model, xml_node) },
50
- Postbuild::PostbuildTrigger => lambda { |generator, model, xml_node| generator.generate_postbuild_trigger(model, xml_node) },
51
- Postbuild::CloverPhpPublisher => lambda { |generator, model, xml_node| generator.generate_clover_php(model, xml_node) },
52
- Postbuild::JavaDocPublisher => lambda { |generator, model, xml_node| generator.generate_javadoc(model, xml_node) },
53
- Postbuild::PMDPublisher => lambda { |generator, model, xml_node| generator.generate_pmd(model, xml_node) },
54
- Postbuild::ClaimPublisher => lambda { |generator, model, xml_node| generator.generate_claim_publisher(model, xml_node) },
55
- Postbuild::TapPublisher => lambda { |generator, model, xml_node| generator.generate_tap_publisher(model, xml_node) },
56
- Postbuild::GamePublisher => lambda { |generator, model, xml_node| generator.generate_game_publisher(model, xml_node) },
57
- Postbuild::ChuckNorrisPublisher => lambda { |generator, model, xml_node| generator.generate_chucknorris_publisher(model, xml_node) },
58
- Postbuild::PostbuildSlack => lambda { |generator, model, xml_node| generator.generate_postbuild_slack(model, xml_node) },
59
- }
60
-
61
- def generate(model, xml_node = ::Builder::XmlMarkup.new(:indent => 2))
62
- if GENERATOR_BY_CLASS[model.class]
63
- GENERATOR_BY_CLASS[model.class].call(self, model, xml_node)
64
- else
65
- fail "Missing XML generator for class #{model.class}"
66
- end
67
- end
68
-
69
- def generate_common(model, project)
70
- project.actions
71
- if model.desc_
72
- project.description(model.desc_)
73
- else
74
- project.description('<!-- Managed by Jenkins Job Builder -->')
75
- end
76
-
77
- project.keepDependencies(false)
78
- project.blockBuildWhenDownstreamBuilding(false)
79
- project.blockBuildWhenUpstreamBuilding(false)
80
- project.concurrentBuild(model.concurrent_)
81
- project.quietPeriod(model.quiet_period_) if model.quiet_period_
82
-
83
- if model.node_
84
- project.assignedNode(model.node_)
85
- project.canRoam(false)
86
- else
87
- project.canRoam(true)
88
- end
89
-
90
- generate(model.logrotate_, project) if model.logrotate_
91
-
92
- if model.properties_.empty? && model.parameters_.empty?
93
- project.properties
94
- else
95
- project.properties do |properties|
96
- model.properties_.values.each { |e| generate(e, properties) }
97
-
98
- unless model.parameters_.empty?
99
- properties.tag!('hudson.model.ParametersDefinitionProperty') do |node|
100
- node.parameterDefinitions do |params_def|
101
- model.parameters_.values.each { |e| generate(e, params_def) }
102
- end
103
- end
104
- end
105
- end
106
- end
107
-
108
- if model.scm_
109
- generate(model.scm_, project)
110
- else
111
- project.scm(:class => 'hudson.scm.NullSCM')
112
- end
113
-
114
- unless model.triggers_.empty?
115
- project.triggers(:class => 'vector') do |triggers|
116
- model.triggers_.values.each { |e| generate(e, triggers) }
117
- end
118
- end
119
-
120
- if model.postbuild_
121
- project.publishers do |publishers|
122
- generate(model.postbuild_, publishers)
123
- end
124
- else
125
- project.publishers
126
- end
127
-
128
- if model.wrappers_.empty?
129
- project.buildWrappers
130
- else
131
- project.buildWrappers do |wrappers|
132
- model.wrappers_.values.each { |e| generate(e, wrappers) }
133
- end
134
- end
135
- end
136
-
137
- def generate_freestyle(model, root)
138
- result = root.project do |project|
139
- generate_common(model, project)
140
- project.customWorkspace(model.workspace_) if model.workspace_
141
- if model.builders_.empty?
142
- project.builders
143
- else
144
- project.builders do |builders|
145
- model.builders_.each { |e| generate(e, builders) }
146
- end
147
- end
148
- end
149
- result
150
- end
151
-
152
- def generate_flow(model, root)
153
- result = root.tag!('com.cloudbees.plugins.flow.BuildFlow') do |project|
154
- project.buildNeedsWorkspace(true)
155
- generate_common(model, project)
156
- project.dsl(model.dsl_)
157
- end
158
- result
159
- end
160
-
161
- def generate_pipeline(model, root)
162
- result = root.tag!('flow-definition', :plugin => 'workflow-job@2.11') do |project|
163
- project.actions
164
- project.description
165
- project.keepDependencies(false)
166
- project.properties do |property|
167
- property.tag!('org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty') do |stuff|
168
- if model.schedule_
169
- stuff.triggers do |hudsonTrigger|
170
- hudsonTrigger.tag!('hudson.triggers.TimerTrigger') do |trigger|
171
- trigger.spec(model.schedule_) if model.schedule_
172
- end
173
- end
174
- else
175
- stuff.triggers
176
- end
177
- end
178
- end
179
- project.definition(:class => 'org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition', :plugin => 'workflow-cps@2.32') do |definition|
180
- definition.script(model.groovy_)
181
- end
182
- project.disabled(false)
183
- if model.postbuild_
184
- project.publishers do |publishers|
185
- generate(model.postbuild_, publishers)
186
- end
187
- else
188
- project.publishers
189
- end
190
- end
191
- result
192
- end
193
-
194
- def generate_multi_job(model, root)
195
- result = root.tag!('com.tikal.jenkins.plugins.multijob.MultiJobProject', :plugin => 'jenkins-multijob-plugin@1.13') do |project|
196
- generate_common(model, project)
197
- if model.builders_.empty?
198
- project.builders
199
- else
200
- project.builders do |builders|
201
- model.builders_.each { |e| generate(e, builders) }
202
- end
203
- end
204
- end
205
- result
206
- end
207
-
208
- def generate_view(model, root)
209
- result = root.tag!('hudson.model.ListView') do |view|
210
- view.name(model.name)
211
- view.filterExecutors(false)
212
- view.filterQueue(false)
213
- view.properties(:class => 'hudson.model.View$PropertyList')
214
- view.jobNames do |jobs|
215
- jobs.comparator(:class => 'hudson.util.CaseInsensitiveComparator')
216
- end
217
- view.jobFilters
218
- view.columns do |cols|
219
- cols.tag!('hudson.views.StatusColumn')
220
- cols.tag!('hudson.views.WeatherColumn')
221
- cols.tag!('hudson.views.JobColumn')
222
- cols.tag!('hudson.views.LastSuccessColumn')
223
- cols.tag!('hudson.views.LastFailureColumn')
224
- cols.tag!('hudson.views.LastDurationColumn')
225
- cols.tag!('hudson.views.BuildButtonColumn')
226
- end
227
- view.includeRegex(model.jobname_)
228
- view.recurse(false)
229
- end
230
- result
231
- end
232
-
233
- def generate_shell(model, builders)
234
- builders.tag!('hudson.tasks.Shell') do |shell|
235
- shell.command(model.cmd_)
236
- end
237
- end
238
-
239
- def generate_powershell(model, builders)
240
- builders.tag!('hudson.plugins.powershell.PowerShell') do |shell|
241
- shell.command(model.cmd_)
242
- end
243
- end
244
-
245
- def generate_inject_env(model, builders)
246
- builders.tag!('EnvInjectBuilder') do |inject|
247
- inject.tag!('info') do |info|
248
- info.propertiesFilePath(model.properties_file_) if model.properties_file_
249
- info.propertiesContent(model.properties_content_)
250
- end
251
- end
252
- end
253
-
254
- def generate_batch(model, builders)
255
- builders.tag!('hudson.tasks.BatchFile') do |batch|
256
- batch.command(model.cmd_)
257
- end
258
- end
259
-
260
- def generate_copyartifact(model, builders)
261
- builders.tag!('hudson.plugins.copyartifact.CopyArtifact') do |copy|
262
- copy.project(model.project_)
263
- copy.filter(model.filter_) if model.filter_
264
- if model.target_
265
- copy.target(model.target_)
266
- else
267
- copy.target
268
- end
269
- copy.flatten(false)
270
- copy.optional(false)
271
- copy.parameters
272
- if model.build_number_
273
- copy.selector(:class => 'hudson.plugins.copyartifact.SpecificBuildSelector') do |s|
274
- s.buildNumber(model.build_number_)
275
- end
276
- else
277
- copy.selector(:class => 'hudson.plugins.copyartifact.StatusBuildSelector') do |s|
278
- s.stable(false)
279
- end
280
- end
281
- end
282
- end
283
-
284
- def generate_ant(model, builders)
285
- builders.tag!('hudson.tasks.Ant', :plugin => 'ant@1.2') do |ant|
286
- if model.targets_.empty?
287
- ant.targets
288
- else
289
- ant.targets(model.targets_.join(' '))
290
- end
291
- ant.buildFile(model.buildfile_) if model.buildfile_
292
- ant.properties(model.properties_.map { |k, v| "-D#{k}=#{v}" }.join(' ')) unless model.properties_.empty?
293
- ant.antOpts(model.java_opts_.join(' ')) unless model.java_opts_.empty?
294
- end
295
- end
296
-
297
- def generate_phase(model, builders)
298
- builders.tag!('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do |phase|
299
- phase.phaseName(model.name)
300
- phase.phaseJobs do |phaseJobs|
301
- model.jobs_.each do |job|
302
- phaseJobs.tag!('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do |conf|
303
- conf.jobName(job.name)
304
- conf.currParams(true)
305
- conf.exposedSCM(true)
306
- conf.disableJob(false)
307
- conf.parsingRulesPath
308
- conf.maxRetries(job.retries_)
309
- if job.retries_ > 0
310
- conf.enableRetryStrategy(true)
311
- else
312
- conf.enableRetryStrategy(false)
313
- end
314
- conf.enableCondition(false)
315
- conf.abortAllJob(job.abort_others_)
316
- conf.condition
317
- conf.configs(:class => 'empty-list')
318
- if job.ignore_result_
319
- conf.killPhaseOnJobResultCondition('NEVER')
320
- else
321
- conf.killPhaseOnJobResultCondition('FAILURE')
322
- end
323
- conf.buildOnlyIfSCMChanges(false)
324
- end
325
- end
326
- end
327
- phase.continuationCondition('SUCCESSFUL')
328
- end
329
- end
330
-
331
- def generate_throttle(model, properties)
332
- properties.tag!('hudson.plugins.throttleconcurrents.ThrottleJobProperty') do |throttle|
333
- throttle.maxConcurrentPerNode(model.max_per_node_)
334
- throttle.maxConcurrentTotal(model.max_total_)
335
- throttle.throttleEnabled(true)
336
-
337
- if model.categories_
338
- throttle.categories do |categories|
339
- model.categories_.each { |cat| categories.string(cat) }
340
- end
341
- throttle.throttleOption('category')
342
- else
343
- throttle.throttleOption('project')
344
- end
345
- throttle.configVersion(1)
346
- end
347
- end
348
-
349
- def generate_logrotate(model, project)
350
- project.logRotator do |log|
351
- log.daysToKeep(model.days_to_keep_) if model.days_to_keep_
352
- log.numToKeep(model.num_to_keep_) if model.num_to_keep_
353
- log.artifactDaysToKeep(model.artifact_days_to_keep_) if model.artifact_days_to_keep_
354
- log.artifactNumToKeep(model.artifact_num_to_keep_) if model.artifact_num_to_keep_
355
- end
356
- end
357
-
358
- def generate_pollscm(model, triggers)
359
- triggers.tag!('hudson.triggers.SCMTrigger') do |scm|
360
- scm.spec(model.value_)
361
- end
362
- end
363
-
364
- def generate_timed(model, triggers)
365
- triggers.tag!('hudson.triggers.TimerTrigger') do |timed|
366
- timed.spec(model.value_)
367
- end
368
- end
369
-
370
- def generate_gerrit(model, triggers)
371
- triggers.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger') do |gerrit|
372
- gerrit.spec
373
- gerrit.gerritProjects do |gerrit_projects|
374
- model.projects_.each { |p| generate(p, gerrit_projects) }
375
- end
376
-
377
- gerrit.skipVote do |skip_vote|
378
- skip_vote.onSuccessful(false)
379
- skip_vote.onFailed(false)
380
- skip_vote.onUnstable(false)
381
- skip_vote.onNotBuilt(false)
382
- end
383
- gerrit.silentMode(false)
384
- gerrit.escapeQuotes(true)
385
- gerrit.noNameAndEmailParameters(false)
386
- gerrit.dynamicTriggerConfiguration('False')
387
- gerrit.triggerConfigURL
388
- gerrit.allowTriggeringUnreviewedPatches(false)
389
-
390
- gerrit.triggerOnEvents do |events|
391
- if model.patchset_uploaded_
392
- events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent')
393
- end
394
-
395
- if model.change_merged_
396
- events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent')
397
- end
398
-
399
- model.comment_added_.each do |e|
400
- events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent') do |comment|
401
- comment.verdictCategory(e[:approval_category])
402
- comment.commentAddedTriggerApprovalValue(e[:approval_value])
403
- end
404
- end
405
- end
406
-
407
- gerrit.buildStartMessage
408
- gerrit.buildFailureMessage
409
- gerrit.buildSuccessfulMessage
410
- gerrit.buildUnstableMessage
411
- gerrit.customUrl
412
- gerrit.serverName('__ANY__')
413
- end
414
- end
415
-
416
- def generate_gerrit_project(model, gerrit_projects)
417
- gerrit_projects.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject') do |project|
418
- project.compareType('PLAIN')
419
- project.pattern(model.project_)
420
- project.branches do |branches|
421
- model.branches_.each do |pattern|
422
- branches.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch') do |branch|
423
- branch.compareType('ANT')
424
- branch.pattern(pattern)
425
- end
426
- end
427
- end
428
- project.filePaths do |file_paths|
429
- model.files_.each do |pattern|
430
- file_paths.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath') do |path|
431
- path.compareType('ANT')
432
- path.pattern(pattern)
433
- end
434
- end
435
- end if model.files_
436
- end
437
- end
438
-
439
- def generate_build_timeout(model, wrappers)
440
- wrappers.tag!('hudson.plugins.build__timeout.BuildTimeoutWrapper') do |timeout|
441
- timeout.timeoutMinutes(15)
442
- timeout.failBuild(false)
443
- timeout.writingDescription(false)
444
- timeout.timeoutType(model.type_)
445
- timeout.timeoutPercentage(model.elastic_percentage_)
446
- timeout.timeoutMinutesElasticDefault(model.elastic_default_timeout_)
447
- end
448
- end
449
-
450
- def generate_timestamps(_model, wrappers)
451
- wrappers.tag!('hudson.plugins.timestamper.TimestamperBuildWrapper')
452
- end
453
-
454
- def generate_password(model, wrappers)
455
- wrappers.tag!('EnvInjectPasswordWrapper', :plugin => 'envinject@1.90') do |env|
456
- env.injectGlobalPasswords(true)
457
- env.maskPasswordParameters(false)
458
- env.passwordEntries do |entries|
459
- entries.EnvInjectPasswordEntry do |entry|
460
- entry.name(model.name_)
461
- entry.value(model.password_)
462
- end
463
- end
464
- end
465
- end
466
-
467
- def generate_xvfb(model, wrappers)
468
- wrappers.tag!('org.jenkinsci.plugins.xvfb.XvfbBuildWrapper', :plugin => 'xvfb@1.0.16') do |xvfb|
469
- xvfb.installationName(model.install_name_)
470
- xvfb.screen(model.screen_)
471
- xvfb.debug(model.debug_)
472
- xvfb.timeout(model.timeout_)
473
- xvfb.displayNameOffset(model.display_name_offset_)
474
- xvfb.shutdownWithBuild(model.shutdown_with_build_)
475
- xvfb.autoDisplayName(model.auto_display_name_)
476
- xvfb.parallelBuild(model.parallel_build_)
477
- end
478
- end
479
-
480
- def generate_artifactory(model, wrappers)
481
- wrappers.tag!('org.jfrog.hudson.generic.ArtifactoryGenericConfigurator',
482
- :plugin => 'artifactory@2.2.4') do |artifact|
483
- artifact.details do |details|
484
- details.artifactoryName(model.server_)
485
- details.repositoryKey(model.repository_)
486
- details.snapshotsRepositoryKey(model.repository_)
487
- details.artifactoryUrl
488
- details.stagingPlugin
489
- end
490
- artifact.deployPattern(model.deploy_.join(' '))
491
- artifact.resolvePattern(model.resolve_.join(' '))
492
- artifact.matrixParams
493
- artifact.deployBuildInfo(model.build_info_)
494
- artifact.includeEnvVars(false)
495
- artifact.envVarsPatterns do |env|
496
- env.includePatterns
497
- env.excludePatterns('*password*,*secret*')
498
- end
499
- artifact.discardOldBuilds(false)
500
- artifact.artifactdiscardBuildArtifacts(true)
501
- end
502
- end
503
-
504
- def generate_git(model, project)
505
- project.scm(:class => 'hudson.plugins.git.GitSCM', :plugin => 'git@2.0') do |scm|
506
- scm.configVersion(2)
507
-
508
- scm.userRemoteConfigs do |remote|
509
- remote.tag!('hudson.plugins.git.UserRemoteConfig') do |user|
510
- user.name('origin')
511
- user.refspec(model.refspec_)
512
- user.url(model.url_)
513
- user.credentialsId(model.credentials_)
514
- end
515
- end
516
-
517
- scm.branches do |branches|
518
- model.branches_.each do |b|
519
- branches.tag!('hudson.plugins.git.BranchSpec') do |spec|
520
- spec.name(b)
521
- end
522
- end
523
- end
524
-
525
- scm.gitTool('jgit') if model.jgit_
526
-
527
- scm.extensions do |ext|
528
- generate_git_ext(model, ext)
529
- end
530
- end
531
- end
532
-
533
- def generate_scms(model, project)
534
- project.scm(:class => 'org.jenkinsci.plugins.multiplescms.MultiSCM', :plugin => 'multiple-scms@0.3') do |scm|
535
- unless model.scms_.empty?
536
- scm.scms do |multiple_scms|
537
- model.scms_.each { |e| generate(e, multiple_scms) }
538
- end
539
- end
540
- end
541
- end
542
-
543
- def generate_git_ext(model, ext)
544
- ext.tag!('hudson.plugins.git.extensions.impl.UserExclusion')
545
- if model.choosing_strategy_ == 'gerrit'
546
- ext.tag!('hudson.plugins.git.extensions.impl.BuildChooserSetting') do |strategy|
547
- strategy.buildChooser(:class =>
548
- 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser') do |gerrit|
549
- gerrit.separator('#')
550
- end
551
- end
552
- end
553
- ext.tag!('hudson.plugins.git.extensions.impl.SubmoduleOption') do |submodule|
554
- submodule.disableSubmodules(false)
555
- submodule.recursiveSubmodules(false)
556
- end
557
- if model.basedir_
558
- ext.tag!('hudson.plugins.git.extensions.impl.RelativeTargetDirectory') do |target|
559
- target.relativeTargetDir(model.basedir_)
560
- end
561
- end
562
- if model.reference_repo_
563
- ext.tag!('hudson.plugins.git.extensions.impl.CloneOption') do |target|
564
- target.reference(model.reference_repo_)
565
- end
566
- end
567
- if model.git_config_name_
568
- ext.tag!('hudson.plugins.git.extensions.impl.UserIdentity') do |identity|
569
- identity.name(model.git_config_name_)
570
- identity.email(model.git_config_email_)
571
- end
572
- end
573
- ext.tag!('hudson.plugins.git.extensions.impl.CleanCheckout') if model.clean_
574
- ext.tag!('hudson.plugins.git.extensions.impl.DisableRemotePoll') unless model.fastpoll_
575
- ext.tag!('hudson.plugins.git.extensions.impl.WipeWorkspace') if model.wipe_workspace_
576
- if model.files_
577
- ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction') do |restrict|
578
- restrict.includedRegions(model.files_.join("\n"))
579
- restrict.excludedRegions
580
- end
581
- else
582
- ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction')
583
- end
584
- end
585
-
586
- def generate_param(model, params_def)
587
- params_def.tag!('hudson.model.StringParameterDefinition') do |str_param|
588
- str_param.name(model.name)
589
- str_param.description(model.description_)
590
- str_param.defaultValue(model.default_)
591
- end
592
- end
593
-
594
- def generate_password_param(model, params_def)
595
- params_def.tag!('hudson.model.PasswordParameterDefinition') do |str_param|
596
- str_param.name(model.name)
597
- str_param.description(model.description_)
598
- str_param.defaultValue(model.default_)
599
- end
600
- end
601
-
602
- def generate_blocking_job(model, properties)
603
- properties.tag!('hudson.plugins.buildblocker.BuildBlockerProperty',
604
- :plugin => 'build-blocker-plugin@1.4.1') do |blocker|
605
-
606
- blocker.useBuildBlocker(true)
607
- blocker.blockingJobs(model.jobs_.join("\n"))
608
- end
609
- end
610
-
611
- def generate_postbuild(model, publishers)
612
- model.publishers_.values.flatten.each { |e| generate(e, publishers) }
613
- end
614
-
615
- def generate_archive(model, publishers)
616
- publishers.tag!('hudson.tasks.ArtifactArchiver') do |archive|
617
- archive.artifacts(model.artifacts_)
618
- archive.latestOnly(model.latest_only_) if model.latest_only_
619
- archive.allowEmptyArchive(model.allow_empty_) if model.allow_empty_
620
- end
621
- end
622
-
623
- def generate_email_publisher(model, publishers)
624
- publishers.tag!('hudson.tasks.Mailer') do |email|
625
- email.recipients(model.recipients_)
626
- email.dontNotifyEveryUnstableBuild(!model.notify_every_unstable_build_)
627
- email.sendToIndividuals(model.send_to_individuals_)
628
- end
629
- end
630
-
631
- def generate_nunit_publisher(model, publishers)
632
- publishers.tag!('hudson.plugins.nunit.NUnitPublisher') do |nunit|
633
- nunit.testResultsPattern(model.test_results_pattern_)
634
- nunit.debug(model.debug_)
635
- nunit.keepJUnitReports(model.keep_junit_reports_)
636
- nunit.skipJUnitArchiver(model.skip_junit_archiver_)
637
- end
638
- end
639
-
640
- def generate_xunit_publisher(model, publishers)
641
- publishers.tag!('xunit', :plugin => 'xunit@1.92') do |xunit|
642
- xunit.types do |types|
643
- types.NUnitJunitHudsonTestType do |nunit|
644
- nunit.pattern(model.test_results_pattern_)
645
- nunit.skipNoTestFiles(false)
646
- nunit.failIfNotNew(true)
647
- nunit.deleteOutputFiles(true)
648
- nunit.stopProcessingIfError(true)
649
- end
650
- end
651
- xunit.thresholds do |thresholds|
652
- thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.FailedThreshold') do |test|
653
- if model.failed_threshold_[:total_failed_tests]
654
- test.failureThreshold(model.failed_threshold_[:total_failed_tests])
655
- else
656
- test.failureThreshold
657
- end
658
- if model.failed_threshold_[:new_failed_tests]
659
- test.failureNewThreshold(model.failed_threshold_[:new_failed_tests])
660
- else
661
- test.failureNewThreshold
662
- end
663
- if model.unstable_threshold_[:total_failed_tests]
664
- test.unstableThreshold(model.unstable_threshold_[:total_failed_tests])
665
- else
666
- test.unstableThreshold
667
- end
668
- if model.unstable_threshold_[:new_failed_tests]
669
- test.unstableNewThreshold(model.unstable_threshold_[:new_failed_tests])
670
- else
671
- test.unstableNewThreshold
672
- end
673
- end
674
- thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.SkippedThreshold') do |test|
675
- if model.failed_threshold_[:total_skipped_tests]
676
- test.failureThreshold(model.failed_threshold_[:total_skipped_tests])
677
- else
678
- test.failureThreshold
679
- end
680
- if model.failed_threshold_[:new_skipped_tests]
681
- test.failureNewThreshold(model.failed_threshold_[:new_skipped_tests])
682
- else
683
- test.failureNewThreshold
684
- end
685
- if model.unstable_threshold_[:total_skipped_tests]
686
- test.unstableThreshold(model.unstable_threshold_[:total_skipped_tests])
687
- else
688
- test.unstableThreshold
689
- end
690
- if model.unstable_threshold_[:new_skipped_tests]
691
- test.unstableNewThreshold(model.unstable_threshold_[:new_skipped_tests])
692
- else
693
- test.unstableNewThreshold
694
- end
695
- end
696
- end
697
- xunit.thresholdMode(1)
698
- xunit.extraConfiguration do |extra|
699
- extra.testTimeMargin(3000)
700
- end
701
- end
702
- end
703
-
704
- def generate_html_publisher(model, publishers)
705
- publishers.tag!('htmlpublisher.HtmlPublisher') do |html|
706
- html.reportTargets do |target|
707
- target.tag!('htmlpublisher.HtmlPublisherTarget') do |html_target|
708
- html_target.reportName(model.name)
709
- html_target.reportDir(model.dir_)
710
- html_target.reportFiles(model.file_)
711
- html_target.keepAll(model.keep_all_)
712
- html_target.allowMissing(model.allow_missing_)
713
- html_target.wrapperName('htmlpublisher-wrapper.html')
714
- end
715
- end
716
- end
717
- end
718
-
719
- def generate_cucumber_publisher(model, publishers)
720
- publishers.tag!(
721
- 'org.jenkinsci.plugins.cucumber.jsontestsupport.CucumberTestResultArchiver',
722
- :plugin => 'cucumber-testresult-plugin@0.8.2') do |cucumber|
723
- cucumber.testResults(model.test_results_)
724
- cucumber.ignoreBadSteps(model.ignore_bad_tests_)
725
- end
726
- end
727
-
728
- def generate_logparser(model, publishers)
729
- publishers.tag!('hudson.plugins.logparser.LogParserPublisher') do |logparser|
730
- logparser.unstableOnWarning(model.unstable_on_warning_)
731
- logparser.failBuildOnError(model.fail_on_error_)
732
- logparser.parsingRulesPath(model.rule_file_)
733
- end
734
- end
735
-
736
- def generate_postbuild_script(model, publishers)
737
- publishers.tag!('org.jenkinsci.plugins.postbuildscript.PostBuildScript') do |script|
738
- script.buildSteps do |steps|
739
- model.builders_.each { |e| generate(e, steps) }
740
- end
741
- end
742
- end
743
-
744
- def generate_postbuild_slack(model, publishers)
745
- publishers.tag!('jenkins.plugins.slack.SlackNotifier', :plugin => 'slack@2.3' ) do |slack|
746
- slack.baseUrl(model.base_url_)
747
- slack.teamDomain
748
- slack.authToken(model.auth_token_)
749
- slack.authTokenCredentialId
750
- slack.botUser(false)
751
- slack.room
752
- slack.startNotification(model.start_notification_)
753
- slack.notifySuccess(model.notify_success_)
754
- slack.notifyAborted(model.notify_aborted_)
755
- slack.notifyNotBuilt(model.notify_not_built_)
756
- slack.notifyUnstable(model.notify_unstable_)
757
- slack.notifyRegression(model.notify_regression_)
758
- slack.notifyFailure(model.notify_failure_)
759
- slack.notifyBackToNormal(model.notify_back_to_normal_)
760
- slack.notifyRepeatedFailure(model.notify_repeated_failure_)
761
- slack.includeTestSummary(model.include_test_summary)
762
- slack.includeFailedTests(model.include_failed_tests_)
763
- slack.commitInfoChoice('NONE')
764
- slack.includeCustomMessage(false)
765
- slack.CustomMessage
766
- end
767
- end
768
-
769
- def generate_postbuild_groovy(model, publishers)
770
- publishers.tag!('org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder') do |recorder|
771
- recorder.groovyScript(model.value_)
772
- recorder.behavior(0)
773
- end
774
- end
775
-
776
- def generate_postbuild_trigger(model, publishers)
777
- publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTrigger') do |trigger|
778
- trigger.tag!('configs') do
779
- generate_trigger_project(model, publishers)
780
- end
781
- end
782
- end
783
-
784
- def generate_trigger_project(model, publishers)
785
- publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTriggerConfig') do |project|
786
- project.tag!('configs') do |config|
787
- if model.predefined_parameters_
788
- config.tag!('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do |params|
789
- params.properties(model.predefined_parameters_)
790
- end
791
- end
792
- if model.file_
793
- config.tag!('hudson.plugins.parameterizedtrigger.FileBuildParameters') do |params|
794
- params.propertiesFile(model.file_)
795
- params.failTriggerOnMissing(model.fail_on_missing_) if model.fail_on_missing_
796
- params.failTriggerOnMissing(false) unless model.fail_on_missing_
797
- params.useMatrixChild(false)
798
- params.onlyExactRuns(false)
799
- end
800
- end
801
- if model.current_parameters_
802
- config.tag!('hudson.plugins.parameterizedtrigger.CurrentBuildParameters')
803
- end
804
- if model.pass_through_git_commit_
805
- config.tag!('hudson.plugins.git.GitRevisionBuildParameters') do |git|
806
- git.combineQueuedCommits(true)
807
- end
808
- end
809
- end
810
- project.projects(model.project_.join(','))
811
- project.condition('SUCCESS')
812
- project.triggerWithNoParameters(model.trigger_with_no_parameters_)
813
- end
814
- end
815
-
816
- def generate_clover_php(model, publishers)
817
- publishers.tag!('org.jenkinsci.plugins.cloverphp.CloverPHPPublisher',
818
- :plugin => 'cloverphp@0.3.3') do |clover|
819
- clover.xmlLocation(model.xml_location_)
820
- if model.html_report_dir_
821
- clover.publishHtmlReport(true)
822
- clover.reportDir(model.html_report_dir_)
823
- end
824
- clover.disableArchiving(!model.archive_)
825
-
826
- if model.healthy_target_
827
- clover.healthyTarget do |target|
828
- target.methodCoverage(model.healthy_target_[:method])
829
- target.statementCoverage(model.healthy_target_[:statement])
830
- end
831
- else
832
- clover.healthyTarget
833
- end
834
-
835
- if model.unhealthy_target_
836
- clover.unhealthyTarget do |target|
837
- target.methodCoverage(model.unhealthy_target_[:method])
838
- target.statementCoverage(model.unhealthy_target_[:statement])
839
- end
840
- else
841
- clover.unhealthyTarget
842
- end
843
-
844
- if model.failing_target_
845
- clover.failingTarget do |target|
846
- target.methodCoverage(model.failing_target_[:method])
847
- target.statementCoverage(model.failing_target_[:statement])
848
- end
849
- else
850
- clover.failingTarget
851
- end
852
- end
853
- end
854
-
855
- def generate_javadoc(model, publishers)
856
- publishers.tag!('hudson.tasks.JavadocArchiver',
857
- :plugin => 'javadoc@1.1') do |doc|
858
- doc.javadocDir(model.doc_dir_)
859
- doc.keepAll(model.keep_all_)
860
- end
861
- end
862
-
863
- def generate_pmd(model, publishers)
864
- publishers.tag!('hudson.plugins.pmd.PmdPublisher',
865
- :plugin => 'pmd@3.38') do |pmd|
866
- pmd.healthy
867
- pmd.unHealthy
868
- pmd.thresholdLimit(model.threshold_limit_)
869
- pmd.pluginName('[PMD]')
870
- pmd.defaultEncoding
871
- pmd.canRunOnFailed(false)
872
- pmd.useStableBuildAsReference(false)
873
- pmd.useDeltaValues(false)
874
- pmd.thresholds do |analysis|
875
- analysis.unstableTotalAll
876
- analysis.unstableTotalHigh
877
- analysis.unstableTotalNormal
878
- analysis.unstableTotalLow
879
- analysis.failedTotalAll
880
- analysis.failedTotalHigh
881
- analysis.failedTotalNormal
882
- analysis.failedTotalLow
883
- end
884
- pmd.shouldDetectModules(false)
885
- pmd.dontComputeNew(true)
886
- pmd.doNotResolveRelativePaths(true)
887
- pmd.pattern(model.pmd_results_)
888
- end
889
- end
890
-
891
- def generate_claim_publisher(_, publishers)
892
- publishers.tag!('hudson.plugins.claim.ClaimPublisher', :plugin => 'claim@2.3')
893
- end
894
-
895
- def generate_tap_publisher(model, publishers)
896
- publishers.tag!('org.tap4j.plugin.TapPublisher',
897
- :plugin => 'tap@1.20') do |tap|
898
- tap.testResults(model.test_results_)
899
- tap.failIfNoResults(model.fail_if_no_test_results_)
900
- tap.failedTestsMarkBuildAsFailure(model.fail_if_test_fail_)
901
- tap.includeCommentDiagnostics(model.include_diagnostics_)
902
- tap.planRequired(model.require_plan_)
903
- tap.verbose(model.verbose_)
904
-
905
- tap.outputTapToConsole(false)
906
- tap.enableSubtests(false)
907
- tap.discardOldReports(false)
908
- tap.todoIsFailure(false)
909
- tap.validateNumberOfTests(false)
910
- end
911
- end
912
-
913
- def generate_game_publisher(_, publishers)
914
- publishers.tag!('hudson.plugins.cigame.GamePublisher', :plugin => 'ci-game@1.19')
915
- end
916
-
917
- def generate_chucknorris_publisher(_, publishers)
918
- publishers.tag!('hudson.plugins.chucknorris.CordellWalkerRecorder', :plugin => 'chucknorris@0.5') do |chucknorris|
919
- chucknorris.factGenerator
920
- end
921
- end
922
- end
923
- end
1
+ require 'builder'
2
+
3
+ class BasicObject
4
+ def class
5
+ (class << self; self end).superclass
6
+ end
7
+ end
8
+
9
+ module JenkinsJob
10
+ class XmlGenerator
11
+ GENERATOR_BY_CLASS = {
12
+ FreeStyle => lambda { |generator, model, xml_node| generator.generate_freestyle(model, xml_node) },
13
+ Flow => lambda { |generator, model, xml_node| generator.generate_flow(model, xml_node) },
14
+ Pipeline => lambda { |generator, model, xml_node| generator.generate_pipeline(model, xml_node) },
15
+ MultiJob => lambda { |generator, model, xml_node| generator.generate_multi_job(model, xml_node) },
16
+ View => lambda { |generator, model, xml_node| generator.generate_view(model, xml_node) },
17
+ Common::Throttle => lambda { |generator, model, xml_node| generator.generate_throttle(model, xml_node) },
18
+ Common::LogRotate => lambda { |generator, model, xml_node| generator.generate_logrotate(model, xml_node) },
19
+ Common::PollSCM => lambda { |generator, model, xml_node| generator.generate_pollscm(model, xml_node) },
20
+ Common::Timed => lambda { |generator, model, xml_node| generator.generate_timed(model, xml_node) },
21
+ Common::BuildTimeout => lambda { |generator, model, xml_node| generator.generate_build_timeout(model, xml_node) },
22
+ Common::Timestamps => lambda { |generator, model, xml_node| generator.generate_timestamps(model, xml_node) },
23
+ Common::Artifactory => lambda { |generator, model, xml_node| generator.generate_artifactory(model, xml_node) },
24
+ Common::Password => lambda { |generator, model, xml_node| generator.generate_password(model, xml_node) },
25
+ Common::Gerrit => lambda { |generator, model, xml_node| generator.generate_gerrit(model, xml_node) },
26
+ Common::GerritProject => lambda { |generator, model, xml_node| generator.generate_gerrit_project(model, xml_node) },
27
+ Common::Git => lambda { |generator, model, xml_node| generator.generate_git(model, xml_node) },
28
+ Common::Scms => lambda { |generator, model, xml_node| generator.generate_scms(model, xml_node) },
29
+ Common::Parameter => lambda { |generator, model, xml_node| generator.generate_param(model, xml_node) },
30
+ Common::PasswordParameter => lambda { |generator, model, xml_node| generator.generate_password_param(model, xml_node) },
31
+ Common::BlockingJob => lambda { |generator, model, xml_node| generator.generate_blocking_job(model, xml_node) },
32
+ BuildStep::Shell => lambda { |generator, model, xml_node| generator.generate_shell(model, xml_node) },
33
+ BuildStep::Powershell => lambda { |generator, model, xml_node| generator.generate_powershell(model, xml_node) },
34
+ BuildStep::Batch => lambda { |generator, model, xml_node| generator.generate_batch(model, xml_node) },
35
+ BuildStep::CopyArtifact => lambda { |generator, model, xml_node| generator.generate_copyartifact(model, xml_node) },
36
+ BuildStep::InjectEnv => lambda { |generator, model, xml_node| generator.generate_inject_env(model, xml_node) },
37
+ BuildStep::Ant => lambda { |generator, model, xml_node| generator.generate_ant(model, xml_node) },
38
+ BuildStep::Phase => lambda { |generator, model, xml_node| generator.generate_phase(model, xml_node) },
39
+ BuildStep::Xvfb => lambda { |generator, model, xml_node| generator.generate_xvfb(model, xml_node) },
40
+ Postbuild::Postbuild => lambda { |generator, model, xml_node| generator.generate_postbuild(model, xml_node) },
41
+ Postbuild::Archive => lambda { |generator, model, xml_node| generator.generate_archive(model, xml_node) },
42
+ Postbuild::EmailPublisher => lambda { |generator, model, xml_node| generator.generate_email_publisher(model, xml_node) },
43
+ Postbuild::NUnitPublisher => lambda { |generator, model, xml_node| generator.generate_nunit_publisher(model, xml_node) },
44
+ Postbuild::XUnitPublisher => lambda { |generator, model, xml_node| generator.generate_xunit_publisher(model, xml_node) },
45
+ Postbuild::HtmlPublisher => lambda { |generator, model, xml_node| generator.generate_html_publisher(model, xml_node) },
46
+ Postbuild::CucumberJsonPublisher => lambda { |generator, model, xml_node| generator.generate_cucumber_publisher(model, xml_node) },
47
+ Postbuild::LogParser => lambda { |generator, model, xml_node| generator.generate_logparser(model, xml_node) },
48
+ Postbuild::PostbuildScript => lambda { |generator, model, xml_node| generator.generate_postbuild_script(model, xml_node) },
49
+ Postbuild::PostbuildGroovy => lambda { |generator, model, xml_node| generator.generate_postbuild_groovy(model, xml_node) },
50
+ Postbuild::PostbuildTrigger => lambda { |generator, model, xml_node| generator.generate_postbuild_trigger(model, xml_node) },
51
+ Postbuild::CloverPhpPublisher => lambda { |generator, model, xml_node| generator.generate_clover_php(model, xml_node) },
52
+ Postbuild::JavaDocPublisher => lambda { |generator, model, xml_node| generator.generate_javadoc(model, xml_node) },
53
+ Postbuild::PMDPublisher => lambda { |generator, model, xml_node| generator.generate_pmd(model, xml_node) },
54
+ Postbuild::ClaimPublisher => lambda { |generator, model, xml_node| generator.generate_claim_publisher(model, xml_node) },
55
+ Postbuild::TapPublisher => lambda { |generator, model, xml_node| generator.generate_tap_publisher(model, xml_node) },
56
+ Postbuild::GamePublisher => lambda { |generator, model, xml_node| generator.generate_game_publisher(model, xml_node) },
57
+ Postbuild::ChuckNorrisPublisher => lambda { |generator, model, xml_node| generator.generate_chucknorris_publisher(model, xml_node) },
58
+ Postbuild::PostbuildSlack => lambda { |generator, model, xml_node| generator.generate_postbuild_slack(model, xml_node) },
59
+ Postbuild::HipchatNotifications => lambda { |generator, model, xml_node| generator.generate_hipchat_notifications(model, xml_node) },
60
+ }
61
+
62
+ def generate(model, xml_node = ::Builder::XmlMarkup.new(:indent => 2))
63
+ if GENERATOR_BY_CLASS[model.class]
64
+ GENERATOR_BY_CLASS[model.class].call(self, model, xml_node)
65
+ else
66
+ fail "Missing XML generator for class #{model.class}"
67
+ end
68
+ end
69
+
70
+ def generate_common(model, project)
71
+ project.actions
72
+ if model.desc_
73
+ project.description(model.desc_)
74
+ else
75
+ project.description('<!-- Managed by Jenkins Job Builder -->')
76
+ end
77
+
78
+ project.keepDependencies(false)
79
+ project.blockBuildWhenDownstreamBuilding(false)
80
+ project.blockBuildWhenUpstreamBuilding(false)
81
+ project.concurrentBuild(model.concurrent_)
82
+ project.quietPeriod(model.quiet_period_) if model.quiet_period_
83
+
84
+ if model.node_
85
+ project.assignedNode(model.node_)
86
+ project.canRoam(false)
87
+ else
88
+ project.canRoam(true)
89
+ end
90
+
91
+ generate(model.logrotate_, project) if model.logrotate_
92
+
93
+ if model.properties_.empty? && model.parameters_.empty?
94
+ project.properties
95
+ else
96
+ project.properties do |properties|
97
+ model.properties_.values.each { |e| generate(e, properties) }
98
+
99
+ unless model.parameters_.empty?
100
+ properties.tag!('hudson.model.ParametersDefinitionProperty') do |node|
101
+ node.parameterDefinitions do |params_def|
102
+ model.parameters_.values.each { |e| generate(e, params_def) }
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ if model.scm_
110
+ generate(model.scm_, project)
111
+ else
112
+ project.scm(:class => 'hudson.scm.NullSCM')
113
+ end
114
+
115
+ unless model.triggers_.empty?
116
+ project.triggers(:class => 'vector') do |triggers|
117
+ model.triggers_.values.each { |e| generate(e, triggers) }
118
+ end
119
+ end
120
+
121
+ if model.postbuild_
122
+ project.publishers do |publishers|
123
+ generate(model.postbuild_, publishers)
124
+ end
125
+ else
126
+ project.publishers
127
+ end
128
+
129
+ if model.wrappers_.empty?
130
+ project.buildWrappers
131
+ else
132
+ project.buildWrappers do |wrappers|
133
+ model.wrappers_.values.each { |e| generate(e, wrappers) }
134
+ end
135
+ end
136
+ end
137
+
138
+ def generate_freestyle(model, root)
139
+ result = root.project do |project|
140
+ generate_common(model, project)
141
+ project.customWorkspace(model.workspace_) if model.workspace_
142
+ if model.builders_.empty?
143
+ project.builders
144
+ else
145
+ project.builders do |builders|
146
+ model.builders_.each { |e| generate(e, builders) }
147
+ end
148
+ end
149
+ end
150
+ result
151
+ end
152
+
153
+ def generate_flow(model, root)
154
+ result = root.tag!('com.cloudbees.plugins.flow.BuildFlow') do |project|
155
+ project.buildNeedsWorkspace(true)
156
+ generate_common(model, project)
157
+ project.dsl(model.dsl_)
158
+ end
159
+ result
160
+ end
161
+
162
+ def generate_pipeline(model, root)
163
+ result = root.tag!('flow-definition', :plugin => 'workflow-job@2.11') do |project|
164
+ project.actions
165
+ project.description
166
+ project.keepDependencies(false)
167
+ project.properties do |property|
168
+ property.tag!('org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty') do |stuff|
169
+ if model.schedule_
170
+ stuff.triggers do |hudsonTrigger|
171
+ hudsonTrigger.tag!('hudson.triggers.TimerTrigger') do |trigger|
172
+ trigger.spec(model.schedule_) if model.schedule_
173
+ end
174
+ end
175
+ else
176
+ stuff.triggers
177
+ end
178
+ end
179
+ end
180
+ project.definition(:class => 'org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition', :plugin => 'workflow-cps@2.32') do |definition|
181
+ definition.script(model.groovy_)
182
+ end
183
+ project.disabled(false)
184
+ if model.postbuild_
185
+ project.publishers do |publishers|
186
+ generate(model.postbuild_, publishers)
187
+ end
188
+ else
189
+ project.publishers
190
+ end
191
+ end
192
+ result
193
+ end
194
+
195
+ def generate_multi_job(model, root)
196
+ result = root.tag!('com.tikal.jenkins.plugins.multijob.MultiJobProject', :plugin => 'jenkins-multijob-plugin@1.13') do |project|
197
+ generate_common(model, project)
198
+ if model.builders_.empty?
199
+ project.builders
200
+ else
201
+ project.builders do |builders|
202
+ model.builders_.each { |e| generate(e, builders) }
203
+ end
204
+ end
205
+ end
206
+ result
207
+ end
208
+
209
+ def generate_view(model, root)
210
+ result = root.tag!('hudson.model.ListView') do |view|
211
+ view.name(model.name)
212
+ view.filterExecutors(false)
213
+ view.filterQueue(false)
214
+ view.properties(:class => 'hudson.model.View$PropertyList')
215
+ view.jobNames do |jobs|
216
+ jobs.comparator(:class => 'hudson.util.CaseInsensitiveComparator')
217
+ end
218
+ view.jobFilters
219
+ view.columns do |cols|
220
+ cols.tag!('hudson.views.StatusColumn')
221
+ cols.tag!('hudson.views.WeatherColumn')
222
+ cols.tag!('hudson.views.JobColumn')
223
+ cols.tag!('hudson.views.LastSuccessColumn')
224
+ cols.tag!('hudson.views.LastFailureColumn')
225
+ cols.tag!('hudson.views.LastDurationColumn')
226
+ cols.tag!('hudson.views.BuildButtonColumn')
227
+ end
228
+ view.includeRegex(model.jobname_)
229
+ view.recurse(false)
230
+ end
231
+ result
232
+ end
233
+
234
+ def generate_shell(model, builders)
235
+ builders.tag!('hudson.tasks.Shell') do |shell|
236
+ shell.command(model.cmd_)
237
+ end
238
+ end
239
+
240
+ def generate_powershell(model, builders)
241
+ builders.tag!('hudson.plugins.powershell.PowerShell') do |shell|
242
+ shell.command(model.cmd_)
243
+ end
244
+ end
245
+
246
+ def generate_inject_env(model, builders)
247
+ builders.tag!('EnvInjectBuilder') do |inject|
248
+ inject.tag!('info') do |info|
249
+ info.propertiesFilePath(model.properties_file_) if model.properties_file_
250
+ info.propertiesContent(model.properties_content_)
251
+ end
252
+ end
253
+ end
254
+
255
+ def generate_batch(model, builders)
256
+ builders.tag!('hudson.tasks.BatchFile') do |batch|
257
+ batch.command(model.cmd_)
258
+ end
259
+ end
260
+
261
+ def generate_copyartifact(model, builders)
262
+ builders.tag!('hudson.plugins.copyartifact.CopyArtifact') do |copy|
263
+ copy.project(model.project_)
264
+ copy.filter(model.filter_) if model.filter_
265
+ if model.target_
266
+ copy.target(model.target_)
267
+ else
268
+ copy.target
269
+ end
270
+ copy.flatten(false)
271
+ copy.optional(false)
272
+ copy.parameters
273
+ if model.build_number_
274
+ copy.selector(:class => 'hudson.plugins.copyartifact.SpecificBuildSelector') do |s|
275
+ s.buildNumber(model.build_number_)
276
+ end
277
+ else
278
+ copy.selector(:class => 'hudson.plugins.copyartifact.StatusBuildSelector') do |s|
279
+ s.stable(false)
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ def generate_ant(model, builders)
286
+ builders.tag!('hudson.tasks.Ant', :plugin => 'ant@1.2') do |ant|
287
+ if model.targets_.empty?
288
+ ant.targets
289
+ else
290
+ ant.targets(model.targets_.join(' '))
291
+ end
292
+ ant.buildFile(model.buildfile_) if model.buildfile_
293
+ ant.properties(model.properties_.map { |k, v| "-D#{k}=#{v}" }.join(' ')) unless model.properties_.empty?
294
+ ant.antOpts(model.java_opts_.join(' ')) unless model.java_opts_.empty?
295
+ end
296
+ end
297
+
298
+ def generate_phase(model, builders)
299
+ builders.tag!('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do |phase|
300
+ phase.phaseName(model.name)
301
+ phase.phaseJobs do |phaseJobs|
302
+ model.jobs_.each do |job|
303
+ phaseJobs.tag!('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do |conf|
304
+ conf.jobName(job.name)
305
+ conf.currParams(true)
306
+ conf.exposedSCM(true)
307
+ conf.disableJob(false)
308
+ conf.parsingRulesPath
309
+ conf.maxRetries(job.retries_)
310
+ if job.retries_ > 0
311
+ conf.enableRetryStrategy(true)
312
+ else
313
+ conf.enableRetryStrategy(false)
314
+ end
315
+ conf.enableCondition(false)
316
+ conf.abortAllJob(job.abort_others_)
317
+ conf.condition
318
+ conf.configs(:class => 'empty-list')
319
+ if job.ignore_result_
320
+ conf.killPhaseOnJobResultCondition('NEVER')
321
+ else
322
+ conf.killPhaseOnJobResultCondition('FAILURE')
323
+ end
324
+ conf.buildOnlyIfSCMChanges(false)
325
+ end
326
+ end
327
+ end
328
+ phase.continuationCondition('SUCCESSFUL')
329
+ end
330
+ end
331
+
332
+ def generate_throttle(model, properties)
333
+ properties.tag!('hudson.plugins.throttleconcurrents.ThrottleJobProperty') do |throttle|
334
+ throttle.maxConcurrentPerNode(model.max_per_node_)
335
+ throttle.maxConcurrentTotal(model.max_total_)
336
+ throttle.throttleEnabled(true)
337
+
338
+ if model.categories_
339
+ throttle.categories do |categories|
340
+ model.categories_.each { |cat| categories.string(cat) }
341
+ end
342
+ throttle.throttleOption('category')
343
+ else
344
+ throttle.throttleOption('project')
345
+ end
346
+ throttle.configVersion(1)
347
+ end
348
+ end
349
+
350
+ def generate_logrotate(model, project)
351
+ project.logRotator do |log|
352
+ log.daysToKeep(model.days_to_keep_) if model.days_to_keep_
353
+ log.numToKeep(model.num_to_keep_) if model.num_to_keep_
354
+ log.artifactDaysToKeep(model.artifact_days_to_keep_) if model.artifact_days_to_keep_
355
+ log.artifactNumToKeep(model.artifact_num_to_keep_) if model.artifact_num_to_keep_
356
+ end
357
+ end
358
+
359
+ def generate_pollscm(model, triggers)
360
+ triggers.tag!('hudson.triggers.SCMTrigger') do |scm|
361
+ scm.spec(model.value_)
362
+ end
363
+ end
364
+
365
+ def generate_timed(model, triggers)
366
+ triggers.tag!('hudson.triggers.TimerTrigger') do |timed|
367
+ timed.spec(model.value_)
368
+ end
369
+ end
370
+
371
+ def generate_gerrit(model, triggers)
372
+ triggers.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger') do |gerrit|
373
+ gerrit.spec
374
+ gerrit.gerritProjects do |gerrit_projects|
375
+ model.projects_.each { |p| generate(p, gerrit_projects) }
376
+ end
377
+
378
+ gerrit.skipVote do |skip_vote|
379
+ skip_vote.onSuccessful(false)
380
+ skip_vote.onFailed(false)
381
+ skip_vote.onUnstable(false)
382
+ skip_vote.onNotBuilt(false)
383
+ end
384
+ gerrit.silentMode(false)
385
+ gerrit.escapeQuotes(true)
386
+ gerrit.noNameAndEmailParameters(false)
387
+ gerrit.dynamicTriggerConfiguration('False')
388
+ gerrit.triggerConfigURL
389
+ gerrit.allowTriggeringUnreviewedPatches(false)
390
+
391
+ gerrit.triggerOnEvents do |events|
392
+ if model.patchset_uploaded_
393
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent')
394
+ end
395
+
396
+ if model.change_merged_
397
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent')
398
+ end
399
+
400
+ model.comment_added_.each do |e|
401
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent') do |comment|
402
+ comment.verdictCategory(e[:approval_category])
403
+ comment.commentAddedTriggerApprovalValue(e[:approval_value])
404
+ end
405
+ end
406
+ end
407
+
408
+ gerrit.buildStartMessage
409
+ gerrit.buildFailureMessage
410
+ gerrit.buildSuccessfulMessage
411
+ gerrit.buildUnstableMessage
412
+ gerrit.customUrl
413
+ gerrit.serverName('__ANY__')
414
+ end
415
+ end
416
+
417
+ def generate_gerrit_project(model, gerrit_projects)
418
+ gerrit_projects.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject') do |project|
419
+ project.compareType('PLAIN')
420
+ project.pattern(model.project_)
421
+ project.branches do |branches|
422
+ model.branches_.each do |pattern|
423
+ branches.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch') do |branch|
424
+ branch.compareType('ANT')
425
+ branch.pattern(pattern)
426
+ end
427
+ end
428
+ end
429
+ project.filePaths do |file_paths|
430
+ model.files_.each do |pattern|
431
+ file_paths.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath') do |path|
432
+ path.compareType('ANT')
433
+ path.pattern(pattern)
434
+ end
435
+ end
436
+ end if model.files_
437
+ end
438
+ end
439
+
440
+ def generate_build_timeout(model, wrappers)
441
+ wrappers.tag!('hudson.plugins.build__timeout.BuildTimeoutWrapper') do |timeout|
442
+ timeout.timeoutMinutes(15)
443
+ timeout.failBuild(false)
444
+ timeout.writingDescription(false)
445
+ timeout.timeoutType(model.type_)
446
+ timeout.timeoutPercentage(model.elastic_percentage_)
447
+ timeout.timeoutMinutesElasticDefault(model.elastic_default_timeout_)
448
+ end
449
+ end
450
+
451
+ def generate_timestamps(_model, wrappers)
452
+ wrappers.tag!('hudson.plugins.timestamper.TimestamperBuildWrapper')
453
+ end
454
+
455
+ def generate_password(model, wrappers)
456
+ wrappers.tag!('EnvInjectPasswordWrapper', :plugin => 'envinject@1.90') do |env|
457
+ env.injectGlobalPasswords(true)
458
+ env.maskPasswordParameters(false)
459
+ env.passwordEntries do |entries|
460
+ entries.EnvInjectPasswordEntry do |entry|
461
+ entry.name(model.name_)
462
+ entry.value(model.password_)
463
+ end
464
+ end
465
+ end
466
+ end
467
+
468
+ def generate_xvfb(model, wrappers)
469
+ wrappers.tag!('org.jenkinsci.plugins.xvfb.XvfbBuildWrapper', :plugin => 'xvfb@1.0.16') do |xvfb|
470
+ xvfb.installationName(model.install_name_)
471
+ xvfb.screen(model.screen_)
472
+ xvfb.debug(model.debug_)
473
+ xvfb.timeout(model.timeout_)
474
+ xvfb.displayNameOffset(model.display_name_offset_)
475
+ xvfb.shutdownWithBuild(model.shutdown_with_build_)
476
+ xvfb.autoDisplayName(model.auto_display_name_)
477
+ xvfb.parallelBuild(model.parallel_build_)
478
+ end
479
+ end
480
+
481
+ def generate_artifactory(model, wrappers)
482
+ wrappers.tag!('org.jfrog.hudson.generic.ArtifactoryGenericConfigurator',
483
+ :plugin => 'artifactory@2.2.4') do |artifact|
484
+ artifact.details do |details|
485
+ details.artifactoryName(model.server_)
486
+ details.repositoryKey(model.repository_)
487
+ details.snapshotsRepositoryKey(model.repository_)
488
+ details.artifactoryUrl
489
+ details.stagingPlugin
490
+ end
491
+ artifact.deployPattern(model.deploy_.join(' '))
492
+ artifact.resolvePattern(model.resolve_.join(' '))
493
+ artifact.matrixParams
494
+ artifact.deployBuildInfo(model.build_info_)
495
+ artifact.includeEnvVars(false)
496
+ artifact.envVarsPatterns do |env|
497
+ env.includePatterns
498
+ env.excludePatterns('*password*,*secret*')
499
+ end
500
+ artifact.discardOldBuilds(false)
501
+ artifact.artifactdiscardBuildArtifacts(true)
502
+ end
503
+ end
504
+
505
+ def generate_git(model, project)
506
+ project.scm(:class => 'hudson.plugins.git.GitSCM', :plugin => 'git@2.0') do |scm|
507
+ scm.configVersion(2)
508
+
509
+ scm.userRemoteConfigs do |remote|
510
+ remote.tag!('hudson.plugins.git.UserRemoteConfig') do |user|
511
+ user.name('origin')
512
+ user.refspec(model.refspec_)
513
+ user.url(model.url_)
514
+ user.credentialsId(model.credentials_)
515
+ end
516
+ end
517
+
518
+ scm.branches do |branches|
519
+ model.branches_.each do |b|
520
+ branches.tag!('hudson.plugins.git.BranchSpec') do |spec|
521
+ spec.name(b)
522
+ end
523
+ end
524
+ end
525
+
526
+ scm.gitTool('jgit') if model.jgit_
527
+
528
+ scm.extensions do |ext|
529
+ generate_git_ext(model, ext)
530
+ end
531
+ end
532
+ end
533
+
534
+ def generate_scms(model, project)
535
+ project.scm(:class => 'org.jenkinsci.plugins.multiplescms.MultiSCM', :plugin => 'multiple-scms@0.3') do |scm|
536
+ unless model.scms_.empty?
537
+ scm.scms do |multiple_scms|
538
+ model.scms_.each { |e| generate(e, multiple_scms) }
539
+ end
540
+ end
541
+ end
542
+ end
543
+
544
+ def generate_git_ext(model, ext)
545
+ ext.tag!('hudson.plugins.git.extensions.impl.UserExclusion')
546
+ if model.choosing_strategy_ == 'gerrit'
547
+ ext.tag!('hudson.plugins.git.extensions.impl.BuildChooserSetting') do |strategy|
548
+ strategy.buildChooser(:class =>
549
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser') do |gerrit|
550
+ gerrit.separator('#')
551
+ end
552
+ end
553
+ end
554
+ ext.tag!('hudson.plugins.git.extensions.impl.SubmoduleOption') do |submodule|
555
+ submodule.disableSubmodules(false)
556
+ submodule.recursiveSubmodules(false)
557
+ end
558
+ if model.basedir_
559
+ ext.tag!('hudson.plugins.git.extensions.impl.RelativeTargetDirectory') do |target|
560
+ target.relativeTargetDir(model.basedir_)
561
+ end
562
+ end
563
+ if model.reference_repo_
564
+ ext.tag!('hudson.plugins.git.extensions.impl.CloneOption') do |target|
565
+ target.reference(model.reference_repo_)
566
+ end
567
+ end
568
+ if model.git_config_name_
569
+ ext.tag!('hudson.plugins.git.extensions.impl.UserIdentity') do |identity|
570
+ identity.name(model.git_config_name_)
571
+ identity.email(model.git_config_email_)
572
+ end
573
+ end
574
+ ext.tag!('hudson.plugins.git.extensions.impl.CleanCheckout') if model.clean_
575
+ ext.tag!('hudson.plugins.git.extensions.impl.DisableRemotePoll') unless model.fastpoll_
576
+ ext.tag!('hudson.plugins.git.extensions.impl.WipeWorkspace') if model.wipe_workspace_
577
+ if model.files_
578
+ ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction') do |restrict|
579
+ restrict.includedRegions(model.files_.join("\n"))
580
+ restrict.excludedRegions
581
+ end
582
+ else
583
+ ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction')
584
+ end
585
+ end
586
+
587
+ def generate_param(model, params_def)
588
+ params_def.tag!('hudson.model.StringParameterDefinition') do |str_param|
589
+ str_param.name(model.name)
590
+ str_param.description(model.description_)
591
+ str_param.defaultValue(model.default_)
592
+ end
593
+ end
594
+
595
+ def generate_password_param(model, params_def)
596
+ params_def.tag!('hudson.model.PasswordParameterDefinition') do |str_param|
597
+ str_param.name(model.name)
598
+ str_param.description(model.description_)
599
+ str_param.defaultValue(model.default_)
600
+ end
601
+ end
602
+
603
+ def generate_blocking_job(model, properties)
604
+ properties.tag!('hudson.plugins.buildblocker.BuildBlockerProperty',
605
+ :plugin => 'build-blocker-plugin@1.4.1') do |blocker|
606
+
607
+ blocker.useBuildBlocker(true)
608
+ blocker.blockingJobs(model.jobs_.join("\n"))
609
+ end
610
+ end
611
+
612
+ def generate_postbuild(model, publishers)
613
+ model.publishers_.values.flatten.each { |e| generate(e, publishers) }
614
+ end
615
+
616
+ def generate_archive(model, publishers)
617
+ publishers.tag!('hudson.tasks.ArtifactArchiver') do |archive|
618
+ archive.artifacts(model.artifacts_)
619
+ archive.latestOnly(model.latest_only_) if model.latest_only_
620
+ archive.allowEmptyArchive(model.allow_empty_) if model.allow_empty_
621
+ end
622
+ end
623
+
624
+ def generate_email_publisher(model, publishers)
625
+ publishers.tag!('hudson.tasks.Mailer') do |email|
626
+ email.recipients(model.recipients_)
627
+ email.dontNotifyEveryUnstableBuild(!model.notify_every_unstable_build_)
628
+ email.sendToIndividuals(model.send_to_individuals_)
629
+ end
630
+ end
631
+
632
+ def generate_nunit_publisher(model, publishers)
633
+ publishers.tag!('hudson.plugins.nunit.NUnitPublisher') do |nunit|
634
+ nunit.testResultsPattern(model.test_results_pattern_)
635
+ nunit.debug(model.debug_)
636
+ nunit.keepJUnitReports(model.keep_junit_reports_)
637
+ nunit.skipJUnitArchiver(model.skip_junit_archiver_)
638
+ end
639
+ end
640
+
641
+ def generate_xunit_publisher(model, publishers)
642
+ publishers.tag!('xunit', :plugin => 'xunit@1.92') do |xunit|
643
+ xunit.types do |types|
644
+ types.NUnitJunitHudsonTestType do |nunit|
645
+ nunit.pattern(model.test_results_pattern_)
646
+ nunit.skipNoTestFiles(false)
647
+ nunit.failIfNotNew(true)
648
+ nunit.deleteOutputFiles(true)
649
+ nunit.stopProcessingIfError(true)
650
+ end
651
+ end
652
+ xunit.thresholds do |thresholds|
653
+ thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.FailedThreshold') do |test|
654
+ if model.failed_threshold_[:total_failed_tests]
655
+ test.failureThreshold(model.failed_threshold_[:total_failed_tests])
656
+ else
657
+ test.failureThreshold
658
+ end
659
+ if model.failed_threshold_[:new_failed_tests]
660
+ test.failureNewThreshold(model.failed_threshold_[:new_failed_tests])
661
+ else
662
+ test.failureNewThreshold
663
+ end
664
+ if model.unstable_threshold_[:total_failed_tests]
665
+ test.unstableThreshold(model.unstable_threshold_[:total_failed_tests])
666
+ else
667
+ test.unstableThreshold
668
+ end
669
+ if model.unstable_threshold_[:new_failed_tests]
670
+ test.unstableNewThreshold(model.unstable_threshold_[:new_failed_tests])
671
+ else
672
+ test.unstableNewThreshold
673
+ end
674
+ end
675
+ thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.SkippedThreshold') do |test|
676
+ if model.failed_threshold_[:total_skipped_tests]
677
+ test.failureThreshold(model.failed_threshold_[:total_skipped_tests])
678
+ else
679
+ test.failureThreshold
680
+ end
681
+ if model.failed_threshold_[:new_skipped_tests]
682
+ test.failureNewThreshold(model.failed_threshold_[:new_skipped_tests])
683
+ else
684
+ test.failureNewThreshold
685
+ end
686
+ if model.unstable_threshold_[:total_skipped_tests]
687
+ test.unstableThreshold(model.unstable_threshold_[:total_skipped_tests])
688
+ else
689
+ test.unstableThreshold
690
+ end
691
+ if model.unstable_threshold_[:new_skipped_tests]
692
+ test.unstableNewThreshold(model.unstable_threshold_[:new_skipped_tests])
693
+ else
694
+ test.unstableNewThreshold
695
+ end
696
+ end
697
+ end
698
+ xunit.thresholdMode(1)
699
+ xunit.extraConfiguration do |extra|
700
+ extra.testTimeMargin(3000)
701
+ end
702
+ end
703
+ end
704
+
705
+ def generate_html_publisher(model, publishers)
706
+ publishers.tag!('htmlpublisher.HtmlPublisher') do |html|
707
+ html.reportTargets do |target|
708
+ target.tag!('htmlpublisher.HtmlPublisherTarget') do |html_target|
709
+ html_target.reportName(model.name)
710
+ html_target.reportDir(model.dir_)
711
+ html_target.reportFiles(model.file_)
712
+ html_target.keepAll(model.keep_all_)
713
+ html_target.allowMissing(model.allow_missing_)
714
+ html_target.wrapperName('htmlpublisher-wrapper.html')
715
+ end
716
+ end
717
+ end
718
+ end
719
+
720
+ def generate_cucumber_publisher(model, publishers)
721
+ publishers.tag!(
722
+ 'org.jenkinsci.plugins.cucumber.jsontestsupport.CucumberTestResultArchiver',
723
+ :plugin => 'cucumber-testresult-plugin@0.8.2') do |cucumber|
724
+ cucumber.testResults(model.test_results_)
725
+ cucumber.ignoreBadSteps(model.ignore_bad_tests_)
726
+ end
727
+ end
728
+
729
+ def generate_logparser(model, publishers)
730
+ publishers.tag!('hudson.plugins.logparser.LogParserPublisher') do |logparser|
731
+ logparser.unstableOnWarning(model.unstable_on_warning_)
732
+ logparser.failBuildOnError(model.fail_on_error_)
733
+ logparser.parsingRulesPath(model.rule_file_)
734
+ end
735
+ end
736
+
737
+ def generate_postbuild_script(model, publishers)
738
+ publishers.tag!('org.jenkinsci.plugins.postbuildscript.PostBuildScript') do |script|
739
+ script.buildSteps do |steps|
740
+ model.builders_.each { |e| generate(e, steps) }
741
+ end
742
+ end
743
+ end
744
+
745
+ def generate_postbuild_slack(model, publishers)
746
+ publishers.tag!('jenkins.plugins.slack.SlackNotifier', :plugin => 'slack@2.3') do |slack|
747
+ slack.baseUrl(model.base_url_)
748
+ slack.teamDomain
749
+ slack.authToken(model.auth_token_)
750
+ slack.authTokenCredentialId
751
+ slack.botUser(false)
752
+ slack.room
753
+ slack.startNotification(model.start_notification_)
754
+ slack.notifySuccess(model.notify_success_)
755
+ slack.notifyAborted(model.notify_aborted_)
756
+ slack.notifyNotBuilt(model.notify_not_built_)
757
+ slack.notifyUnstable(model.notify_unstable_)
758
+ slack.notifyRegression(model.notify_regression_)
759
+ slack.notifyFailure(model.notify_failure_)
760
+ slack.notifyBackToNormal(model.notify_back_to_normal_)
761
+ slack.notifyRepeatedFailure(model.notify_repeated_failure_)
762
+ slack.includeTestSummary(model.include_test_summary)
763
+ slack.includeFailedTests(model.include_failed_tests_)
764
+ slack.commitInfoChoice('NONE')
765
+ slack.includeCustomMessage(false)
766
+ slack.CustomMessage
767
+ end
768
+ end
769
+
770
+ def generate_postbuild_groovy(model, publishers)
771
+ publishers.tag!('org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder') do |recorder|
772
+ recorder.groovyScript(model.value_)
773
+ recorder.behavior(0)
774
+ end
775
+ end
776
+
777
+ def generate_postbuild_trigger(model, publishers)
778
+ publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTrigger') do |trigger|
779
+ trigger.tag!('configs') do
780
+ generate_trigger_project(model, publishers)
781
+ end
782
+ end
783
+ end
784
+
785
+ def generate_trigger_project(model, publishers)
786
+ publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTriggerConfig') do |project|
787
+ project.tag!('configs') do |config|
788
+ if model.predefined_parameters_
789
+ config.tag!('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do |params|
790
+ params.properties(model.predefined_parameters_)
791
+ end
792
+ end
793
+ if model.file_
794
+ config.tag!('hudson.plugins.parameterizedtrigger.FileBuildParameters') do |params|
795
+ params.propertiesFile(model.file_)
796
+ params.failTriggerOnMissing(model.fail_on_missing_) if model.fail_on_missing_
797
+ params.failTriggerOnMissing(false) unless model.fail_on_missing_
798
+ params.useMatrixChild(false)
799
+ params.onlyExactRuns(false)
800
+ end
801
+ end
802
+ if model.current_parameters_
803
+ config.tag!('hudson.plugins.parameterizedtrigger.CurrentBuildParameters')
804
+ end
805
+ if model.pass_through_git_commit_
806
+ config.tag!('hudson.plugins.git.GitRevisionBuildParameters') do |git|
807
+ git.combineQueuedCommits(true)
808
+ end
809
+ end
810
+ end
811
+ project.projects(model.project_.join(','))
812
+ project.condition('SUCCESS')
813
+ project.triggerWithNoParameters(model.trigger_with_no_parameters_)
814
+ end
815
+ end
816
+
817
+ def generate_clover_php(model, publishers)
818
+ publishers.tag!('org.jenkinsci.plugins.cloverphp.CloverPHPPublisher',
819
+ :plugin => 'cloverphp@0.3.3') do |clover|
820
+ clover.xmlLocation(model.xml_location_)
821
+ if model.html_report_dir_
822
+ clover.publishHtmlReport(true)
823
+ clover.reportDir(model.html_report_dir_)
824
+ end
825
+ clover.disableArchiving(!model.archive_)
826
+
827
+ if model.healthy_target_
828
+ clover.healthyTarget do |target|
829
+ target.methodCoverage(model.healthy_target_[:method])
830
+ target.statementCoverage(model.healthy_target_[:statement])
831
+ end
832
+ else
833
+ clover.healthyTarget
834
+ end
835
+
836
+ if model.unhealthy_target_
837
+ clover.unhealthyTarget do |target|
838
+ target.methodCoverage(model.unhealthy_target_[:method])
839
+ target.statementCoverage(model.unhealthy_target_[:statement])
840
+ end
841
+ else
842
+ clover.unhealthyTarget
843
+ end
844
+
845
+ if model.failing_target_
846
+ clover.failingTarget do |target|
847
+ target.methodCoverage(model.failing_target_[:method])
848
+ target.statementCoverage(model.failing_target_[:statement])
849
+ end
850
+ else
851
+ clover.failingTarget
852
+ end
853
+ end
854
+ end
855
+
856
+ def generate_javadoc(model, publishers)
857
+ publishers.tag!('hudson.tasks.JavadocArchiver',
858
+ :plugin => 'javadoc@1.1') do |doc|
859
+ doc.javadocDir(model.doc_dir_)
860
+ doc.keepAll(model.keep_all_)
861
+ end
862
+ end
863
+
864
+ def generate_pmd(model, publishers)
865
+ publishers.tag!('hudson.plugins.pmd.PmdPublisher',
866
+ :plugin => 'pmd@3.38') do |pmd|
867
+ pmd.healthy
868
+ pmd.unHealthy
869
+ pmd.thresholdLimit(model.threshold_limit_)
870
+ pmd.pluginName('[PMD]')
871
+ pmd.defaultEncoding
872
+ pmd.canRunOnFailed(false)
873
+ pmd.useStableBuildAsReference(false)
874
+ pmd.useDeltaValues(false)
875
+ pmd.thresholds do |analysis|
876
+ analysis.unstableTotalAll
877
+ analysis.unstableTotalHigh
878
+ analysis.unstableTotalNormal
879
+ analysis.unstableTotalLow
880
+ analysis.failedTotalAll
881
+ analysis.failedTotalHigh
882
+ analysis.failedTotalNormal
883
+ analysis.failedTotalLow
884
+ end
885
+ pmd.shouldDetectModules(false)
886
+ pmd.dontComputeNew(true)
887
+ pmd.doNotResolveRelativePaths(true)
888
+ pmd.pattern(model.pmd_results_)
889
+ end
890
+ end
891
+
892
+ def generate_claim_publisher(_, publishers)
893
+ publishers.tag!('hudson.plugins.claim.ClaimPublisher', :plugin => 'claim@2.3')
894
+ end
895
+
896
+ def generate_tap_publisher(model, publishers)
897
+ publishers.tag!('org.tap4j.plugin.TapPublisher',
898
+ :plugin => 'tap@1.20') do |tap|
899
+ tap.testResults(model.test_results_)
900
+ tap.failIfNoResults(model.fail_if_no_test_results_)
901
+ tap.failedTestsMarkBuildAsFailure(model.fail_if_test_fail_)
902
+ tap.includeCommentDiagnostics(model.include_diagnostics_)
903
+ tap.planRequired(model.require_plan_)
904
+ tap.verbose(model.verbose_)
905
+
906
+ tap.outputTapToConsole(false)
907
+ tap.enableSubtests(false)
908
+ tap.discardOldReports(false)
909
+ tap.todoIsFailure(false)
910
+ tap.validateNumberOfTests(false)
911
+ end
912
+ end
913
+
914
+ def generate_game_publisher(_, publishers)
915
+ publishers.tag!('hudson.plugins.cigame.GamePublisher', :plugin => 'ci-game@1.19')
916
+ end
917
+
918
+ def generate_chucknorris_publisher(_, publishers)
919
+ publishers.tag!('hudson.plugins.chucknorris.CordellWalkerRecorder', :plugin => 'chucknorris@0.5') do |chucknorris|
920
+ chucknorris.factGenerator
921
+ end
922
+ end
923
+
924
+ def generate_hipchat_notifications(model, publishers)
925
+ publishers.tag!('jenkins.plugins.hipchat.HipChatNotifier', :plugin => 'hipchat@0.2.0') do |hipchat|
926
+ hipchat.token(model.token_)
927
+ hipchat.room(model.room_)
928
+ hipchat.startNotification(model.notify_start_)
929
+ hipchat.notifyAborted(model.notify_aborted_)
930
+ hipchat.notifyFailure(model.notify_failure_)
931
+ hipchat.notifyNotBuilt(model.notify_not_built_)
932
+ hipchat.notifySuccess(model.notify_success_)
933
+ hipchat.notifyUnstable(model.notify_unstable_)
934
+ hipchat.notifyBackToNormal(model.notify_back_to_normal_)
935
+ hipchat.startJobMessage(model.start_message_)
936
+ hipchat.completeJobMessage(model.complete_message_)
937
+ end
938
+ end
939
+ end
940
+ end