Merge "Exclude yangide from builder-check-poms"
[releng/builder.git] / jjb / integration / integration-macros.yaml
1 - parameter:
2     name: integration-branch
3     parameters:
4         - string:
5             name: BRANCH
6             default: '{branch}'
7             description: 'Distribution GIT branch'
8
9 - parameter:
10     name: integration-bundleurl
11     parameters:
12         - string:
13             name: BUNDLEURL
14             default: '{bundleurl}'
15             description: 'URL to karaf distribution zip'
16
17 - parameter:
18     name: integration-jdk-version
19     parameters:
20         - string:
21             name: JDKVERSION
22             default: '{jdkversion}'
23             description: 'Parameter to indicate JAVA Version'
24
25 - parameter:
26     name: integration-controller-scope
27     parameters:
28         - string:
29             name: CONTROLLERSCOPE
30             default: '{controller-scope}'
31             description: 'Feature Only or Feature All test'
32
33 - parameter:
34     name: integration-controller-features
35     parameters:
36         - string:
37             name: CONTROLLERFEATURES
38             default: '{controller-features}'
39             description: 'Features to install in the controller separated by comma'
40
41 - parameter:
42     name: integration-distribution-stream
43     parameters:
44         - string:
45             name: DISTROSTREAM
46             default: '{stream}'
47             description: 'Distribution stream string, for suites to know which behavior to expect'
48
49 - parameter:
50     name: integration-stream-test-plan
51     parameters:
52         - string:
53             name: STREAMTESTPLAN
54             default: '{stream-test-plan}'
55             description: 'Stream-specific test plan we will run'
56
57 - parameter:
58     name: integration-test-plan
59     parameters:
60         - string:
61             name: TESTPLAN
62             default: '{test-plan}'
63             description: 'General test plan we will run unless stream-specific one is found'
64
65 - parameter:
66     name: integration-test-options
67     parameters:
68         - string:
69             name: TESTOPTIONS
70             default: '{test-options}'
71             description: 'Robot command options'
72
73 - parameter:
74     name: integration-distribution-git-url
75     parameters:
76         - string:
77             name: DISTROGITURL
78             default: 'ssh://jenkins-$SILO@git.opendaylight.org:29418/integration/distribution'
79             description: 'Distribution GIT URL (do not modify)'
80
81 - parameter:
82     name: integration-patch-refspec
83     parameters:
84         - string:
85             name: PATCHREFSPEC
86             default: '{branch}'
87             description: 'Integration Patch Refspec'
88
89 # Macro: integration-gerrit-scm
90 # Operation: this macro downloads a project gerrit
91 # Used by: all csit jobs
92
93 - scm:
94     name: integration-gerrit-scm
95     scm:
96         - git:
97             credentials-id: 'opendaylight-jenkins-ssh'
98             url: '$GIT_BASE'
99             basedir: '{basedir}'
100             refspec: '{refspec}'
101             branches:
102                 - 'origin/{branch}'
103             skip-tag: true
104             choosing-strategy: 'gerrit'
105
106 # Macro: integration-distribution-scm
107 # Operation: this macro downloads the integration/distribution repo using distribution as basedir
108 # Used by: integration-patch-test-{stream} job template
109
110 - scm:
111     name: integration-distribution-scm
112     scm:
113         - git:
114             credentials-id: 'opendaylight-jenkins-ssh'
115             basedir: 'distribution'
116             url: '$DISTROGITURL'
117             refspec: ''
118             branches:
119                 - 'origin/{branch}'
120             skip-tag: true
121
122 # Macro: integration-trigger-patch-submitted
123 # Operation: this macro sets a trigger for patch submitted on a path pattern
124 # Used by: {project}-verify-csit-* job templates
125
126 - trigger:
127     name: integration-trigger-patch-submitted
128     triggers:
129         - gerrit:
130             server-name: 'OpenDaylight'
131             trigger-on:
132                 - patchset-created-event:
133                     exclude-drafts: 'true'
134                     exclude-trivial-rebase: 'false'
135                     exclude-no-code-change: 'true'
136                 - draft-published-event
137                 - comment-added-contains-event:
138                     comment-contains-value: 'recheck'
139                 - comment-added-contains-event:
140                     comment-contains-value: 'reverify'
141             override-votes: true
142             gerrit-build-unstable-verified-value: +1
143             gerrit-build-unstable-codereview-value: 0
144             projects:
145               - project-compare-type: 'ANT'
146                 project-pattern: '{name}'
147                 branches:
148                   - branch-compare-type: 'ANT'
149                     branch-pattern: '**/{branch}'
150                 file-paths:
151                   - compare-type: 'ANT'
152                     pattern: '{pattern}'
153
154 # Macro: integration-trigger-patch-merged
155 # Operation: this macro sets a trigger for patch merged on a path pattern
156 # Used by: not used yet
157
158 - trigger:
159     name: integration-trigger-patch-merged
160     triggers:
161         - gerrit:
162             server-name: 'OpenDaylight'
163             trigger-on:
164                 - change-merged-event
165                 - comment-added-contains-event:
166                     comment-contains-value: 'remerge'
167             projects:
168               - project-compare-type: 'ANT'
169                 project-pattern: '{name}'
170                 branches:
171                   - branch-compare-type: 'ANT'
172                     branch-pattern: '**/{branch}'
173                 file-paths:
174                   - compare-type: 'ANT'
175                     pattern: '{pattern}'
176
177 # Macro: integration-csit-only
178 # Operation: this macro sets a trigger on reverse job list
179 # Used by: csit -only- job templates
180
181 - trigger:
182     name: integration-csit-only
183     triggers:
184         - reverse:
185             jobs: '{jobs}'
186             result: 'success'
187
188 # Macro: integration-csit-all
189 # Operation: this macro sets a periodic trigger
190 # Used by: csit -all- job teamplates
191
192 - trigger:
193     name: integration-csit-all
194     triggers:
195         - timed: 'H H * * *'
196
197 # Macro: integration-jclouds-controller-mininet
198 # Operation: this macro will spin the controller and mininet vms
199 # Used by: {project}-csit-* job templates
200
201 - wrapper:
202     name: integration-jclouds-controller-mininet
203     wrappers:
204       - jclouds:
205           instances:
206             - '{controller-image}':
207                 cloud-name: 'ODLPUB'
208                 count: '{controller-vms}'
209             - '{mininet-image}':
210                 cloud-name: 'ODLPUB'
211                 count: '{mininet-vms}'
212
213 # Macro: integration-openstack-controller-mininet
214 # Operation: this macro will spin the controller and mininet vms
215 # Used by: {project}-csit-* job templates
216
217 - wrapper:
218     name: integration-openstack-controller-mininet
219     wrappers:
220       - openstack:
221           instances:
222             - cloud-name: 'ODLRPC'
223               template-name: '{controller-image}'
224               count: '{controller-vms}'
225             - cloud-name: 'ODLRPC'
226               template-name: '{mininet-image}'
227               count: '{mininet-vms}'
228
229 # Macro: integration-jclouds-controller-devstack
230 # Operation: this macro will spin the controller and devstack vms
231 # Used by: {project}-csit-openstack job templates
232 - wrapper:
233     name: integration-jclouds-controller-devstack
234     wrappers:
235       - jclouds:
236           instances:
237             - '{controller-image}':
238                 cloud-name: 'ODLPUB'
239                 count: '{controller-vms}'
240             - '{openstack-image}':
241                 cloud-name: 'ODLPUB'
242                 count: '{openstack-vms}'
243
244 # Macro: integration-openstack-controller-devstack
245 # Operation: this macro will spin the controller and devstack vms
246 # Used by: {project}-csit-openstack job templates
247 - wrapper:
248     name: integration-openstack-controller-devstack
249     wrappers:
250       - openstack:
251           instances:
252             - cloud-name: 'ODLRPC'
253               template-name: '{controller-image}'
254               count: '{controller-vms}'
255             - cloud-name: 'ODLRPC'
256               template-name: '{openstack-image}'
257               count: '{openstack-vms}'
258
259 # Macro: integration-jclouds-controller-docker
260 # Operation: this macro will sping the controller and docker vms
261 # Used by: {project}-csit-docker job templates
262 - wrapper:
263     name: integration-jclouds-controller-docker
264     wrappers:
265       - jclouds:
266           instances:
267             - '{controller-image}':
268                 cloud-name: 'ODLPUB'
269                 count: '{controller-vms}'
270             - '{docker-image}':
271                 cloud-name: 'ODLPUB'
272                 count: '{docker-vms}'
273
274 #################
275 # Shell Scripts #
276 #################
277
278 # Macro: integration-copy-ssh-keys
279 # Operation: Copy ssh public key used as authentication for robot
280 # Used by: {project}-csit-* job templates
281
282 - builder:
283     name: integration-copy-ssh-keys
284     builders:
285         - shell: |
286             #!/bin/bash
287             function copy-ssh-keys-to-slave() {
288                 RETRIES=60
289                 for j in $(seq 1 $RETRIES); do
290                     if `ssh-copy-id -i /home/jenkins/.ssh/id_rsa.pub "jenkins@${i}" > /dev/null 2>&1`; then
291                         ssh jenkins@${i} 'echo "$(facter ipaddress_eth0) $(/bin/hostname)" | sudo tee -a /etc/hosts'
292                         echo "Successfully copied public keys to slave ${i}"
293                         break
294                     elif [ $j -eq $RETRIES ]; then
295                         echo "SSH not responding on ${i} after $RETIRES tries. Giving up."
296                         exit 1
297                     else
298                         echo "SSH not responding on ${i}. Retrying in 10 seconds..."
299                         sleep 10
300                     fi
301                 done
302             }
303
304             echo "OpenStack IPS are ${JCLOUDS_IPS}"
305
306             IFS=',' read -ra ADDR <<< "${JCLOUDS_IPS}"
307             pids=""
308             for i in "${ADDR[@]}"; do
309                 ( copy-ssh-keys-to-slave ) &
310                 # Store PID of process
311                 pids+=" $!"
312             done
313
314             # Detect when a process failed to copy ssh keys and fail build
315             for p in $pids; do
316                 if wait $p; then
317                     echo "Process $p successfully copied ssh keys."
318                 else
319                     echo "Process $p failed to copy ssh keys."
320                     exit 1
321                 fi
322             done
323             echo "Copying ssh keys complete."
324
325 # Macro: integration-get-slave-addresses
326 # Operation: this macro gets the IP addresses of the dynamic vms
327 # Used by: {project}-csit-* job templates
328
329 - builder:
330     name: integration-get-slave-addresses
331     builders:
332         - shell:
333             !include-raw:
334                 - include-raw-integration-get-slave-addresses.sh
335
336 # Macro: integration-get-bundle-vars
337 # Operation: this macro gets all bundle related variables
338 # Used by: {project}-csit-3node-* job templates
339
340 - builder:
341     name: integration-get-bundle-vars
342     builders:
343         - shell:
344             !include-raw:
345                 - include-raw-integration-get-bundle-vars.sh
346
347 # Macro: integration-distribution-check
348 # Operation: this macro deploys the controller with all fetures
349 # Used by: {project}-distribution-check-{stream} job template
350
351 - builder:
352     name: integration-distribution-check
353     builders:
354         - shell:
355             !include-raw:
356                 - include-raw-integration-distribution-check.sh
357
358 # Macro: integration-deploy-controller-verify
359 # Operation: this macro deploys the controller with all fetures
360 # Used by: integration-distribution-deploy-{stream} job template
361
362 - builder:
363     name: integration-deploy-controller-verify
364     builders:
365         - shell:
366             !include-raw:
367                 - include-raw-integration-deploy-controller-verify.sh
368
369 # Macro: integration-deploy-controller-offline
370 # Operation: this macro deploys the controller with no external repo configuration
371 # Used by: integration-distrbution-offline-{stream} job template
372
373 - builder:
374     name: integration-deploy-controller-offline
375     builders:
376         - shell:
377             !include-raw:
378                 - include-raw-integration-deploy-controller-offline.sh
379
380 # Macro: integration-deply-controller-run-test
381 # Operation: this macro deploys single contoller and runs test
382 # Used by: {project}-csit-1node-* job templates
383
384 - builder:
385     name: integration-deploy-controller-run-test
386     builders:
387         - shell:
388             !include-raw:
389                 - include-raw-integration-deploy-controller-run-test.sh
390
391 # Macro: integration-configure-clustering
392 # Operation: this macro configures the clustering
393 # Used by: {project}-csit-3node-* job templates
394
395 - builder:
396     name: integration-configure-clustering
397     builders:
398         - shell:
399             !include-raw:
400                 - include-raw-integration-configure-clustering.sh
401
402 # Macro: integration-start-cluster-run-test
403 # Operation: this macro starts the 3-node cluster and runs test
404 # Used by: {project}-csit-3node-* job templates
405
406 - builder:
407     name: integration-start-cluster-run-test
408     builders:
409         - shell:
410             !include-raw:
411                 - include-raw-integration-start-cluster-run-test.sh
412
413 # Macro: integration-get-bundle-url
414 # Operation: this macro gets the job generated distribution URL from distribution pom.xml
415 # Used by: integration-patch-test-{stream} job template
416
417 - builder:
418     name: integration-get-bundle-url
419     builders:
420         - shell:
421             !include-raw:
422                 - include-raw-integration-get-bundle-url.sh
423
424 # Macro: integration-get-bundle-url-root
425 # Operation: this macro gets the job generated distribution URL from root pom.xml
426 # Used by: integration-distribution-verify-{stream} job template
427
428 - builder:
429     name: integration-get-bundle-url-root
430     builders:
431         - shell:
432             !include-raw:
433                 - include-raw-integration-get-bundle-url-root.sh
434
435 # Macro: integration-install-robotframework
436 # Operation: Installs robotframework using pip to a virtualenv
437 # Used by: {project}-csit-* job templates
438
439 - builder:
440     name: integration-install-robotframework
441     builders:
442         - shell:
443             !include-raw:
444                 - include-raw-integration-install-robotframework.sh
445
446 # Macro: integration-cleanup-tmp
447 # Operation: Cleans up temporary files created by build
448 # Used by: {project}-csit-* job templates
449
450 - builder:
451     name: integration-cleanup-tmp
452     builders:
453         - shell:
454             !include-raw:
455                 - include-raw-integration-cleanup-tmp.sh
456
457 # Macro: integration-multipatch-builder
458 # Operation: checks out multiple patches and builds custom distribution
459 # Used by: integration-multipatch-test-* job templates
460
461 - builder:
462     name: integration-multipatch-builder
463     builders:
464         - shell:
465             !include-raw:
466                 - include-raw-integration-multipatch-distribution-test.sh
467
468 # Macro: integration-cleanup-worspace
469 # Operation: Cleans up files possibly left there by the previous build
470 # Used by: {project}-csit-* job templates
471
472 - builder:
473     name: integration-cleanup-workspace
474     builders:
475         - shell:
476             !include-raw:
477                 - include-raw-integration-cleanup-workspace.sh
478
479 # Macro: integration-rebase-patch
480 # Operation: For cloned project, rebase checked-out Gerrit patch onto $BRANCH.
481 # Used by: integration-patch-distribution-* job template
482
483 - builder:
484     name: integration-rebase-gerrit-patch
485     builders:
486         - shell:
487             !include-raw:
488                 - include-raw-integration-rebase-gerrit-patch.sh
489
490 - builder:
491     name: integration-deploy-openstack-run-test
492     builders:
493         - shell:
494             !include-raw:
495                 - include-raw-integration-deploy-openstack-run-test.sh
496 ##############
497 # Publishers #
498 ##############
499
500 # Macro: integration-robot
501 # Operation: this macro publishes robot results
502 # Used by: {project}-csit-* job templates
503
504 - publisher:
505     name: integration-robot
506     publishers:
507         - robot:
508             output-path: ''
509             other-files: ''
510             unstable-threshold: '{unstable-if}'
511             pass-threshold: '{pass-if}'
512             only-critical: false
513
514 - publisher:
515     name: integration-robot-tempest
516     publishers:
517         - robot:
518             output-path: ''
519             other-files:
520                 - tempest_results.html
521             unstable-threshold: '{unstable-if}'
522             pass-threshold: '{pass-if}'
523             only-critical: false
524
525 - publisher:
526     name: integration-csit-archive-build
527     publishers:
528         - postbuildscript:
529             builders:
530                 - shell: |
531                     #!/bin/bash
532                     mkdir $WORKSPACE/archives
533                     curl --output robot-plugin.zip "$BUILD_URL/robot/report/*zip*/robot-plugin.zip"
534                     unzip -d $WORKSPACE/archives robot-plugin.zip
535                     mv *log* *.log *.log.gz *.csv *.png $WORKSPACE/archives || true  # Don't fail if file missing
536             script-only-if-succeeded: False
537             script-only-if-failed: False
538             mark-unstable-if-failed: True