Skip to content

Commit d3e0132

Browse files
committed
Merge pull request #425 from CoreMedia/JENKINS-27368
[JENKINS-27368] made closure parameter optional for factory methods
2 parents 59e48db + 502cf32 commit d3e0132

File tree

4 files changed

+191
-50
lines changed

4 files changed

+191
-50
lines changed

docs/Job-DSL-Commands.md

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ methods imply the creation of a Jenkins item and the closure to the method can b
77
The only mandatory option is the item's name.
88

99
```groovy
10-
job('my-job') {
11-
}
10+
job('my-job')
1211
```
1312

1413
When defining jobs, views or folders the name is treated as absolute to the Jenkins root by default, but the seed job
@@ -38,26 +37,25 @@ need.)
3837
The DSL exposes several methods to create jobs of different types.
3938

4039
```groovy
41-
job(String name, Closure closure) // since 1.30, an alias for freeStyleJob
40+
job(String name, Closure closure = null) // since 1.30, an alias for freeStyleJob
4241
43-
freeStyleJob(String name, Closure closure) // since 1.30
42+
freeStyleJob(String name, Closure closure = null) // since 1.30
4443
45-
buildFlowJob(String name, Closure closure) // since 1.30
44+
buildFlowJob(String name, Closure closure = null) // since 1.30
4645
47-
matrixJob(String name, Closure closure) // since 1.30
46+
matrixJob(String name, Closure closure = null) // since 1.30
4847
49-
mavenJob(String name, Closure closure) // since 1.30
48+
mavenJob(String name, Closure closure = null) // since 1.30
5049
51-
multiJob(String name, Closure closure) // since 1.30
50+
multiJob(String name, Closure closure = null) // since 1.30
5251
53-
workflowJob(String name, Closure closure) // since 1.30
52+
workflowJob(String name, Closure closure = null) // since 1.30
5453
```
5554

5655
These methods will return a job object that can be re-used and passed around. E.g.
5756

5857
```groovy
59-
def myJob = freeStyleJob('SimpleJob') {
60-
}
58+
def myJob = freeStyleJob('SimpleJob')
6159
myJob.with {
6260
description 'A Simple Job'
6361
}
@@ -78,17 +76,17 @@ job(Map<String, ?> arguments = [:], Closure closure) // deprecated since 1.30
7876
To create views, the DSL provides the following methods.
7977

8078
```groovy
81-
listView(String name, Closure closure) // since 1.30
79+
listView(String name, Closure closure = null) // since 1.30
8280
83-
sectionedView(String name, Closure closure) // since 1.30
81+
sectionedView(String name, Closure closure = null) // since 1.30
8482
85-
nestedView(String name, Closure closure) // since 1.30
83+
nestedView(String name, Closure closure = null) // since 1.30
8684
87-
deliveryPipelineView(String name, Closure closure) // since 1.30
85+
deliveryPipelineView(String name, Closure closure = null) // since 1.30
8886
89-
buildPipelineView(String name, Closure closure) // since 1.30
87+
buildPipelineView(String name, Closure closure = null) // since 1.30
9088
91-
buildMonitorView(String name, Closure closure) // since 1.30
89+
buildMonitorView(String name, Closure closure = null) // since 1.30
9290
```
9391

9492
The view methods behaves like the [job](#job) methods and will return a view object.
@@ -129,24 +127,20 @@ Folders will be created before jobs and views to ensure that a folder exists bef
129127

130128
```groovy
131129
folder('project-a') {
132-
displayName 'Project A'
130+
displayName('Project A')
133131
}
134132
```
135133

136134
Items can be created within folders by using the full path as job name.
137135

138136
```groovy
139-
folder('project-a') {
140-
}
137+
folder('project-a')
141138
142-
freeStyleJob('project-a/compile') {
143-
}
139+
freeStyleJob('project-a/compile')
144140
145-
listView('project-a/pipeline') {
146-
}
141+
listView('project-a/pipeline')
147142
148-
folder('project-a/testing') {
149-
}
143+
folder('project-a/testing')
150144
```
151145

152146
# Config File
@@ -155,9 +149,9 @@ When the [Config File Provider Plugin](https://wiki.jenkins-ci.org/display/JENKI
155149
installed, the DSL can be used to create configuration files.
156150

157151
```groovy
158-
customConfigFile(String name, Closure configFileClosure) // since 1.30
152+
customConfigFile(String name, Closure configFileClosure = null) // since 1.30
159153
160-
mavenSettingsConfigFile(String name, Closure configFileClosure) // since 1.30
154+
mavenSettingsConfigFile(String name, Closure configFileClosure = null) // since 1.30
161155
```
162156

163157
These methods behaves like the [job](#job) methods and will return a config file object.
@@ -166,8 +160,8 @@ Config files will be created before jobs to ensure that the file exists before i
166160

167161
```groovy
168162
customConfigFile('my-config') {
169-
comment 'My important configuration'
170-
content '<some-xml/>'
163+
comment('My important configuration')
164+
content('<some-xml/>')
171165
}
172166
173167
mavenSettingsConfigFile('central-mirror') {

job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/DslFactory.groovy

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,32 @@ interface DslFactory {
2121
@Deprecated
2222
Job job(Map<String, Object> arguments, @DslContext(Job) Closure closure)
2323

24+
FreeStyleJob job(String name)
25+
2426
FreeStyleJob job(String name, @DslContext(FreeStyleJob) Closure closure)
2527

28+
FreeStyleJob freeStyleJob(String name)
29+
2630
FreeStyleJob freeStyleJob(String name, @DslContext(FreeStyleJob) Closure closure)
2731

32+
BuildFlowJob buildFlowJob(String name)
33+
2834
BuildFlowJob buildFlowJob(String name, @DslContext(BuildFlowJob) Closure closure)
2935

36+
MatrixJob matrixJob(String name)
37+
3038
MatrixJob matrixJob(String name, @DslContext(MatrixJob) Closure closure)
3139

40+
MavenJob mavenJob(String name)
41+
3242
MavenJob mavenJob(String name, @DslContext(MavenJob) Closure closure)
3343

44+
MultiJob multiJob(String name)
45+
3446
MultiJob multiJob(String name, @DslContext(MultiJob) Closure closure)
3547

48+
WorkflowJob workflowJob(String name)
49+
3650
WorkflowJob workflowJob(String name, @DslContext(WorkflowJob) Closure closure)
3751

3852
@Deprecated
@@ -41,21 +55,35 @@ interface DslFactory {
4155
@Deprecated
4256
View view(Map<String, Object> arguments, @DslContext(View) Closure closure)
4357

58+
ListView listView(String name)
59+
4460
ListView listView(String name, @DslContext(ListView) Closure closure)
4561

62+
SectionedView sectionedView(String name)
63+
4664
SectionedView sectionedView(String name, @DslContext(SectionedView) Closure closure)
4765

66+
NestedView nestedView(String name)
67+
4868
NestedView nestedView(String name, @DslContext(NestedView) Closure closure)
4969

70+
DeliveryPipelineView deliveryPipelineView(String name)
71+
5072
DeliveryPipelineView deliveryPipelineView(String name, @DslContext(DeliveryPipelineView) Closure closure)
5173

74+
BuildPipelineView buildPipelineView(String name)
75+
5276
BuildPipelineView buildPipelineView(String name, @DslContext(BuildPipelineView) Closure closure)
5377

78+
BuildMonitorView buildMonitorView(String name)
79+
5480
BuildMonitorView buildMonitorView(String name, @DslContext(BuildMonitorView) Closure closure)
5581

5682
@Deprecated
5783
Folder folder(@DslContext(Folder) Closure closure)
5884

85+
Folder folder(String name)
86+
5987
Folder folder(String name, @DslContext(Folder) Closure closure)
6088

6189
@Deprecated
@@ -64,8 +92,12 @@ interface DslFactory {
6492
@Deprecated
6593
ConfigFile configFile(Map<String, Object> arguments, @DslContext(ConfigFile) Closure closure)
6694

95+
ConfigFile customConfigFile(String name)
96+
6797
ConfigFile customConfigFile(String name, @DslContext(ConfigFile) Closure closure)
6898

99+
ConfigFile mavenSettingsConfigFile(String name)
100+
69101
ConfigFile mavenSettingsConfigFile(String name, @DslContext(ConfigFile) Closure closure)
70102

71103
/**

job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/JobParent.groovy

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,45 +24,47 @@ abstract class JobParent extends Script implements DslFactory {
2424
List<String> queueToBuild = []
2525

2626
@Override
27-
FreeStyleJob job(String name, @DslContext(FreeStyleJob) Closure closure) {
27+
FreeStyleJob job(String name, @DslContext(FreeStyleJob) Closure closure = null) {
2828
freeStyleJob(name, closure)
2929
}
3030

3131
@Override
32-
FreeStyleJob freeStyleJob(String name, @DslContext(FreeStyleJob) Closure closure) {
32+
FreeStyleJob freeStyleJob(String name, @DslContext(FreeStyleJob) Closure closure = null) {
3333
processJob(name, FreeStyleJob, closure)
3434
}
3535

3636
@Override
37-
BuildFlowJob buildFlowJob(String name, @DslContext(BuildFlowJob) Closure closure) {
37+
BuildFlowJob buildFlowJob(String name, @DslContext(BuildFlowJob) Closure closure = null) {
3838
processJob(name, BuildFlowJob, closure)
3939
}
4040

4141
@Override
42-
MatrixJob matrixJob(String name, @DslContext(MatrixJob) Closure closure) {
42+
MatrixJob matrixJob(String name, @DslContext(MatrixJob) Closure closure = null) {
4343
processJob(name, MatrixJob, closure)
4444
}
4545

4646
@Override
47-
MavenJob mavenJob(String name, @DslContext(MavenJob) Closure closure) {
47+
MavenJob mavenJob(String name, @DslContext(MavenJob) Closure closure = null) {
4848
processJob(name, MavenJob, closure)
4949
}
5050

5151
@Override
52-
MultiJob multiJob(String name, @DslContext(MultiJob) Closure closure) {
52+
MultiJob multiJob(String name, @DslContext(MultiJob) Closure closure = null) {
5353
processJob(name, MultiJob, closure)
5454
}
5555

5656
@Override
57-
WorkflowJob workflowJob(String name, @DslContext(WorkflowJob) Closure closure) {
57+
WorkflowJob workflowJob(String name, @DslContext(WorkflowJob) Closure closure = null) {
5858
processJob(name, WorkflowJob, closure)
5959
}
6060

6161
// this method cannot be private due to http://jira.codehaus.org/browse/GROOVY-6263
6262
protected <T extends Job> T processJob(String name, Class<T> jobClass, Closure closure) {
6363
T job = jobClass.newInstance(jm)
6464
job.name = name
65-
job.with(closure)
65+
if (closure) {
66+
job.with(closure)
67+
}
6668
referencedJobs << job
6769
job
6870
}
@@ -82,40 +84,42 @@ abstract class JobParent extends Script implements DslFactory {
8284
}
8385

8486
@Override
85-
ListView listView(String name, @DslContext(ListView) Closure closure) {
87+
ListView listView(String name, @DslContext(ListView) Closure closure = null) {
8688
processView(name, ListView, closure)
8789
}
8890

8991
@Override
90-
SectionedView sectionedView(String name, @DslContext(SectionedView) Closure closure) {
92+
SectionedView sectionedView(String name, @DslContext(SectionedView) Closure closure = null) {
9193
processView(name, SectionedView, closure)
9294
}
9395

9496
@Override
95-
NestedView nestedView(String name, @DslContext(NestedView) Closure closure) {
97+
NestedView nestedView(String name, @DslContext(NestedView) Closure closure = null) {
9698
processView(name, NestedView, closure)
9799
}
98100

99101
@Override
100-
DeliveryPipelineView deliveryPipelineView(String name, @DslContext(DeliveryPipelineView) Closure closure) {
102+
DeliveryPipelineView deliveryPipelineView(String name, @DslContext(DeliveryPipelineView) Closure closure = null) {
101103
processView(name, DeliveryPipelineView, closure)
102104
}
103105

104106
@Override
105-
BuildPipelineView buildPipelineView(String name, @DslContext(BuildPipelineView) Closure closure) {
107+
BuildPipelineView buildPipelineView(String name, @DslContext(BuildPipelineView) Closure closure = null) {
106108
processView(name, BuildPipelineView, closure)
107109
}
108110

109111
@Override
110-
BuildMonitorView buildMonitorView(String name, @DslContext(BuildMonitorView) Closure closure) {
112+
BuildMonitorView buildMonitorView(String name, @DslContext(BuildMonitorView) Closure closure = null) {
111113
processView(name, BuildMonitorView, closure)
112114
}
113115

114116
// this method cannot be private due to http://jira.codehaus.org/browse/GROOVY-6263
115117
protected <T extends View> T processView(String name, Class<T> viewClass, Closure closure) {
116118
T view = viewClass.newInstance(jm)
117119
view.name = name
118-
view.with(closure)
120+
if (closure) {
121+
view.with(closure)
122+
}
119123
referencedViews << view
120124
view
121125
}
@@ -145,21 +149,23 @@ abstract class JobParent extends Script implements DslFactory {
145149
}
146150

147151
@Override
148-
Folder folder(String name, @DslContext(Folder) Closure closure) {
152+
Folder folder(String name, @DslContext(Folder) Closure closure = null) {
149153
Preconditions.checkArgument(!Strings.isNullOrEmpty(name), 'name must be specified')
150154

151155
Folder folder = new Folder(jm)
152156
folder.name = name
153-
folder.with(closure)
157+
if (closure) {
158+
folder.with(closure)
159+
}
154160
referencedJobs << folder
155161
folder
156162
}
157163

158-
ConfigFile customConfigFile(String name, @DslContext(ConfigFile) Closure closure) {
164+
ConfigFile customConfigFile(String name, @DslContext(ConfigFile) Closure closure = null) {
159165
processConfigFile(name, ConfigFileType.Custom, closure)
160166
}
161167

162-
ConfigFile mavenSettingsConfigFile(String name, @DslContext(ConfigFile) Closure closure) {
168+
ConfigFile mavenSettingsConfigFile(String name, @DslContext(ConfigFile) Closure closure = null) {
163169
processConfigFile(name, ConfigFileType.MavenSettings, closure)
164170
}
165171

@@ -180,7 +186,9 @@ abstract class JobParent extends Script implements DslFactory {
180186
protected ConfigFile processConfigFile(String name, ConfigFileType configFileType, Closure closure) {
181187
ConfigFile configFile = new ConfigFile(configFileType, jm)
182188
configFile.name = name
183-
configFile.with(closure)
189+
if (closure) {
190+
configFile.with(closure)
191+
}
184192
referencedConfigFiles << configFile
185193
configFile
186194
}

0 commit comments

Comments
 (0)