Merge "Add HOWTOs link to ONAP Wiki on Coverity job and view pages"
[ci-management.git] / jjb / global-macros.yaml
1 ---
2 # Global macros
3
4 # vim: sw=2 ts=2 sts=2 et :
5
6 # BUILDERS
7 - builder:
8     name: provide-maven-settings
9     builders:
10       - config-file-provider:
11           files:
12             - file-id: '{global-settings-file}'
13               variable: 'GLOBAL_SETTINGS_FILE'
14             - file-id: '{settings-file}'
15               variable: 'SETTINGS_FILE'
16
17 # call maven-target builder with a goal of --version to force Jenkins to
18 # install the needed maven version
19 - builder:
20     name: maven-install
21     builders:
22       - maven-target:
23           maven-version: '{maven-version}'
24           goals: '--version'
25
26 - builder:
27     name: maven-set-release-version
28     builders:
29       - maven-target:
30           maven-version: '{maven-version}'
31           pom: '{pom}'
32           goals: 'versions:set versions:update-child-modules versions:commit -B'
33           properties:
34             - 'newVersion=${{release_version}}'
35           settings: '{mvn-settings}'
36           settings-type: cfp
37           global-settings: 'global-settings'
38           global-settings-type: cfp
39
40 - builder:
41     name: maven-docker-push-release
42     builders:
43       - maven-target:
44           maven-version: '{maven-version}'
45           pom: '{pom}'
46           goals: 'clean deploy -B -P {mvn-profile}'
47           settings: '{mvn-settings}'
48           settings-type: cfp
49           global-settings: 'global-settings'
50           global-settings-type: cfp
51           properties:
52             - maven.test.skip=true
53             - docker.pull.registry=nexus3.onap.org:10001
54             - docker.push.registry=nexus3.onap.org:10002
55
56 - builder:
57     name: maven-docker-push-daily
58     builders:
59       - maven-target:
60           maven-version: '{maven-version}'
61           pom: '{pom}'
62           goals: 'clean deploy -B -P {mvn-profile} {mvn-params}'
63           settings: '{mvn-settings}'
64           settings-type: cfp
65           global-settings: 'global-settings'
66           global-settings-type: cfp
67           properties:
68             - docker.pull.registry=nexus3.onap.org:10001
69             - docker.push.registry=nexus3.onap.org:10003
70
71 - builder:
72     name: docker-login
73     builders:
74       - shell: !include-raw: include-docker-login.sh
75
76 - builder:
77     name: publish-pypi
78     builders:
79       - inject:
80           properties-content: PYPI_SERVER={pypi-server}
81       - shell:
82           !include-raw-escape: ../shell/pypi-publish.sh
83
84 # PARAMETERS
85 - parameter:
86     name: infra-parameters
87     parameters:
88       - string:
89           name: PROJECT
90           default: '{project}'
91           # yamllint disable rule:line-length
92           description: 'JJB configured PROJECT parameter to identify a Gerrit project'
93           # yamllint enable
94       - string:
95           name: ARCHIVE_ARTIFACTS
96           default: '{artifacts} **/target/surefire-reports/*-output.txt'
97           # yamllint disable rule:line-length
98           description: 'Space separated glob patterns for artifacts to archive to logs hosting'
99           # yamllint enable
100       - string:
101           name: GERRIT_BRANCH
102           default: '{branch}'
103           description: 'JJB configured GERRIT_BRANCH parameter'
104       - string:
105           name: GERRIT_PROJECT
106           default: '{project}'
107           description: 'GERRIT_PROJECT parameter if not given by trigger'
108       - string:
109           name: GERRIT_REFSPEC
110           default: '{refspec}'
111           description: 'GERRIT_REFSPEC parameter if not given by trigger'
112       - string:
113           name: STACK_NAME
114           default: '$JOB_NAME-$BUILD_NUMBER'
115           description: 'Used by Heat to generate a unique stack & vm name'
116
117 - parameter:
118     name: maven-params
119     parameters:
120       - string:
121           name: MAVEN_PARAMS
122           default: '{mvn-params}'
123           description: Maven parameters to pass to the mvn command.
124
125 - parameter:
126     name: maven-exec
127     parameters:
128       - string:
129           name: MVN
130           # yamllint disable rule:line-length
131           default: '/w/tools/hudson.tasks.Maven_MavenInstallation/{maven-version}/bin/mvn'
132           # yamllint enable
133           description: 'Maven selector to be used by shell scripts'
134
135 - parameter:
136     name: docker-image-name
137     parameters:
138       - string:
139           name: DOCKER_IMAGE_NAME
140           # yamllint disable rule:line-length
141           default: '{docker-image-name}'
142           # yamllint enable
143           description: 'Docker image name, e.g. onap/appc'
144
145 # PROPERTIES
146 - property:
147     name: infra-properties
148     properties:
149       - build-discarder:
150           days-to-keep: '{build-days-to-keep}'
151           num-to-keep: 40
152           artifact-days-to-keep: -1
153           artifact-num-to-keep: 5
154
155 # PUBLISHERS
156 - publisher:
157     name: archive-artifacts
158     publishers:
159       - archive:
160           artifacts: '{artifacts}'
161           allow-empty: true
162           fingerprint: true
163           latest-only: true
164
165 - publisher:
166     name: email-notification
167     publishers:
168       - email-ext:
169           recipients: 'nobody@open-o.org'
170           reply-to:
171           content-type: default
172           # yamllint disable rule:line-length
173           subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
174           # yamllint enable
175           body: |
176             $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
177
178             Check console output at $BUILD_URL to view the results.
179           unstable: true
180           fixed: true
181           send-to:
182             - developers
183             - recipients
184
185 - publisher:
186     name: jacoco-report
187     publishers:
188       - jacoco:
189           exec-pattern: '**/**.exec'
190           class-pattern: '**/classes'
191           source-pattern: '**/src/main/java'
192           # yamllint disable rule:line-length
193           exclusion-pattern: '**/gen**,**/generated-sources/**,**/yang-gen**,**/pax/**'
194           # yamllint enable
195           status-update: true
196           targets:
197             - branch:
198                 healthy: 10
199                 unhealthy: 20
200             - method:
201                 healthy: 50
202                 unhealthy: 40
203
204 - publisher:
205     name: checkstyle-result
206     publishers:
207       - checkstyle:
208           pattern: '**/checkstyle-result.xml'
209           healthy: 0
210           unhealthy: 100
211           health-threshold: 'high'
212           thresholds:
213             unstable:
214               total-all: 30
215               total-high: 15
216               total-normal: 20
217               total-low: 25
218               new-all: 5
219               new-high: 0
220               new-normal: 2
221               new-low: 5
222
223 - publisher:
224     name: checkstyle-result-daily
225     publishers:
226       - checkstyle:
227           pattern: '**/checkstyle-result.xml'
228           healthy: 0
229           unhealthy: 100
230           health-threshold: 'high'
231           thresholds:
232             unstable:
233               total-all: 30
234               total-high: 15
235               total-normal: 20
236               total-low: 25
237               new-all: 1
238               new-high: 0
239               new-normal: 1
240               new-low: 1
241
242 - publisher:
243     name: infra-shiplogs
244     # lf-infra macro to finish up a build.
245     #
246     # Handles the following:
247     #   - Shipping logs to Nexus logs site repository
248     #   - Cleanup workspace
249     publishers:
250       - postbuildscript:
251           builders:
252             - role: BOTH
253               build-on:
254                 - ABORTED
255                 - FAILURE
256                 - NOT_BUILT
257                 - SUCCESS
258                 - UNSTABLE
259               build-steps:
260                 - lf-infra-sysstat
261                 - lf-infra-ship-logs
262           mark-unstable-if-failed: true
263       - workspace-cleanup:
264           exclude:
265             # Do not clean up *.jenkins-trigger files for jobs that use a
266             # properties file as input for triggering another build.
267             - '**/*.jenkins-trigger'
268           fail-build: false
269
270
271 # SCMS
272 - scm:
273     name: git-scm
274     scm:
275       - git:
276           credentials-id: 'onap-jenkins-ssh'
277           url: '$GIT_BASE'
278           refspec: ''
279           branches:
280             - 'origin/{branch}'
281           skip-tag: true
282           wipe-workspace: true
283           timeout: 30
284
285 - scm:
286     name: gerrit-trigger-scm
287     scm:
288       - git:
289           credentials-id: 'onap-jenkins-ssh'
290           url: '$GIT_BASE'
291           refspec: '{refspec}'
292           branches:
293             - 'origin/$GERRIT_BRANCH'
294           skip-tag: true
295           timeout: 30
296           choosing-strategy: '{choosing-strategy}'
297           submodule:
298             recursive: '{submodule-recursive}'
299
300 - scm:
301     name: gerrit-trigger-scm-basedir
302     scm:
303       - git:
304           credentials-id: 'onap-jenkins-ssh'
305           url: '$GIT_BASE'
306           refspec: '{refspec}'
307           branches:
308             - 'origin/$GERRIT_BRANCH'
309           skip-tag: true
310           timeout: 30
311           choosing-strategy: '{choosing-strategy}'
312           basedir: '{basedir}'
313
314 - scm:
315     name: git-branch-scm
316     scm:
317       - git:
318           credentials-id: 'onap-jenkins-ssh'
319           url: '$GIT_BASE'
320           refspec: ''
321           branches:
322             - 'origin/{branch}'
323           skip-tag: true
324           timeout: 30
325           wipe-workspace: true
326
327 - scm:
328     name: git-extra-project
329     scm:
330       - git:
331           credentials-id: 'onap-jenkins-ssh'
332           url: '$GIT_NO_PROJECT/{project}'
333           refspec: '{refspec}'
334           branches:
335             - 'origin/{branch}'
336           skip-tag: true
337           timeoute: 30
338           wipe-workspace: false
339           basedir: '{checkout-dir}'
340
341 # TRIGGERS
342
343 # This is a single macro to use for all jobs who vote on every (relevant) patch
344 # set. Only 'recheck' trigger word is supported, it always triggers the full set
345 # of relevant jobs, in order to prevent Jenkins from starting only a subset and
346 # still voting Verified+1
347 # Arguments:
348 #     server: name of gerrit server to listen to
349 #     project: pattern to match triggering projects
350 #     branch: triggering branch name
351 #     files: pattern to match triggering filepaths
352 - trigger:
353     name: gerrit-trigger-patch-submitted
354     triggers:
355       - gerrit:
356           server-name: '{server}'
357           trigger-on:
358             - patchset-created-event:
359                 exclude-drafts: 'false'
360                 exclude-trivial-rebase: 'false'
361                 exclude-no-code-change: 'false'
362             - draft-published-event
363             - comment-added-contains-event:
364                 comment-contains-value: 'recheck'
365           projects:
366             - project-compare-type: 'ANT'
367               project-pattern: '{project}'
368               branches:
369                 - branch-compare-type: 'ANT'
370                   branch-pattern: '**/{branch}'
371               file-paths:
372                 - compare-type: 'ANT'
373                   pattern: '{files}'
374
375 - trigger:
376     name: gerrit-trigger-patch-merged
377     triggers:
378       - gerrit:
379           server-name: '{server}'
380           trigger-on:
381             - change-merged-event
382             - comment-added-contains-event:
383                 comment-contains-value: 'remerge'
384           projects:
385             - project-compare-type: 'ANT'
386               project-pattern: '{project}'
387               branches:
388                 - branch-compare-type: 'ANT'
389                   branch-pattern: '**/{branch}'
390               file-paths:
391                 - compare-type: 'ANT'
392                   pattern: '{files}'
393
394 - trigger:
395     name: gerrit-trigger-helm-patch-submitted
396     triggers:
397       - gerrit:
398           server-name: '{server}'
399           trigger-on:
400             - patchset-created-event:
401                 exclude-drafts: 'false'
402                 exclude-trivial-rebase: 'false'
403                 exclude-no-code-change: 'false'
404             - draft-published-event
405             - comment-added-contains-event:
406                 comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify|verify-helm)\s*$'
407           projects:
408             - project-compare-type: 'ANT'
409               project-pattern: '{project}'
410               branches:
411                 - branch-compare-type: 'ANT'
412                   branch-pattern: '**/{branch}'
413               file-paths:
414                 - compare-type: 'ANT'
415                   pattern: '{files}'
416
417 - trigger:
418     name: gerrit-trigger-helm-patch-merged
419     triggers:
420       - gerrit:
421           server-name: '{server}'
422           trigger-on:
423             - change-merged-event
424             - comment-added-contains-event:
425                 comment-contains-value: '^remerge-helm$'
426           projects:
427             - project-compare-type: 'ANT'
428               project-pattern: '{project}'
429               branches:
430                 - branch-compare-type: 'ANT'
431                   branch-pattern: '**/{branch}'
432               file-paths:
433                 - compare-type: 'ANT'
434                   pattern: '{files}'
435
436 - trigger:
437     name: gerrit-trigger-release-manually
438     triggers:
439       - gerrit:
440           server-name: '{server}'
441           trigger-on:
442             - comment-added-contains-event:
443                 comment-contains-value: 'please release'
444           projects:
445             - project-compare-type: 'ANT'
446               project-pattern: '{project}'
447               branches:
448                 - branch-compare-type: 'ANT'
449                   branch-pattern: '**/{branch}'
450               file-paths:
451                 - compare-type: 'ANT'
452                   pattern: '**'
453
454 - trigger:
455     name: trigger-on-build-success
456     triggers:
457       - reverse:
458           jobs: '{job-name}'
459           result: 'success'
460
461
462 # WRAPPERS
463 - wrapper:
464     name: build-timeout
465     wrappers:
466       - timeout:
467           type: absolute
468           timeout: 360
469           fail: true
470
471 - wrapper:
472     name: golang110
473     wrappers:
474       - raw:
475           xml: |
476             <org.jenkinsci.plugins.golang.GolangBuildWrapper plugin="golang@1.2">
477             <goVersion>Golang 1.10</goVersion>
478             </org.jenkinsci.plugins.golang.GolangBuildWrapper>
479
480 - wrapper:
481     name: golang111
482     wrappers:
483       - raw:
484           xml: |
485             <org.jenkinsci.plugins.golang.GolangBuildWrapper plugin="golang@1.2">
486             <goVersion>Golang 1.11</goVersion>
487             </org.jenkinsci.plugins.golang.GolangBuildWrapper>
488
489 - wrapper:
490     name: golang112
491     wrappers:
492       - raw:
493           xml: |
494             <org.jenkinsci.plugins.golang.GolangBuildWrapper plugin="golang@1.2">
495             <goVersion>Golang 1.12</goVersion>
496             </org.jenkinsci.plugins.golang.GolangBuildWrapper>
497
498 - wrapper:
499     # This wrapper is required for all jobs as it configures the wrappers
500     # needed by the eCOMP infra.
501     name: infra-wrappers
502     wrappers:
503       - timestamps
504       - timeout:
505           type: absolute
506           timeout: '{build-timeout}'
507           timeout-var: 'BUILD_TIMEOUT'
508           fail: true
509       - ssh-agent-credentials:
510           users:
511             - 'onap-jenkins-ssh'
512       - openstack:
513           single-use: true
514
515 - wrapper:
516     # This wrapper is used for docker build jobs to use the dedicated docker
517     # build VM and turn off OpenStack single-use
518     name: infra-wrappers-docker-build
519     wrappers:
520       - timestamps
521       - timeout:
522           type: absolute
523           timeout: '{build-timeout}'
524           timeout-var: 'BUILD_TIMEOUT'
525           fail: true
526       - ssh-agent-credentials:
527           users:
528             - 'onap-jenkins-ssh'
529       - openstack:
530           single-use: false