2 # This file contains job templates for Maven projects.
5 name: '{project-name}-maven-jobs'
7 # This job group contains all the recommended jobs that should be deployed
12 - gerrit-maven-release
16 name: '{project-name}-github-maven-jobs'
18 # This job group contains all the recommended jobs that should be deployed
19 # for any project ci that is using github.
23 - github-maven-release
27 name: '{project-name}-maven-javadoc-jobs'
29 # This job group contains all the recommended jobs that should be deployed
33 - gerrit-maven-javadoc-publish
34 - gerrit-maven-javadoc-verify
37 name: '{project-name}-github-maven-javadoc-jobs'
39 # This job group contains all the recommended jobs that should be deployed
43 - github-maven-javadoc-publish
44 - github-maven-javadoc-verify
50 - lf_maven_common: &lf_maven_common
53 project-type: freestyle
58 - lf-infra-properties:
59 build-days-to-keep: '{build-days-to-keep}'
62 - lf-infra-parameters:
66 lftools-version: '{lftools-version}'
67 - lf-infra-maven-parameters:
68 mvn-opts: '{mvn-opts}'
69 mvn-params: '{mvn-params}'
70 mvn-version: '{mvn-version}'
71 # Staging repos do not make sense for CLM jobs so set it blank.
72 staging-profile-id: '{staging-profile-id}'
76 build-timeout: '{build-timeout}'
77 jenkins-ssh-credential: '{jenkins-ssh-credential}'
80 # TODO: Make email notification work.
81 # - lf-infra-email-notify:
82 # email-recipients: '{email-recipients}'
83 # email-prefix: '[releng]'
90 - lf_maven_clm: &lf_maven_clm
93 # Produces a CLM scan of the code into Nexus IQ Server.
95 # Required parameters:
96 # build-node: The node to run build on.
97 # jenkins-ssh-credential: Credential to use for SSH. (Generally should
98 # be configured in defaults.yaml)
99 # mvn-settings: The name of settings file containing credentials for
102 # Optional parameters:
103 # mvn-global-settings: The name of the Maven global settings to use for
104 # Maven configuration. (default: global-settings)
106 ######################
107 # Default parameters #
108 ######################
111 build-days-to-keep: 30 # 30 days for troubleshooting purposes
113 git-url: '$GIT_URL/$PROJECT'
114 java-version: openjdk8
115 mvn-global-settings: global-settings
120 submodule-recursive: true
122 # Staging repos do not make sense for CLM jobs so set it blank.
123 staging-profile-id: ''
125 #####################
126 # Job Configuration #
127 #####################
130 # Build weekly on Saturdays
135 mvn-version: '{mvn-version}'
136 - lf-provide-maven-settings:
137 global-settings-file: '{mvn-global-settings}'
138 settings-file: '{mvn-settings}'
139 - shell: !include-raw-escape:
140 - ../shell/common-variables.sh
141 - ../shell/sonatype-clm.sh
142 - lf-provide-maven-settings-cleanup
143 - shell: 'find . -regex ".*karaf/target" | xargs rm -rf'
145 application-name: '{project-name}'
148 name: '{project-name}-maven-clm-{stream}'
151 # yamllint disable-line rule:key-duplicates
155 - lf-infra-gerrit-scm:
156 jenkins-ssh-credential: '{jenkins-ssh-credential}'
158 refspec: '$GERRIT_REFSPEC'
159 branch: '$GERRIT_BRANCH'
160 submodule-recursive: '{submodule-recursive}'
161 choosing-strategy: default
164 name: '{project-name}-maven-clm-{stream}'
167 # yamllint disable-line rule:key-duplicates
172 url: '{git-url}/{github-org}/{project}'
175 - lf-infra-github-scm:
176 url: '{git-clone-url}{github-org}/{project}'
177 refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
179 submodule-recursive: '{submodule-recursive}'
180 choosing-strategy: default
181 jenkins-ssh-credential: '{jenkins-ssh-credential}'
183 #########################
184 # Maven Javadoc Publish #
185 #########################
187 - lf_maven_javadoc_publish: &lf_maven_javadoc_publish
188 name: lf-maven-javadoc-publish
190 # Produces and publishes javadocs for a Maven project.
192 # Expects javadocs to be available in $WORKSPACE/target/site/apidocs
194 # Required parameters:
196 # :build-node: The node to run build on.
197 # :javadoc-path: The path in Nexus to deploy javadoc to.
198 # :jenkins-ssh-credential: Credential to use for SSH. (Generally should
199 # be configured in defaults.yaml)
200 # :mvn-settings: The name of settings file containing credentials for
202 # :mvn-site-id: Maven Server ID from settings.xml to pull credentials from.
203 # (Note: This setting should be configured in defaults.yaml.)
205 # Optional parameters:
207 # :branch: The branch to build against. (default: master)
208 # :build-days-to-keep: Days to keep build logs in Jenkins. (default: 7)
209 # :build-timeout: Timeout in seconds before aborting build. (default: 60)
210 # :git-url: URL clone project from. (default: $GIT_URL/$PROJECT)
211 # :java-version: Version of Java to use for the build. (default: openjdk8)
212 # :mvn-global-settings: The name of the Maven global settings to use for
213 # Maven configuration. (default: global-settings)
214 # :mvn-opts: Sets MAVEN_OPTS. (default: '')
215 # :mvn-params: Additional mvn parameters to pass to the cli. (default: '')
216 # :mvn-version: Version of maven to use. (default: mvn33)
217 # :submodule-recursive: Whether to checkout submodules recursively.
220 # :gerrit_javadoc_merge_triggers: Override Gerrit Triggers.
222 ######################
223 # Default parameters #
224 ######################
227 build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
229 git-url: '$GIT_URL/$PROJECT'
230 java-version: openjdk8
231 mvn-global-settings: global-settings
235 staging-profile-id: '' # Unused by the javadoc jobs
237 submodule-recursive: true
239 gerrit_javadoc_merge_triggers:
240 - change-merged-event
241 - comment-added-contains-event:
242 comment-contains-value: remerge$
244 #####################
245 # Job Configuration #
246 #####################
250 mvn-version: '{mvn-version}'
251 - lf-provide-maven-settings:
252 global-settings-file: '{mvn-global-settings}'
253 settings-file: '{mvn-settings}'
254 - lf-infra-create-netrc:
255 server-id: '{mvn-site-id}'
257 properties-content: 'DEPLOY_PATH={javadoc-path}'
258 - shell: !include-raw-escape:
259 - ../shell/common-variables.sh
260 - ../shell/maven-javadoc-generate.sh
261 - ../shell/lftools-install.sh
262 - ../shell/maven-javadoc-publish.sh
263 - lf-provide-maven-settings-cleanup
266 name: '{project-name}-maven-javadoc-publish-{stream}'
267 id: gerrit-maven-javadoc-publish
269 # yamllint disable-line rule:key-duplicates
270 <<: *lf_maven_javadoc_publish
272 git-url: '$GIT_URL/$GERRIT_PROJECT'
275 - lf-infra-gerrit-scm:
279 submodule-recursive: '{submodule-recursive}'
280 choosing-strategy: default
281 jenkins-ssh-credential: '{jenkins-ssh-credential}'
285 server-name: '{gerrit-server-name}'
286 trigger-on: '{obj:gerrit_javadoc_merge_triggers}'
288 - project-compare-type: ANT
289 project-pattern: '{project}'
291 - branch-compare-type: ANT
292 branch-pattern: '**/{branch}'
295 name: '{project-name}-maven-javadoc-publish-{stream}'
296 id: github-maven-javadoc-publish
298 # yamllint disable-line rule:key-duplicates
299 <<: *lf_maven_javadoc_publish
303 url: '{git-url}/{github-org}/{project}'
306 - lf-infra-github-scm:
307 url: '{git-clone-url}{github-org}/{project}'
310 submodule-recursive: '{submodule-recursive}'
311 choosing-strategy: default
312 jenkins-ssh-credential: '{jenkins-ssh-credential}'
318 - lf-infra-github-pr-trigger:
319 trigger-phrase: '^remerge$'
320 only-trigger-phrase: true
321 status-context: 'JJB Merge'
324 github-org: '{github-org}'
325 github_pr_whitelist: '{obj:github_pr_whitelist}'
326 github_pr_admin_list: '{obj:github_pr_admin_list}'
328 ########################
329 # Maven Javadoc Verify #
330 ########################
332 - lf_maven_javadoc_verify: &lf_maven_javadoc_verify
333 name: lf-maven-javadoc-verify
335 # Produces javadocs for a Maven project.
337 # Expects javadocs to be available in $WORKSPACE/target/site/apidocs
339 # Required parameters:
340 # build-node: The node to run build on.
341 # jenkins-ssh-credential: Credential to use for SSH. (Generally should
342 # be configured in defaults.yaml)
343 # mvn-settings: The name of settings file containing credentials for
346 # Optional parameters:
348 # :branch: The branch to build against. (default: master)
349 # :build-days-to-keep: Days to keep build logs in Jenkins. (default: 7)
350 # :build-timeout: Timeout in seconds before aborting build. (default: 60)
351 # :deploy-path: The path in Nexus to deploy javadoc to. (default: $PROJECT/$STREAM)
352 # :git-url: URL clone project from. (default: $GIT_URL/$PROJECT)
353 # :java-version: Version of Java to use for the build. (default: openjdk8)
354 # :mvn-global-settings: The name of the Maven global settings to use for
355 # Maven configuration. (default: global-settings)
356 # :mvn-opts: Sets MAVEN_OPTS. (default: '')
357 # :mvn-params: Additional mvn parameters to pass to the cli. (default: '')
358 # :mvn-version: Version of maven to use. (default: mvn33)
359 # :submodule-recursive: Whether to checkout submodules recursively.
362 # :gerrit_javadoc_verify_triggers: Override Gerrit Triggers.
364 ######################
365 # Default parameters #
366 ######################
369 build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
371 git-url: '$GIT_URL/$PROJECT'
372 java-version: openjdk8
373 mvn-global-settings: global-settings
377 staging-profile-id: '' # Unused by the javadoc jobs
379 submodule-recursive: true
381 gerrit_javadoc_verify_triggers:
382 - patchset-created-event:
384 exclude-trivial-rebase: false
385 exclude-no-code-change: false
386 - draft-published-event
387 - comment-added-contains-event:
388 comment-contains-value: recheck$
390 #####################
391 # Job Configuration #
392 #####################
396 mvn-version: '{mvn-version}'
397 - lf-provide-maven-settings:
398 global-settings-file: '{mvn-global-settings}'
399 settings-file: '{mvn-settings}'
400 - shell: !include-raw-escape:
401 - ../shell/common-variables.sh
402 - ../shell/maven-javadoc-generate.sh
403 - lf-provide-maven-settings-cleanup
406 name: '{project-name}-maven-javadoc-verify-{stream}'
407 id: gerrit-maven-javadoc-verify
409 # yamllint disable-line rule:key-duplicates
410 <<: *lf_maven_javadoc_verify
413 - lf-infra-gerrit-scm:
414 jenkins-ssh-credential: '{jenkins-ssh-credential}'
416 refspec: '$GERRIT_REFSPEC'
417 branch: '$GERRIT_BRANCH'
418 submodule-recursive: '{submodule-recursive}'
419 choosing-strategy: gerrit
423 server-name: '{gerrit-server-name}'
424 trigger-on: '{obj:gerrit_javadoc_verify_triggers}'
426 - project-compare-type: ANT
427 project-pattern: '{project}'
429 - branch-compare-type: ANT
430 branch-pattern: '**/{branch}'
433 name: '{project-name}-maven-javadoc-verify-{stream}'
434 id: github-maven-javadoc-verify
436 # yamllint disable-line rule:key-duplicates
437 <<: *lf_maven_javadoc_verify
441 url: '{git-url}/{github-org}/{project}'
444 - lf-infra-github-scm:
445 url: '{git-clone-url}{github-org}/{project}'
446 refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
448 submodule-recursive: '{submodule-recursive}'
449 choosing-strategy: default
450 jenkins-ssh-credential: '{jenkins-ssh-credential}'
453 - lf-infra-github-pr-trigger:
454 trigger-phrase: '^recheck$'
455 only-trigger-phrase: true
456 status-context: 'Maven Javadoc'
462 github_pr_admin_list:
469 - lf_maven_release: &lf_maven_release
470 name: lf-maven-release
472 # Produces a release candidate by creating a staging repo in Nexus.
474 # Runs a Maven build and deploys to $WORKSPACE/m2repo directory. This
475 # directory can then be reused later to deploy to Nexus.
477 # Required parameters:
478 # :build-node: The node to run build on.
479 # :jenkins-ssh-credential: Credential to use for SSH. (Generally should
480 # be configured in defaults.yaml)
481 # :mvn-settings: The name of settings file containing credentials for
483 # :mvn-staging-id: Maven Server ID from settings.xml to pull credentials from.
484 # (Note: This setting should be configured in defaults.yaml.)
485 # :staging-profile-id: Profile ID of the project's Nexus staging profile.
487 # Optional parameters:
488 # :gerrit_verify_triggers: Override Gerrit Triggers.
489 # :mvn-global-settings: The name of the Maven global settings to use for
490 # Maven configuration. (default: global-settings)
491 # :cron: Cron schedule when to trigger the job. This parameter also
492 # supports multiline input via YAML pipe | character in cases where
493 # one may want to provide more than 1 cron timer. (default: '')
495 ######################
496 # Default parameters #
497 ######################
500 build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
502 git-url: '$GIT_URL/$PROJECT'
503 java-version: openjdk8
504 mvn-global-settings: global-settings
509 submodule-recursive: true
512 gerrit_release_triggers:
513 - comment-added-contains-event:
514 comment-contains-value: build release$
516 #####################
517 # Job Configuration #
518 #####################
521 - lf-jacoco-nojava-workaround
523 mvn-version: '{mvn-version}'
524 - lf-provide-maven-settings:
525 global-settings-file: '{mvn-global-settings}'
526 settings-file: '{mvn-settings}'
527 - lf-infra-create-netrc:
528 server-id: '{mvn-staging-id}'
529 - shell: !include-raw-escape:
530 - ../shell/lftools-install.sh
531 - ../shell/common-variables.sh
532 - ../shell/maven-patch-release.sh
533 - ../shell/maven-build.sh
534 - ../shell/maven-stage.sh
535 - lf-provide-maven-settings-cleanup
538 name: '{project-name}-maven-release-{stream}'
539 id: gerrit-maven-release
541 # yamllint disable-line rule:key-duplicates
542 <<: *lf_maven_release
545 - lf-infra-gerrit-scm:
546 jenkins-ssh-credential: '{jenkins-ssh-credential}'
548 refspec: '$GERRIT_REFSPEC'
549 branch: '$GERRIT_BRANCH'
550 submodule-recursive: '{submodule-recursive}'
551 choosing-strategy: default
554 - timed: '{obj:cron}'
556 server-name: '{gerrit-server-name}'
557 trigger-on: '{obj:gerrit_release_triggers}'
559 - project-compare-type: ANT
560 project-pattern: '{project}'
562 - branch-compare-type: ANT
563 branch-pattern: '**/{branch}'
566 name: '{project-name}-maven-release-{stream}'
567 id: github-maven-release
569 # yamllint disable-line rule:key-duplicates
570 <<: *lf_maven_release
574 url: '{git-url}/{github-org}/{project}'
577 - lf-infra-github-scm:
578 url: '{git-clone-url}{github-org}/{project}'
579 refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
581 submodule-recursive: '{submodule-recursive}'
582 choosing-strategy: default
583 jenkins-ssh-credential: '{jenkins-ssh-credential}'
586 - timed: '{obj:cron}'
587 - lf-infra-github-pr-trigger:
588 trigger-phrase: '^build release$'
589 only-trigger-phrase: true
590 status-context: 'Maven Release'
596 github_pr_admin_list:
603 - lf_maven_sonar: &lf_maven_sonar
606 # Sonar job which runs mvn clean install then publishes to Sonar.
608 # This job purposely only runs on the master branch as there are Additional
609 # configuration needed to support multiple branches and there's not much
610 # interest in that kind of support.
612 # Required parameters:
614 # :build-node: The node to run build on.
615 # :jenkins-ssh-credential: Credential to use for SSH. (Generally should
616 # be configured in defaults.yaml)
617 # :mvn-settings: The name of settings file containing credentials for
620 # Optional parameters:
622 # :build-days-to-keep: Days to keep build logs in Jenkins. (default: 7)
623 # :build-timeout: Timeout in seconds before aborting build. (default: 60)
624 # :git-url: URL clone project from. (default: $GIT_URL/$PROJECT)
625 # :java-version: Version of Java to use for the build. (default: openjdk8)
626 # :mvn-global-settings: The name of the Maven global settings to use for
627 # Maven configuration. (default: global-settings)
628 # :mvn-opts: Sets MAVEN_OPTS. (default: '')
629 # :mvn-params: Additional mvn parameters to pass to the cli. (default: '')
630 # :mvn-version: Version of maven to use. (default: mvn33)
631 # :submodule-recursive: Whether to checkout submodules recursively.
634 # :gerrit_sonar_triggers: Override Gerrit Triggers.
636 ######################
637 # Default parameters #
638 ######################
640 branch: master # Sonar should always be run on master branch
641 build-days-to-keep: 7
643 git-url: '$GIT_URL/$PROJECT'
644 java-version: openjdk8
645 mvn-global-settings: global-settings
650 submodule-recursive: true
652 gerrit_sonar_triggers:
653 - comment-added-contains-event:
654 comment-contains-value: run-sonar$
656 # Staging repos do not make sense for CLM jobs so set it blank.
657 staging-profile-id: ''
659 #####################
660 # Job Configuration #
661 #####################
666 server-name: '{gerrit-server-name}'
667 trigger-on: '{obj:gerrit_sonar_triggers}'
669 - project-compare-type: 'ANT'
670 project-pattern: '{project}'
672 - branch-compare-type: 'ANT'
673 branch-pattern: '**/master'
681 - lf-infra-maven-sonar:
682 mvn-settings: '{mvn-settings}'
683 mvn-version: '{mvn-version}'
691 name: lf-infra-maven-sonar
692 # Run a Sonar build with Maven
695 mvn-version: '{mvn-version}'
697 # Switch this to the sonar wrapper when JJB 2.0 is available
698 properties-content: |
699 SONAR_HOST_URL=$SONAR_URL
700 SONAR_MAVEN_GOAL=sonar:sonar
701 - lf-provide-maven-settings:
702 global-settings-file: global-settings
703 settings-file: '{mvn-settings}'
704 - shell: !include-raw-escape:
705 - ../shell/common-variables.sh
706 - ../shell/maven-sonar.sh
707 - lf-provide-maven-settings-cleanup
710 name: '{project-name}-sonar'
711 id: gerrit-maven-sonar
713 # yamllint disable-line rule:key-duplicates
717 - lf-infra-gerrit-scm:
718 jenkins-ssh-credential: '{jenkins-ssh-credential}'
720 refspec: $GERRIT_REFSPEC
721 branch: $GERRIT_BRANCH
722 submodule-recursive: '{submodule-recursive}'
723 choosing-strategy: default
726 name: '{project-name}-sonar'
727 id: github-maven-sonar
729 # yamllint disable-line rule:key-duplicates
734 url: '{git-url}/{github-org}/{project}'
737 - lf-infra-github-scm:
738 url: '{git-clone-url}{github-org}/{project}'
739 refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
741 submodule-recursive: '{submodule-recursive}'
742 choosing-strategy: default
743 jenkins-ssh-credential: '{jenkins-ssh-credential}'
746 - lf-infra-github-pr-trigger:
747 trigger-phrase: '^recheck$'
748 only-trigger-phrase: false
749 status-context: 'Maven Verify'
755 github_pr_admin_list:
762 - lf_maven_verify: &lf_maven_verify
763 name: lf-maven-verify
765 # Verify job which runs mvn clean install to test a project build..
767 # Required parameters:
769 # :build-node: The node to run build on.
770 # :jenkins-ssh-credential: Credential to use for SSH. (Generally should
771 # be configured in defaults.yaml)
772 # :mvn-settings: The name of settings file containing credentials for
775 # Optional parameters:
777 # :branch: Git branch to fetch for the build. (default: master)
778 # :build-days-to-keep: Days to keep build logs in Jenkins. (default: 7)
779 # :build-timeout: Timeout in seconds before aborting build. (default: 60)
780 # :git-url: URL clone project from. (default: $GIT_URL/$PROJECT)
781 # :java-version: Version of Java to use for the build. (default: openjdk8)
782 # :mvn-global-settings: The name of the Maven global settings to use for
783 # Maven configuration. (default: global-settings)
784 # :mvn-opts: Sets MAVEN_OPTS. (default: '')
785 # :mvn-params: Additional mvn parameters to pass to the cli. (default: '')
786 # :mvn-version: Version of maven to use. (default: mvn33)
787 # :stream: Keyword that can be used to represent a release code-name.
788 # Often the same as the branch. (default: master)
789 # :submodule-recursive: Whether to checkout submodules recursively.
792 # :gerrit_verify_triggers: Override Gerrit Triggers.
793 # :gerrit_trigger_file_paths: Override file paths which can be used to
794 # filter which file modifications will trigger a build.
796 ######################
797 # Default parameters #
798 ######################
801 build-days-to-keep: 7
803 git-url: '$GIT_URL/$PROJECT'
804 java-version: openjdk8
805 mvn-global-settings: global-settings
807 mvn-params: '-Dstream=$STREAM'
810 submodule-recursive: true
812 gerrit_verify_triggers:
813 - patchset-created-event:
815 exclude-trivial-rebase: false
816 exclude-no-code-change: false
817 - draft-published-event
818 - comment-added-contains-event:
819 comment-contains-value: recheck$
820 gerrit_trigger_file_paths:
824 #####################
825 # Job Configuration #
826 #####################
831 - lf-jacoco-nojava-workaround
833 mvn-version: '{mvn-version}'
834 - lf-provide-maven-settings:
835 global-settings-file: '{mvn-global-settings}'
836 settings-file: '{mvn-settings}'
837 - shell: !include-raw-escape:
838 - ../shell/lftools-install.sh
839 - ../shell/common-variables.sh
840 - ../shell/maven-build.sh
841 - lf-provide-maven-settings-cleanup
849 name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
850 id: gerrit-maven-verify
852 # yamllint disable-line rule:key-duplicates
856 - lf-infra-gerrit-scm:
857 jenkins-ssh-credential: '{jenkins-ssh-credential}'
859 refspec: '$GERRIT_REFSPEC'
860 branch: '$GERRIT_BRANCH'
861 submodule-recursive: '{submodule-recursive}'
862 choosing-strategy: gerrit
866 server-name: '{gerrit-server-name}'
867 trigger-on: '{obj:gerrit_verify_triggers}'
869 - project-compare-type: ANT
870 project-pattern: '{project}'
872 - branch-compare-type: ANT
873 branch-pattern: '**/{branch}'
874 file-paths: '{obj:gerrit_trigger_file_paths}'
877 name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
878 id: github-maven-verify
880 # yamllint disable-line rule:key-duplicates
885 url: '{git-url}/{github-org}/{project}'
888 - lf-infra-github-scm:
889 url: '{git-clone-url}{github-org}/{project}'
890 refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
892 submodule-recursive: '{submodule-recursive}'
893 choosing-strategy: default
894 jenkins-ssh-credential: '{jenkins-ssh-credential}'
897 - lf-infra-github-pr-trigger:
898 trigger-phrase: '^recheck$'
899 only-trigger-phrase: false
900 status-context: 'Maven Verify'
906 github_pr_admin_list: