jenkins_pipeline_builder 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jenkins_pipeline_builder/extensions/builders.rb +71 -21
- data/lib/jenkins_pipeline_builder/extensions/wrappers.rb +53 -0
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +159 -6
- data/spec/lib/jenkins_pipeline_builder/extensions/registered_spec.rb +3 -2
- data/spec/lib/jenkins_pipeline_builder/extensions/wrappers_spec.rb +111 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0015906b8d8d1be908004af6227116d2b2cf44f0
|
4
|
+
data.tar.gz: 0c29e265ded1b244d5a3572ea1ec8eaa3dbab5ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c9f85580321286f501449bc5de9c41042838f33f60d0f570d2037b51c0bfaa7c51baaae60c5337324202b46076262566b8dc6f7984ee58797610564dfff4621
|
7
|
+
data.tar.gz: e113a4d54514393cb96db1967524d329b585d2e265d0699e087dc6ea59cceb71acefc5a3fe795f142d5f88a857afc2eb35d2b97ea62390bc565a6f42442cfec4
|
@@ -26,36 +26,86 @@ builder do
|
|
26
26
|
jenkins_name 'MultiJob Phase'
|
27
27
|
announced false
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
29
|
+
version '0' do
|
30
|
+
xml do |params|
|
31
|
+
params[:phases].each do |name, content|
|
32
|
+
send('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do
|
33
|
+
phaseName name
|
34
|
+
phaseJobs do
|
35
|
+
content[:jobs].each do |job|
|
36
|
+
send('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do
|
37
|
+
jobName job[:name]
|
38
|
+
currParams job[:current_params] || false
|
39
|
+
exposedSCM job[:exposed_scm] || false
|
40
|
+
if job[:config]
|
41
|
+
configs do
|
42
|
+
if job[:config].key? :predefined_build_parameters
|
43
|
+
send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
|
44
|
+
properties job[:config][:predefined_build_parameters]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
if job[:config].key? :properties_file
|
48
|
+
send('hudson.plugins.parameterizedtrigger.FileBuildParameters') do
|
49
|
+
propertiesFile job[:config][:properties_file][:file]
|
50
|
+
failTriggerOnMissing job[:config][:properties_file][:skip_if_missing] || 'false'
|
51
|
+
end
|
44
52
|
end
|
45
53
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
54
|
+
end
|
55
|
+
killPhaseOnJobResultCondition job[:kill_phase_on] || 'FAILURE'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
continuationCondition content[:continue_condition] || 'SUCCESSFUL'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
version '1.27' do
|
66
|
+
xml do |params|
|
67
|
+
params[:phases].each do |name, content|
|
68
|
+
send('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do
|
69
|
+
phaseName name
|
70
|
+
phaseJobs do
|
71
|
+
content[:jobs].each do |job|
|
72
|
+
send('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do
|
73
|
+
jobName job[:name]
|
74
|
+
currParams job[:current_params] || false
|
75
|
+
exposedSCM job[:exposed_scm] || false
|
76
|
+
disableJob job[:disable_job] || false
|
77
|
+
maxRetries job[:max_retries] || 0
|
78
|
+
enableRetryStrategy job[:enable_retry_strategy] || false
|
79
|
+
abortAllJob job[:abort_all_job] || false
|
80
|
+
if job[:condition]
|
81
|
+
enableCondition true
|
82
|
+
condition job[:condition]
|
83
|
+
applyConditionOnlyIfNoSCMChanges job[:apply_condition_only_if]
|
84
|
+
end
|
85
|
+
|
86
|
+
if job[:config]
|
87
|
+
configs do
|
88
|
+
if job[:config].key? :predefined_build_parameters
|
89
|
+
send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
|
90
|
+
properties job[:config][:predefined_build_parameters]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
if job[:config].key? :properties_file
|
94
|
+
send('hudson.plugins.parameterizedtrigger.FileBuildParameters') do
|
95
|
+
propertiesFile job[:config][:properties_file][:file]
|
96
|
+
failTriggerOnMissing job[:config][:properties_file][:skip_if_missing] || 'false'
|
97
|
+
end
|
50
98
|
end
|
51
99
|
end
|
52
100
|
end
|
101
|
+
killPhaseOnJobResultCondition job[:kill_phase_on] || 'FAILURE'
|
102
|
+
buildOnlyIfSCMChanges job[:build_only_if_scm_changes] || false
|
53
103
|
end
|
54
|
-
killPhaseOnJobResultCondition job[:kill_phase_on] || 'FAILURE'
|
55
104
|
end
|
56
105
|
end
|
106
|
+
continuationCondition content[:continue_condition] || 'SUCCESSFUL'
|
107
|
+
executionType content[:execution_type] || 'PARALLEL'
|
57
108
|
end
|
58
|
-
continuationCondition content[:continue_condition] || 'SUCCESSFUL'
|
59
109
|
end
|
60
110
|
end
|
61
111
|
end
|
@@ -255,3 +255,56 @@ wrapper do
|
|
255
255
|
send('hudson.plugins.ws__cleanup.PreBuildCleanup', 'plugin' => 'ws-cleanup')
|
256
256
|
end
|
257
257
|
end
|
258
|
+
|
259
|
+
wrapper do
|
260
|
+
name :build_timeout
|
261
|
+
plugin_id 'build-timeout'
|
262
|
+
description 'Abort the build if it\'s stuck'
|
263
|
+
jenkins_name 'Abort the build if it\'s stuck'
|
264
|
+
announced false
|
265
|
+
|
266
|
+
xml do |wrapper|
|
267
|
+
send('hudson.plugins.build__timeout.BuildTimeoutWrapper', 'plugin' => 'build-timeout@1.18') do
|
268
|
+
if wrapper[:timeout_strategy] == 'Absolute'
|
269
|
+
strategy 'class' => 'hudson.plugins.build_timeout.impl.AbsoluteTimeOutStrategy' do
|
270
|
+
timeoutMinutes wrapper[:timeout_minutes]
|
271
|
+
end
|
272
|
+
elsif wrapper[:timeout_strategy] == 'Deadline'
|
273
|
+
strategy 'class' => 'hudson.plugins.build_timeout.impl.DeadlineTimeOutStrategy' do
|
274
|
+
deadlineTime wrapper[:deadline_time]
|
275
|
+
deadlineToleranceInMinutes wrapper[:deadline_tolerance]
|
276
|
+
end
|
277
|
+
elsif wrapper[:timeout_strategy] == 'Elastic'
|
278
|
+
strategy 'class' => 'hudson.plugins.build_timeout.impl.ElasticTimeOutStrategy' do
|
279
|
+
timeoutPercentage wrapper[:timeout_percentage]
|
280
|
+
numberOfBuilds wrapper[:number_of_builds]
|
281
|
+
failSafeTimeoutDuration wrapper[:fail_safe_timeout]
|
282
|
+
timeoutMinutesElasticDefault wrapper[:timeout_minutes]
|
283
|
+
end
|
284
|
+
elsif wrapper[:timeout_strategy] == 'Likely stuck'
|
285
|
+
strategy 'class' => 'hudson.plugins.build_timeout.impl.LikelyStuckTimeOutStrategy'
|
286
|
+
elsif wrapper[:timeout_strategy] == 'No Activity'
|
287
|
+
strategy 'class' => 'hudson.plugins.build_timeout.impl.NoActivityTimeOutStrategy' do
|
288
|
+
timeoutSecondsString wrapper[:timeout_seconds]
|
289
|
+
end
|
290
|
+
end
|
291
|
+
timeoutEnvVar wrapper[:timeout_env_var] unless wrapper[:timeout_env_var].nil?
|
292
|
+
if wrapper[:operation] == 'Abort'
|
293
|
+
operationList do
|
294
|
+
send('hudson.plugins.build__timeout.operations.AbortOperation')
|
295
|
+
end
|
296
|
+
elsif wrapper[:operation] == 'Fail'
|
297
|
+
operationList do
|
298
|
+
send('hudson.plugins.build__timeout.operations.FailOperation')
|
299
|
+
end
|
300
|
+
elsif wrapper[:operation] == 'Writing'
|
301
|
+
operationList do
|
302
|
+
send('hudson.plugins.build__timeout.operations.WriteDescriptionOperation') do
|
303
|
+
description wrapper[:description]
|
304
|
+
end
|
305
|
+
end
|
306
|
+
else operationList
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
@@ -50,25 +50,91 @@ describe 'builders' do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'multi_job builder' do
|
53
|
+
params = {}
|
54
|
+
|
53
55
|
before :each do
|
56
|
+
params = { builders: { multi_job: { phases: { foo: { jobs:
|
57
|
+
[{
|
58
|
+
name: 'foo'
|
59
|
+
}] } } } } }
|
54
60
|
allow(JenkinsPipelineBuilder.client).to receive(:plugin).and_return double(
|
55
61
|
list_installed: { 'jenkins-multijob-plugin' => '20.0' }
|
56
62
|
)
|
57
63
|
end
|
58
64
|
|
59
65
|
it 'generates a configuration' do
|
60
|
-
params = { builders: { multi_job: { phases: { foo: { jobs: [{ name: 'foo' }] } } } } }
|
61
66
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
62
67
|
builder = @n_xml.root.children.first
|
63
68
|
expect(builder.name).to match 'com.tikal.jenkins.plugins.multijob.MultiJobBuilder'
|
64
69
|
end
|
65
70
|
|
66
|
-
it '
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
it 'generates a jobName' do
|
72
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
73
|
+
node = @n_xml.xpath '//jobName'
|
74
|
+
expect(node.text).to eq 'foo'
|
75
|
+
end
|
71
76
|
|
77
|
+
it 'generates buildOnlyIfSCMChanges flag and sets to parameter' do
|
78
|
+
params = { builders: { multi_job: { phases: { foo: { jobs:
|
79
|
+
[{
|
80
|
+
name: 'foo',
|
81
|
+
build_only_if_scm_changes: true
|
82
|
+
}] } } } } }
|
83
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
84
|
+
node = @n_xml.xpath '//buildOnlyIfSCMChanges'
|
85
|
+
expect(node.text).to eq 'true'
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'generates buildOnlyIfSCMChanges flag and sets to default' do
|
89
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
90
|
+
node = @n_xml.xpath '//buildOnlyIfSCMChanges'
|
91
|
+
expect(node.text).to eq 'false'
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'generates disableJob flag and sets to parameter' do
|
95
|
+
params = { builders: { multi_job: { phases: { foo: { jobs:
|
96
|
+
[{
|
97
|
+
name: 'foo',
|
98
|
+
disable_job: true
|
99
|
+
}] } } } } }
|
100
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
101
|
+
node = @n_xml.xpath '//disableJob'
|
102
|
+
expect(node.text).to eq 'true'
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'generates disableJob flag and sets to default' do
|
106
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
107
|
+
node = @n_xml.xpath '//disableJob'
|
108
|
+
expect(node.text).to eq 'false'
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'generates maxRetries tag' do
|
112
|
+
params = { builders: { multi_job: { phases: { foo: { jobs:
|
113
|
+
[{
|
114
|
+
name: 'foo',
|
115
|
+
max_retries: 1
|
116
|
+
}] } } } } }
|
117
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
118
|
+
node = @n_xml.xpath '//maxRetries'
|
119
|
+
expect(node.text).to eq '1'
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'generates enableRetryStrategy tag and sets to default' do
|
123
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
124
|
+
node = @n_xml.xpath '//enableRetryStrategy'
|
125
|
+
expect(node.text).to eq 'false'
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'provides job specific config' do
|
129
|
+
params = { builders: { multi_job: { phases: { foo: { jobs:
|
130
|
+
[{
|
131
|
+
name: 'foo',
|
132
|
+
config:
|
133
|
+
{
|
134
|
+
predefined_build_parameters: 'bar',
|
135
|
+
properties_file: { file: 'props', skip_if_missing: true }
|
136
|
+
}
|
137
|
+
}] } } } } }
|
72
138
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
73
139
|
|
74
140
|
node = @n_xml.xpath '//hudson.plugins.parameterizedtrigger.PredefinedBuildParameters'
|
@@ -80,6 +146,93 @@ describe 'builders' do
|
|
80
146
|
node = @n_xml.xpath '//hudson.plugins.parameterizedtrigger.FileBuildParameters/failTriggerOnMissing'
|
81
147
|
expect(node.children.first.content).to eq 'true'
|
82
148
|
end
|
149
|
+
|
150
|
+
it 'generates conditional job tag' do
|
151
|
+
condition = '1+1==2'
|
152
|
+
params = { builders: [{ multi_job: { phases: { foo: { jobs:
|
153
|
+
[{
|
154
|
+
name: 'foo',
|
155
|
+
condition: condition,
|
156
|
+
apply_condition_only_if: false
|
157
|
+
}] } } } }] }
|
158
|
+
|
159
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
160
|
+
|
161
|
+
node = @n_xml.xpath '//enableCondition'
|
162
|
+
expect(node.children.first.content).to eq 'true'
|
163
|
+
|
164
|
+
node = @n_xml.xpath '//condition'
|
165
|
+
expect(node.children.first.content).to eq condition
|
166
|
+
|
167
|
+
node = @n_xml.xpath '//applyConditionOnlyIfNoSCMChanges'
|
168
|
+
expect(node.children.first.content).to eq 'false'
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'generates abort all other jobs tag' do
|
172
|
+
params = { builders: [{ multi_job: { phases: { foo: { jobs:
|
173
|
+
[{
|
174
|
+
name: 'foo',
|
175
|
+
abort_all_job: true
|
176
|
+
}] } } } }] }
|
177
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
178
|
+
node = @n_xml.xpath '//abortAllJob'
|
179
|
+
expect(node.children.first.content).to eq 'true'
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'generates abort all other jobs tag and sets to default' do
|
183
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
184
|
+
node = @n_xml.xpath '//abortAllJob'
|
185
|
+
expect(node.children.first.content).to eq 'false'
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'generates current job parameters with parameters' do
|
189
|
+
params = { builders: [{ multi_job: { phases: { foo: { jobs:
|
190
|
+
[{
|
191
|
+
name: 'foo',
|
192
|
+
current_params: true
|
193
|
+
}] } } } }] }
|
194
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
195
|
+
node = @n_xml.xpath '//currParams'
|
196
|
+
expect(node.children.first.content).to eq 'true'
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'generates current job parameters and sets to default' do
|
200
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
201
|
+
node = @n_xml.xpath '//currParams'
|
202
|
+
expect(node.children.first.content).to eq 'false'
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'generates continuation condition tag with parameter' do
|
206
|
+
params = { builders: [{ multi_job: { phases: { foo: {
|
207
|
+
jobs: [{ name: 'foo' }],
|
208
|
+
continue_condition: 'ALWAYS'
|
209
|
+
} } } }] }
|
210
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
211
|
+
node = @n_xml.xpath '//continuationCondition'
|
212
|
+
expect(node.children.first.content).to eq 'ALWAYS'
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'generates continuation condition tag and sets to default' do
|
216
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
217
|
+
node = @n_xml.xpath '//continuationCondition'
|
218
|
+
expect(node.children.first.content).to eq 'SUCCESSFUL'
|
219
|
+
end
|
220
|
+
|
221
|
+
it 'generates execution type tag with parameter' do
|
222
|
+
params = { builders: [{ multi_job: { phases: { foo: {
|
223
|
+
jobs: [{ name: 'foo' }],
|
224
|
+
execution_type: 'SEQUENTIALLY'
|
225
|
+
} } } }] }
|
226
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
227
|
+
node = @n_xml.xpath '//executionType'
|
228
|
+
expect(node.children.first.content).to eq 'SEQUENTIALLY'
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'generates execution type tag and sets to default' do
|
232
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
233
|
+
node = @n_xml.xpath '//executionType'
|
234
|
+
expect(node.children.first.content).to eq 'PARALLEL'
|
235
|
+
end
|
83
236
|
end
|
84
237
|
|
85
238
|
context 'maven3' do
|
@@ -9,7 +9,8 @@ WRAPPERS = {
|
|
9
9
|
rvm: ['0', '0.5'],
|
10
10
|
timestamp: ['0'],
|
11
11
|
xvfb: ['0'],
|
12
|
-
prebuild_cleanup: ['0']
|
12
|
+
prebuild_cleanup: ['0'],
|
13
|
+
build_timeout: ['0']
|
13
14
|
}.freeze
|
14
15
|
|
15
16
|
PUBLISHERS = {
|
@@ -41,7 +42,7 @@ BUILDERS = {
|
|
41
42
|
copy_artifact: ['0'],
|
42
43
|
inject_vars_file: ['0'],
|
43
44
|
maven3: ['0'],
|
44
|
-
multi_job: ['0'],
|
45
|
+
multi_job: ['0', '1.27'],
|
45
46
|
remote_job: ['0'],
|
46
47
|
shell_command: ['0'],
|
47
48
|
checkmarx_scan: ['0'],
|
@@ -129,4 +129,115 @@ describe 'wrappers' do
|
|
129
129
|
expect(node.first).to_not be_nil
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
context 'build_timeout' do
|
134
|
+
before :each do
|
135
|
+
JenkinsPipelineBuilder.registry.registry[:job][:wrappers][:build_timeout].installed_version = '0.0'
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'generates the correct tags and values for the Absolute strategy' do
|
139
|
+
params = { wrappers: { build_timeout: {
|
140
|
+
timeout_strategy: 'Absolute',
|
141
|
+
timeout_minutes: '5'
|
142
|
+
} } }
|
143
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
144
|
+
|
145
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/strategy')
|
146
|
+
expect(node.to_s).to include('AbsoluteTimeOutStrategy')
|
147
|
+
expect(node.xpath('timeoutMinutes').first).to_not be_nil
|
148
|
+
expect(node.xpath('timeoutMinutes').first.content).to match('5')
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'generates the correct tags and values for the Deadline strategy' do
|
152
|
+
params = { wrappers: { build_timeout: {
|
153
|
+
timeout_strategy: 'Deadline',
|
154
|
+
deadline_time: '12:05:12',
|
155
|
+
deadline_tolerance: '10'
|
156
|
+
} } }
|
157
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
158
|
+
|
159
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/strategy')
|
160
|
+
expect(node.to_s).to include('DeadlineTimeOutStrategy')
|
161
|
+
expect(node.xpath('deadlineTime').first).to_not be_nil
|
162
|
+
expect(node.xpath('deadlineToleranceInMinutes').first).to_not be_nil
|
163
|
+
expect(node.xpath('deadlineTime').first.content).to match('12:05:12')
|
164
|
+
expect(node.xpath('deadlineToleranceInMinutes').first.content).to match('10')
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'generates the correct tags and values for the Elastic strategy' do
|
168
|
+
params = { wrappers: { build_timeout: {
|
169
|
+
timeout_strategy: 'Elastic',
|
170
|
+
timeout_percentage: '150',
|
171
|
+
number_of_builds: '5',
|
172
|
+
fail_safe_timeout: 'true',
|
173
|
+
timeout_minutes: '60'
|
174
|
+
} } }
|
175
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
176
|
+
|
177
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/strategy')
|
178
|
+
expect(node.to_s).to include('ElasticTimeOutStrategy')
|
179
|
+
expect(node.xpath('timeoutPercentage').first).to_not be_nil
|
180
|
+
expect(node.xpath('numberOfBuilds').first).to_not be_nil
|
181
|
+
expect(node.xpath('failSafeTimeoutDuration').first).to_not be_nil
|
182
|
+
expect(node.xpath('timeoutMinutesElasticDefault').first).to_not be_nil
|
183
|
+
expect(node.xpath('timeoutPercentage').first.content).to match('150')
|
184
|
+
expect(node.xpath('numberOfBuilds').first.content).to match('5')
|
185
|
+
expect(node.xpath('failSafeTimeoutDuration').first.content).to match('true')
|
186
|
+
expect(node.xpath('timeoutMinutesElasticDefault').first.content).to match('60')
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'generates the Likely stuck strategy' do
|
190
|
+
params = { wrappers: { build_timeout: { timeout_strategy: 'Likely stuck' } } }
|
191
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
192
|
+
|
193
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/strategy')
|
194
|
+
expect(node.to_s).to include('LikelyStuckTimeOutStrategy')
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'generates the correct tags for the No Activity strategy' do
|
198
|
+
params = { wrappers: { build_timeout: {
|
199
|
+
timeout_strategy: 'No Activity',
|
200
|
+
timeout_seconds: '180'
|
201
|
+
} } }
|
202
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
203
|
+
|
204
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/strategy')
|
205
|
+
expect(node.to_s).to include('NoActivityTimeOutStrategy')
|
206
|
+
expect(node.xpath('timeoutSecondsString').first).to_not be_nil
|
207
|
+
expect(node.xpath('timeoutSecondsString').first.content).to match('180')
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'generates the correct tags and values for Time-out variable' do
|
211
|
+
params = { wrappers: { build_timeout: { timeout_env_var: '55' } } }
|
212
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
213
|
+
|
214
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/timeoutEnvVar')
|
215
|
+
expect(node.first).to_not be_nil
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'generates the correct tag for the Abort the build action' do
|
219
|
+
params = { wrappers: { build_timeout: { operation: 'Abort' } } }
|
220
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
221
|
+
|
222
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/operationList')
|
223
|
+
expect(node.xpath('hudson.plugins.build__timeout.operations.AbortOperation').first).to_not be_nil
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'generates the correct tag for the Fail the build action' do
|
227
|
+
params = { wrappers: { build_timeout: { operation: 'Fail' } } }
|
228
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
229
|
+
|
230
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/operationList')
|
231
|
+
expect(node.xpath('hudson.plugins.build__timeout.operations.FailOperation').first).to_not be_nil
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'generates the correct tags for the Writing the build description actions' do
|
235
|
+
params = { wrappers: { build_timeout: { operation: 'Writing' } } }
|
236
|
+
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
237
|
+
str = 'hudson.plugins.build__timeout.operations.WriteDescriptionOperation'
|
238
|
+
node = @n_xml.root.xpath('//buildWrappers/hudson.plugins.build__timeout.BuildTimeoutWrapper/operationList')
|
239
|
+
expect(node.xpath(str).first).to_not be_nil
|
240
|
+
expect(node.xpath("#{str}/description").first).to_not be_nil
|
241
|
+
end
|
242
|
+
end
|
132
243
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenkins_pipeline_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Moochnick
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-09-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|