8bca2e067715e7447cfb0fbc8cc17169dc861b3b
[ci-management.git] / jjb / global-macros.yaml
1 # Global macros
2
3 #### PARAMETERS
4 - parameter:
5     name: project-parameter
6     parameters:
7         - string:
8             name: PROJECT
9             default: '{project}'
10             description: "JJB configured PROJECT parameter to identify a Gerrit project"
11
12 - parameter:
13     name: gerrit-parameter
14     parameters:
15         - string:
16             name: GERRIT_BRANCH
17             default: '{branch}'
18             description: "JJB configured GERRIT_BRANCH parameter"
19
20 - parameter:
21     name: gerrit-project-parameter
22     parameters:
23         - string:
24             name: GERRIT_PROJECT
25             default: '{project}'
26             description: "GERRIT_PROJECT parameter if not given by trigger"
27
28 - parameter:
29     name: os-parameter
30     parameters:
31         - string:
32             name: OS
33             default: '{os}'
34             description: "OS parameter"
35
36 - parameter:
37     name: gerrit-refspec-parameter
38     parameters:
39         - string:
40             name: GERRIT_REFSPEC
41             default: '{refspec}'
42             description: "GERRIT_REFSPEC parameter not given by trigger"
43
44 - parameter:
45     name: maven-project-parameter
46     parameters:
47         - string:
48             name: MAVEN_SELECTOR
49             default: '{maven}'
50             description: 'Maven selector to be used by shell scripts'
51
52 - parameter:
53     name: maven-exec
54     parameters:
55       - string:
56           name: MVN
57           default: '/w/tools/hudson.tasks.Maven_MavenInstallation/{maven-version}/bin/mvn'
58           description: 'Maven selector to be used by shell scripts'
59
60 - parameter:
61     name: repo-name-parameter
62     parameters:
63         - string:
64             name: REPO_NAME
65             default: '{repo-name}'
66             description: 'Name of repo to which to publish packaging'
67
68 - parameter:
69     name: compiler-parameter
70     parameters:
71         - string:
72             name: CC
73             default: '{cc}'
74             description: "CC parameter, can be gnu or clang"
75
76 - parameter:
77     name: is-csit-vpp-job-parameter
78     parameters:
79         - string:
80             name: IS_CSIT_VPP_JOB
81             default: '{is-csit-vpp-job}'
82             description: "Parameter is True if this is a CSIT vpp job."
83
84 - parameter:
85     name: stream-parameter
86     parameters:
87         - string:
88             name: STREAM
89             default: '{stream}'
90             description: "Stream job parameter to be used in shell scripts."
91
92 - parameter:
93     name: topo-parameter
94     parameters:
95         - string:
96             name: TOPO
97             default: '{topo}'
98             description: "Topology parameter"
99
100 - parameter:
101     name: arch-parameter
102     parameters:
103         - string:
104             name: ARCH
105             default: '{arch}'
106             description: "Architecture parameter"
107
108 - parameter:
109     name: gerrit-event-type-parameter
110     parameters:
111         - string:
112             name: GERRIT_EVENT_TYPE
113             default: ''
114             description: "GERRIT_EVENT_TYPE parameter not given by trigger"
115
116 - parameter:
117     name: gerrit-event-comment-text-parameter
118     parameters:
119         - string:
120             name: GERRIT_EVENT_COMMENT_TEXT
121             default: ''
122             description: "GERRIT_EVENT_COMMENT_TEXT parameter not given by trigger"
123
124 - parameter:
125     name: gerrit-csit-refspec-parameter
126     parameters:
127         - string:
128             name: CSIT_REF
129             default: ''
130             description: "GERRIT_REFSPEC parameter to override separately cloned CSIT repository, leave empty for autodetection / no override."
131             # FIXME: Wrap long lines.
132
133 ##### SCMS
134 - scm:
135     name: git-scm
136     scm:
137         - git:
138             credentials-id: '{credentials-id}'
139             url: '$GIT_BASE'
140             refspec: ''
141             branches:
142                 - 'origin/{branch}'
143             skip-tag: true
144             wipe-workspace: true
145
146 - scm:
147     name: gerrit-trigger-scm
148     scm:
149         - git:
150             credentials-id: '{credentials-id}'
151             url: '$GIT_BASE'
152             refspec: '{refspec}'
153             branches:
154                 - 'origin/$GERRIT_BRANCH'
155             skip-tag: true
156             choosing-strategy: '{choosing-strategy}'
157
158 - scm:
159     name: zuul-trigger-scm
160     scm:
161       - git:
162           url: '$ZUUL_URL/$ZUUL_PROJECT'
163           refspec: '{refspec}'
164           branches:
165             - '{commit}'
166           skip-tag: true
167           wipe-workspace: true
168
169 ###### WRAPPERS
170 - wrapper:
171     name: build-timeout
172     wrappers:
173         - timeout:
174             type: absolute
175             timeout: 360
176             fail: true
177
178 - wrapper:
179     # This wrapper is used for all jobs that require no-activity timeouts
180     name: fdio-infra-wrappers-non-activity-timeout
181     wrappers:
182       - timeout:
183           type: no-activity
184           timeout: '{build-timeout}'
185           fail: true
186       - timestamps
187       - ssh-agent-credentials:
188           users:
189             - 'jenkins-gerrit-credentials'
190       - jclouds:
191           single-use: True
192       - openstack:
193           single-use: True
194
195 - wrapper:
196     # This wrapper is required for all jobs as it configures the wrappers
197     # needed by the fd.io infra.
198     name: fdio-infra-wrappers
199     wrappers:
200       - timeout:
201           type: absolute
202           timeout: '{build-timeout}'
203           timeout-var: 'BUILD_TIMEOUT'
204           fail: true
205       - timestamps
206       - ssh-agent-credentials:
207           users:
208               - 'jenkins-gerrit-credentials'
209       - jclouds:
210           single-use: True
211       - openstack:
212           single-use: True
213
214 ###### TRIGGERS
215 - trigger:
216     name: gerrit-trigger-patch-submitted
217     triggers:
218         - gerrit:
219             server-name: 'Primary'
220             trigger-on:
221                 - patchset-created-event:
222                     exclude-drafts: 'true'
223                     exclude-trivial-rebase: 'false'
224                     exclude-no-code-change: 'false'
225                 - draft-published-event
226                 - comment-added-contains-event:
227                     comment-contains-value: 'recheck'
228                 - comment-added-contains-event:
229                     comment-contains-value: 'reverify'
230             projects:
231                 - project-compare-type: 'ANT'
232                   project-pattern: '{name}'
233                   branches:
234                     - branch-compare-type: 'ANT'
235                       branch-pattern: '**/{branch}'
236
237 - trigger:
238     name: gerrit-trigger-trivial-patch-submitted
239     triggers:
240         - gerrit:
241             server-name: 'Primary'
242             trigger-on:
243                 - patchset-created-event:
244                     exclude-drafts: 'true'
245                     exclude-trivial-rebase: 'false'
246                     exclude-no-code-change: 'true'
247                 - draft-published-event
248                 - comment-added-contains-event:
249                     comment-contains-value: 'recheck'
250                 - comment-added-contains-event:
251                     comment-contains-value: 'reverify'
252             projects:
253                 - project-compare-type: 'ANT'
254                   project-pattern: '{name}'
255                   branches:
256                     - branch-compare-type: 'ANT'
257                       branch-pattern: '**/{branch}'
258
259 - trigger:
260     name: gerrit-trigger-os-trivial-patch-submitted
261     triggers:
262         - gerrit:
263             server-name: 'Primary'
264             trigger-on:
265                 - comment-added-contains-event:
266                     comment-contains-value: 'os-check'
267                 - comment-added-contains-event:
268                     comment-contains-value: 'os-verify'
269             projects:
270                 - project-compare-type: 'ANT'
271                   project-pattern: '{name}'
272                   branches:
273                     - branch-compare-type: 'ANT'
274                       branch-pattern: '**/{branch}'
275
276 - trigger:
277     name: gerrit-trigger-trivial-patch-submitted-skip-vote
278     triggers:
279         - gerrit:
280             server-name: 'Primary'
281             trigger-on:
282                 - patchset-created-event:
283                     exclude-drafts: 'true'
284                     exclude-trivial-rebase: 'false'
285                     exclude-no-code-change: 'true'
286                 - draft-published-event
287                 - comment-added-contains-event:
288                     comment-contains-value: 'recheck'
289                 - comment-added-contains-event:
290                     comment-contains-value: 'reverify'
291             projects:
292                 - project-compare-type: 'ANT'
293                   project-pattern: '{name}'
294                   branches:
295                     - branch-compare-type: 'ANT'
296                       branch-pattern: '**/{branch}'
297             skip-vote:
298                 successful: true
299                 failed: true
300                 unstable: true
301                 notbuilt: true
302
303 - trigger:
304     name: gerrit-trigger-manually-triggered
305     triggers:
306         - gerrit:
307             server-name: 'Primary'
308             trigger-on:
309                 - comment-added-contains-event:
310                     comment-contains-value: '{comment-trigger-value}'
311             projects:
312                 - project-compare-type: 'ANT'
313                   project-pattern: '{name}'
314                   branches:
315                     - branch-compare-type: 'ANT'
316                       branch-pattern: '**/{branch}'
317
318 - trigger:
319     name: gerrit-trigger-patch-merged
320     triggers:
321         - gerrit:
322             server-name: 'Primary'
323             trigger-on:
324                 - change-merged-event
325                 - comment-added-contains-event:
326                     comment-contains-value: 'remerge'
327             projects:
328                 - project-compare-type: 'ANT'
329                   project-pattern: '{name}'
330                   branches:
331                     - branch-compare-type: 'ANT'
332                       branch-pattern: '**/{branch}'
333             # Force Jenkins always vote the values it should already have voted
334             # during the prior verify phase
335             override-votes: true
336             gerrit-build-started-verified-value: 1
337             gerrit-build-successful-verified-value: 1
338             gerrit-build-failed-verified-value: 1
339             gerrit-build-unstable-verified-value: 1
340             gerrit-build-notbuilt-verified-value: 1
341             gerrit-build-started-codereview-value: 0
342             gerrit-build-successful-codereview-value: 0
343             gerrit-build-failed-codereview-value: 0
344             gerrit-build-unstable-codereview-value: 0
345             gerrit-build-notbuilt-codereview-value: 0
346
347 - trigger:
348     name: gerrit-trigger-os-patch-merged
349     triggers:
350         - gerrit:
351             server-name: 'Primary'
352             trigger-on:
353                 - comment-added-contains-event:
354                     comment-contains-value: 'os-merge'
355             projects:
356                 - project-compare-type: 'ANT'
357                   project-pattern: '{name}'
358                   branches:
359                     - branch-compare-type: 'ANT'
360                       branch-pattern: '**/{branch}'
361             # Force Jenkins always vote the values it should already have voted
362             # during the prior verify phase
363             override-votes: true
364             gerrit-build-started-verified-value: 1
365             gerrit-build-successful-verified-value: 1
366             gerrit-build-failed-verified-value: 1
367             gerrit-build-unstable-verified-value: 1
368             gerrit-build-notbuilt-verified-value: 1
369             gerrit-build-started-codereview-value: 0
370             gerrit-build-successful-codereview-value: 0
371             gerrit-build-failed-codereview-value: 0
372             gerrit-build-unstable-codereview-value: 0
373             gerrit-build-notbuilt-codereview-value: 0
374
375 # Publishers
376 - publisher:
377     name: archive-artifacts
378     publishers:
379         - archive:
380             artifacts: '{artifacts}'
381             allow-empty: true
382             fingerprint: true
383             latest-only: true
384
385 - publisher:
386     name: email-notification
387     publishers:
388         - email-ext:
389             recipients: 'nobody@projectrotterdam.info'
390             reply-to: ''
391             content-type: default
392             subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
393             body: |
394                 $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
395
396                 Check console output at $BUILD_URL to view the results.
397             unstable: true
398             fixed: true
399             send-to:
400                 - developers
401                 - recipients
402
403 - publisher:
404     name: jacoco-report
405     publishers:
406         - jacoco:
407             exec-pattern: '**/**.exec'
408             class-pattern: '**/classes'
409             source-pattern: '**/src/main/java'
410             exclusion-pattern: '**/gen**,**/generated-sources/**,**/yang-gen**,**/pax/**'
411             status-update: true
412             targets:
413                 - branch:
414                     healthy: 10
415                     unhealthy: 20
416                 - method:
417                     healthy: 50
418                     unhealthy: 40
419
420 - publisher:
421     name: robot-report
422     publishers:
423         - robot:
424             output-path: '{output-path}'
425             other-files: ''
426
427 - publisher:
428     name: fdio-infra-shiplogs
429     # To archive things, the job will need to create an "archives" directory in
430     # the workspace and this macro will handle copying the contents of the
431     # archives directory.
432     #
433     # Uses the build parameter ARCHIVE_ARTIFACTS if not empty to find files to
434     # archive. You can pass globstar patterns for example "**/*.xml **/*.log" as
435     # the archive pattern. This is a space separated list of files to archive.
436     #
437     # Also ensure that the workspace is cleaned up at the end of the build.
438     publishers:
439       - postbuildscript:
440           builders:
441             - shell: !include-raw: include-raw-deploy-archives.sh
442             - maven-target:
443                 maven-version: '{maven-version}'
444                 pom: '.archives/deploy-archives.xml'
445                 goals: 'clean deploy -V -B -q -Dmaven.repo.local=/tmp/r'
446                 settings: 'jenkins-log-archives-settings'
447                 settings-type: cfp
448                 global-settings: 'global-settings'
449                 global-settings-type: cfp
450             - description-setter:
451                 regexp: '^Build logs: .*'
452           script-only-if-succeeded: false
453           script-only-if-failed: false
454           mark-unstable-if-failed: true
455       - workspace-cleanup:
456           fail-build: false
457
458 - publisher:
459     name: retry-build-on-builder-error
460     publishers:
461       - naginator:
462           max-failed-builds: 1
463
464 ###### BUILDERS
465 - builder:
466     name: ci-management-check-unicode
467     builders:
468         - shell: |
469             $WORKSPACE/scripts/check-unicode.sh jjb/
470
471 - builder:
472     name: provide-maven-settings
473     builders:
474         - config-file-provider:
475             files:
476                 - file-id: '{global-settings-file}'
477                   variable: 'GLOBAL_SETTINGS_FILE'
478                 - file-id: '{settings-file}'
479                   variable: 'SETTINGS_FILE'
480
481 - property:
482     name: fdio-infra-properties
483     properties:
484         - build-discarder:
485             days-to-keep: '{build-days-to-keep}'
486             num-to-keep: '{build-num-to-keep}'
487
488
489 - builder:
490     name: packer-validate
491     builders:
492         - config-file-provider:
493             files:
494                 - file-id: 'packer-cloud-env'
495                   variable: 'CLOUDENV'
496         - shell: |
497             #!/bin/bash
498             cd packer
499             varfiles="../packer/vars/*"
500             templates="../packer/templates/*"
501             provision="../packer/provision/*.sh"
502             for v in $varfiles; do
503                 [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
504                 for t in $templates; do
505                     export PACKER_LOG="yes" && \
506                     export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
507                                 packer.io validate -var-file=$CLOUDENV \
508                                 -var-file=$v $t
509                     if [ $? -ne 0 ]; then
510                         break
511                     fi
512                 done
513             done
514             for p in $provision; do
515                 /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
516                 if [ $? -ne 0 ]; then
517                     break
518                 fi
519             done
520
521
522 - builder:
523     name: packer-build
524     builders:
525         - config-file-provider:
526             files:
527                 - file-id: 'packer-cloud-env'
528                   variable: 'CLOUDENV'
529         - shell: |
530             #!/bin/bash
531             cd packer
532             export PACKER_LOG="yes" && \
533             export PACKER_LOG_PATH="packer-build.log" && \
534                         packer.io build -var-file=$CLOUDENV \
535                          -var-file=../packer/vars/{platform}.json \
536                          ../packer/templates/{template}.json