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