Create job to manage Jenkins Global Variables
[releng/global-jjb.git] / jjb / lf-ci-jobs.yaml
1 ---
2 - job-group:
3     name: '{project-name}-ci-jobs'
4
5     jobs:
6       - gerrit-jenkins-cfg-merge
7       - gerrit-jjb-deploy-job
8       - gerrit-jjb-merge
9       - gerrit-jjb-verify
10
11 - job-group:
12     name: '{project-name}-github-ci-jobs'
13
14     jobs:
15       - github-jenkins-cfg-merge
16       - github-jjb-deploy-job
17       - github-jjb-merge
18       - github-jjb-verify
19
20 - job-group:
21     name: '{project-name}-packer-jobs'
22
23     packer-version: 1.1.3
24
25     jobs:
26       - gerrit-packer-merge
27       - gerrit-packer-verify
28
29
30 - job-group:
31     name: '{project-name}-github-packer-jobs'
32
33     packer-version: 1.1.3
34
35     jobs:
36       - github-packer-merge
37       - github-packer-verify
38
39 ####################
40 # COMMON FUNCTIONS #
41 ####################
42
43 - builder:
44     name: lf-infra-jjbini
45     builders:
46       - config-file-provider:
47           files:
48             - file-id: jjbini
49               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
50
51 - builder:
52     name: lf-infra-jjbini-sandbox
53     # TODO: Consolidate this into jjbini when JJB2.0 is available.
54     builders:
55       - config-file-provider:
56           files:
57             - file-id: jjbini-sandbox
58               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
59
60 - lf_packer_file_paths: &lf_packer_file_paths
61     name: lf-packer-file-paths
62     file-paths:
63       - compare-type: ANT
64         pattern: 'packer/vars/{platforms}.json'
65       - compare-type: ANT
66         pattern: 'packer/templates/{templates}.json'
67       - compare-type: ANT
68         pattern: 'packer/provision/*.sh'
69       - compare-type: ANT
70         pattern: 'packer/provision/{templates}.yaml'
71       - compare-type: ANT
72         pattern: 'packer/provision/lib/**'
73
74 - lf_packer: &lf_packer_common
75     name: lf-packer-common
76     # Provide configuration common in packer jobs.
77
78     ######################
79     # Default parameters #
80     ######################
81
82     branch: master
83     build-timeout: 90
84     stream: master
85     submodule-recursive: true
86     packer-cloud-settings: packer-cloud-env
87
88     #####################
89     # Job Configuration #
90     #####################
91
92     project-type: freestyle
93     node: '{build-node}'
94
95     properties:
96       - lf-infra-properties:
97           project: '{project}'
98           build-days-to-keep: 7
99
100     parameters:
101       - lf-infra-parameters:
102           project: '{project}'
103           stream: '{stream}'
104           branch: '{branch}'
105           lftools-version: '{lftools-version}'
106       - lf-infra-packer-parameters:
107           packer-version: '{packer-version}'
108
109     wrappers:
110       - lf-infra-wrappers:
111           build-timeout: '{build-timeout}'
112           jenkins-ssh-credential: '{jenkins-ssh-credential}'
113
114     publishers:
115       - lf-infra-publish
116
117 - parameter:
118     name: lf-infra-jjb-parameters
119     parameters:
120       - string:
121           name: JJB_VERSION
122           default: '{jjb-version}'
123           description: Jenkins Job Builder version to download and install.
124
125 - parameter:
126     name: lf-infra-packer-parameters
127     parameters:
128       - string:
129           name: PACKER_VERSION
130           default: '{packer-version}'
131           description: Packer version to download and install.
132
133 - lf_jjb_common: &lf_jjb_common
134     name: lf-jjb-common
135
136     ######################
137     # Default parameters #
138     ######################
139
140     branch: master
141     build-timeout: 10
142     jjb-version: 1.6.2
143     stream: master
144     submodule-recursive: true
145
146     gerrit_trigger_file_paths:
147       - compare-type: ANT
148         pattern: '**/*.sh'
149       - compare-type: ANT
150         pattern: '**/*.yaml'
151       - compare-type: ANT
152         pattern: '**/global-jjb'
153
154     #####################
155     # Job Configuration #
156     #####################
157
158     project-type: freestyle
159     node: '{build-node}'
160
161     properties:
162       - lf-infra-properties:
163           project: '{project}'
164           build-days-to-keep: 7
165
166     parameters:
167       - lf-infra-parameters:
168           project: '{project}'
169           stream: '{stream}'
170           branch: '{branch}'
171           lftools-version: '{lftools-version}'
172       - lf-infra-jjb-parameters:
173           jjb-version: '{jjb-version}'
174
175     wrappers:
176       - lf-infra-wrappers:
177           build-timeout: '{build-timeout}'
178           jenkins-ssh-credential: '{jenkins-ssh-credential}'
179
180     publishers:
181       - lf-infra-publish
182
183 ######################
184 # Gerrit Branch Lock #
185 ######################
186
187 - job-template:
188     name: '{project-name}-gerrit-branch-lock-{stream}'
189     id: gerrit-branch-lock
190
191     ######################
192     # Default parameters #
193     ######################
194
195     branch: master
196     git-url: '$GIT_URL/$GERRIT_PROJECT'
197     stream: master
198     gerrit_merge_triggers:
199       - comment-added-contains-event:
200           comment-contains-value: (un)?lock branch$
201
202     #####################
203     # Job Configuration #
204     #####################
205
206     project-type: freestyle
207     node: '{build-node}'
208
209     properties:
210       - lf-infra-properties:
211           project: '{project}'
212           build-days-to-keep: 1
213
214     parameters:
215       - lf-infra-parameters:
216           project: '{project}'
217           stream: '{stream}'
218           branch: '{branch}'
219           lftools-version: '{lftools-version}'
220
221     wrappers:
222       - lf-infra-wrappers:
223           build-timeout: 5
224           jenkins-ssh-credential: '{jenkins-ssh-credential}'
225
226     scm:
227       - lf-infra-gerrit-scm:
228           git-url: '{git-url}'
229           refspec: ''
230           branch: '{branch}'
231           submodule-recursive: false
232           choosing-strategy: default
233           jenkins-ssh-credential: '{jenkins-ssh-credential}'
234
235     triggers:
236       - gerrit:
237           server-name: '{gerrit-server-name}'
238           trigger-on: '{obj:gerrit_merge_triggers}'
239           projects:
240             - project-compare-type: ANT
241               project-pattern: '{project}'
242               branches:
243                 - branch-compare-type: ANT
244                   branch-pattern: '**/{branch}'
245
246     builders:
247       - shell: !include-raw-escape: ../shell/gerrit-branch-lock.sh
248
249
250     publishers:
251       - lf-infra-publish
252
253 ##########################################
254 # Jenkins Configuration Management Merge #
255 ##########################################
256
257 - builder:
258     name: lf-jenkins-cfg-global-vars
259     builders:
260       - lf-infra-jjbini
261       - inject:
262           properties-content: 'jenkins_silos={jenkins-silos}'
263       - shell: !include-raw-escape: ../shell/jenkins-configure-global-vars.sh
264       - shell: rm "$HOME/.config/jenkins_jobs/jenkins_jobs.ini"
265
266 - lf_jenkins_configuration: &lf_jenkins_cfg_merge
267     name: lf-jenkins-cfg-merge
268
269     ######################
270     # Default parameters #
271     ######################
272
273     branch: master
274     git-url: '$GIT_URL/$GERRIT_PROJECT'
275     jenkins-silos: production sandbox
276
277     #####################
278     # Job Configuration #
279     #####################
280
281     project-type: freestyle
282     node: '{build-node}'
283     concurrent: false
284
285     properties:
286       - lf-infra-properties:
287           project: '{project}'
288           build-days-to-keep: 1
289
290     parameters:
291       - lf-infra-parameters:
292           project: '{project}'
293           stream: ''
294           branch: master
295           lftools-version: '{lftools-version}'
296
297     wrappers:
298       - lf-infra-wrappers:
299           build-timeout: 10
300           jenkins-ssh-credential: '{jenkins-ssh-credential}'
301
302     builders:
303       - shell: !include-raw-escape:
304           - ../shell/lftools-install.sh
305       - lf-jenkins-cfg-global-vars:
306           jenkins-silos: '{jenkins-silos}'
307
308     publishers:
309       - lf-infra-publish
310
311 - job-template:
312     name: '{project-name}-jenkins-cfg-merge'
313     id: gerrit-jenkins-cfg-merge
314     <<: *lf_jenkins_cfg_merge
315
316     scm:
317       - lf-infra-gerrit-scm:
318           git-url: '{git-url}'
319           refspec: 'refs/heads/{branch}'
320           branch: '{branch}'
321           submodule-recursive: true
322           choosing-strategy: default
323           jenkins-ssh-credential: '{jenkins-ssh-credential}'
324
325 - job-template:
326     name: '{project-name}-jenkins-cfg-merge'
327     id: github-jenkins-cfg-merge
328     <<: *lf_jenkins_cfg_merge
329
330     properties:
331       - github:
332           url: '{git-url}/{github-org}/{project}'
333
334     scm:
335       - lf-infra-github-scm:
336           url: '{git-clone-url}{github-org}/{project}'
337           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
338           branch: '$sha1'
339           submodule-recursive: true
340           choosing-strategy: default
341           jenkins-ssh-credential: '{jenkins-ssh-credential}'
342
343
344 ##################
345 # JJB DEPLOY JOB #
346 ##################
347
348 - lf_jjb_deploy_job: &lf_jjb_deploy_job
349     name: lf-jjb-deploy-job
350
351     ######################
352     # Default parameters #
353     ######################
354
355     branch: master
356     git-url: '$GIT_URL/$GERRIT_PROJECT'
357     stream: master
358     gerrit_jjb_deploy_job_triggers:
359       - comment-added-contains-event:
360           comment-contains-value: 'jjb-deploy[:]* (?!\*+$).+$'
361
362     #####################
363     # Job Configuration #
364     #####################
365
366     project-type: freestyle
367     node: '{build-node}'
368     concurrent: true
369
370     properties:
371       - lf-infra-properties:
372           project: '{project}'
373           build-days-to-keep: 1
374
375     parameters:
376       - lf-infra-parameters:
377           project: '{project}'
378           stream: '{stream}'
379           branch: '{branch}'
380           lftools-version: '{lftools-version}'
381
382     wrappers:
383       - lf-infra-wrappers:
384           build-timeout: 5
385           jenkins-ssh-credential: '{jenkins-ssh-credential}'
386
387     builders:
388       - lf-pip-install:
389           pip-packages: jenkins-job-builder
390       - lf-infra-jjbini-sandbox
391       - shell: !include-raw-escape: ../shell/jjb-deploy-job.sh
392
393     publishers:
394       - lf-infra-publish
395
396 - job-template:
397     name: '{project-name}-jjb-deploy-job'
398     id: gerrit-jjb-deploy-job
399     <<: *lf_jjb_deploy_job
400
401     scm:
402       - lf-infra-gerrit-scm:
403           git-url: '{git-url}'
404           refspec: 'refs/heads/{branch}'
405           branch: '{branch}'
406           submodule-recursive: true
407           choosing-strategy: default
408           jenkins-ssh-credential: '{jenkins-ssh-credential}'
409
410     triggers:
411       - gerrit:
412           server-name: '{gerrit-server-name}'
413           trigger-on: '{obj:gerrit_jjb_deploy_job_triggers}'
414           projects:
415             - project-compare-type: ANT
416               project-pattern: '{project}'
417               branches:
418                 - branch-compare-type: ANT
419                   branch-pattern: '**/{branch}'
420
421 - job-template:
422     name: '{project-name}-jjb-deploy-job'
423     id: github-jjb-deploy-job
424     <<: *lf_jjb_deploy_job
425
426     properties:
427       - github:
428           url: '{git-url}/{github-org}/{project}'
429
430     scm:
431       - lf-infra-github-scm:
432           url: '{git-clone-url}{github-org}/{project}'
433           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
434           branch: '$sha1'
435           submodule-recursive: true
436           choosing-strategy: default
437           jenkins-ssh-credential: '{jenkins-ssh-credential}'
438
439     triggers:
440       - lf-infra-github-pr-trigger:
441           trigger-phrase: '^jjb-deploy (?!\*+$).+$'
442           only-trigger-phrase: true
443           status-context: 'JJB Deploy Job'
444           permit-all: true
445           github-hooks: true
446           github-org: ''
447           github_pr_whitelist:
448             - ''
449           github_pr_admin_list:
450             - ''
451
452 #############
453 # JJB Merge #
454 #############
455
456 - lf_jjb_merge: &lf_jjb_merge
457     name: lf-jjb-merge
458
459     ######################
460     # Default parameters #
461     ######################
462
463     gerrit_merge_triggers:
464       - change-merged-event
465       - comment-added-contains-event:
466           comment-contains-value: remerge$
467
468     #####################
469     # Job Configuration #
470     #####################
471
472     builders:
473       - lf-infra-jjbini
474       - shell: !include-raw-escape:
475           - ../shell/jjb-install.sh
476           - ../shell/jjb-merge-job.sh
477
478 - job-template:
479     name: '{project-name}-jjb-merge'
480     id: gerrit-jjb-merge
481     <<: *lf_jjb_common
482     # yamllint disable-line rule:key-duplicates
483     <<: *lf_jjb_merge
484
485     git-url: '$GIT_URL/$GERRIT_PROJECT'
486
487     scm:
488       - lf-infra-gerrit-scm:
489           git-url: '{git-url}'
490           refspec: ''
491           branch: '{branch}'
492           submodule-recursive: '{submodule-recursive}'
493           choosing-strategy: default
494           jenkins-ssh-credential: '{jenkins-ssh-credential}'
495
496     triggers:
497       - gerrit:
498           server-name: '{gerrit-server-name}'
499           trigger-on: '{obj:gerrit_merge_triggers}'
500           projects:
501             - project-compare-type: ANT
502               project-pattern: '{project}'
503               branches:
504                 - branch-compare-type: ANT
505                   branch-pattern: '**/{branch}'
506               file-paths: '{obj:gerrit_trigger_file_paths}'
507
508 - job-template:
509     name: '{project-name}-jjb-merge'
510     id: github-jjb-merge
511     <<: *lf_jjb_common
512     # yamllint disable-line rule:key-duplicates
513     <<: *lf_jjb_merge
514
515     properties:
516       - github:
517           url: '{git-url}/{github-org}/{project}'
518
519     scm:
520       - lf-infra-github-scm:
521           url: '{git-clone-url}{github-org}/{project}'
522           refspec: ''
523           branch: 'refs/heads/{branch}'
524           submodule-recursive: '{submodule-recursive}'
525           choosing-strategy: default
526           jenkins-ssh-credential: '{jenkins-ssh-credential}'
527
528     triggers:
529       - github
530       - pollscm:
531           cron: ''
532       - lf-infra-github-pr-trigger:
533           trigger-phrase: '^remerge$'
534           only-trigger-phrase: true
535           status-context: 'JJB Merge'
536           permit-all: false
537           github-hooks: true
538           github-org: '{github-org}'
539           github_pr_whitelist: '{obj:github_pr_whitelist}'
540           github_pr_admin_list: '{obj:github_pr_admin_list}'
541
542 ##############
543 # JJB Verify #
544 ##############
545
546 - lf_jjb_verify: &lf_jjb_verify
547     name: lf-jjb-verify
548
549     ######################
550     # Default parameters #
551     ######################
552
553     gerrit_verify_triggers:
554       - patchset-created-event:
555           exclude-drafts: true
556           exclude-trivial-rebase: false
557           exclude-no-code-change: false
558       - draft-published-event
559       - comment-added-contains-event:
560           comment-contains-value: recheck$
561
562     #####################
563     # Job Configuration #
564     #####################
565
566     concurrent: true
567
568     builders:
569       - lf-infra-jjbini
570       - shell: !include-raw-escape:
571           - ../shell/git-validate-jira-urls.sh
572           - ../shell/jjb-install.sh
573           - ../shell/jjb-verify-job.sh
574           - ../shell/jjb-check-unicode.sh
575       - lf-infra-gpg-verify-git-signature
576
577 - job-template:
578     name: '{project-name}-jjb-verify'
579     id: gerrit-jjb-verify
580     <<: *lf_jjb_common
581     # yamllint disable-line rule:key-duplicates
582     <<: *lf_jjb_verify
583
584     git-url: '$GIT_URL/$GERRIT_PROJECT'
585
586     scm:
587       - lf-infra-gerrit-scm:
588           git-url: '{git-url}'
589           refspec: '$GERRIT_REFSPEC'
590           branch: '$GERRIT_BRANCH'
591           submodule-recursive: '{submodule-recursive}'
592           choosing-strategy: gerrit
593           jenkins-ssh-credential: '{jenkins-ssh-credential}'
594
595     triggers:
596       - gerrit:
597           server-name: '{gerrit-server-name}'
598           trigger-on: '{obj:gerrit_verify_triggers}'
599           projects:
600             - project-compare-type: ANT
601               project-pattern: '{project}'
602               branches:
603                 - branch-compare-type: ANT
604                   branch-pattern: '**/{branch}'
605               file-paths: '{obj:gerrit_trigger_file_paths}'
606
607 - job-template:
608     name: '{project-name}-jjb-verify'
609     id: github-jjb-verify
610     <<: *lf_jjb_common
611     # yamllint disable-line rule:key-duplicates
612     <<: *lf_jjb_verify
613
614     properties:
615       - github:
616           url: '{git-url}/{github-org}/{project}'
617
618     scm:
619       - lf-infra-github-scm:
620           url: '{git-clone-url}{github-org}/{project}'
621           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
622           branch: '$sha1'
623           submodule-recursive: '{submodule-recursive}'
624           choosing-strategy: default
625           jenkins-ssh-credential: '{jenkins-ssh-credential}'
626
627     triggers:
628       - lf-infra-github-pr-trigger:
629           trigger-phrase: '^recheck$'
630           only-trigger-phrase: false
631           status-context: 'JJB Verify'
632           permit-all: true
633           github-hooks: true
634           github-org: ''
635           github_pr_whitelist:
636             - ''
637           github_pr_admin_list:
638             - ''
639
640 ################
641 # Packer Merge #
642 ################
643
644 - lf_packer_merge: &lf_packer_merge
645     name: lf-packer-merge
646
647     ######################
648     # Default parameters #
649     ######################
650
651     gerrit_merge_triggers:
652       - change-merged-event
653       - comment-added-contains-event:
654           comment-contains-value: remerge$
655
656     #####################
657     # Job Configuration #
658     #####################
659
660     builders:
661       - lf-infra-packer-validate:
662           packer-cloud-settings: '{packer-cloud-settings}'
663           packer-version: '{packer-version}'
664       - lf-infra-packer-build:
665           packer-cloud-settings: '{packer-cloud-settings}'
666           packer-version: '{packer-version}'
667           platform: '{platforms}'
668           template: '{templates}'
669
670 - job-template:
671     name: '{project-name}-packer-merge-{platforms}-{templates}'
672     id: gerrit-packer-merge
673     <<: *lf_packer_common
674     # yamllint disable-line rule:key-duplicates
675     <<: *lf_packer_merge
676
677     git-url: '$GIT_URL/$GERRIT_PROJECT'
678
679     scm:
680       - lf-infra-gerrit-scm:
681           git-url: '{git-url}'
682           refspec: '$GERRIT_REFSPEC'
683           branch: '$GERRIT_BRANCH'
684           submodule-recursive: '{submodule-recursive}'
685           choosing-strategy: gerrit
686           jenkins-ssh-credential: '{jenkins-ssh-credential}'
687
688     triggers:
689       - timed: '00 10 1 * *'
690       - gerrit:
691           server-name: '{gerrit-server-name}'
692           trigger-on: '{obj:gerrit_merge_triggers}'
693           projects:
694             - project-compare-type: ANT
695               project-pattern: '{project}'
696               branches:
697                 - branch-compare-type: ANT
698                   branch-pattern: '**/{branch}'
699               <<: *lf_packer_file_paths
700
701 - job-template:
702     name: '{project-name}-packer-merge-{platforms}-{templates}'
703     id: github-packer-merge
704     <<: *lf_packer_common
705     # yamllint disable-line rule:key-duplicates
706     <<: *lf_packer_merge
707
708     properties:
709       - github:
710           url: '{git-url}/{github-org}/{project}'
711
712     scm:
713       - lf-infra-github-scm:
714           url: '{git-clone-url}{github-org}/{project}'
715           refspec: ''
716           branch: 'refs/heads/{branch}'
717           submodule-recursive: '{submodule-recursive}'
718           choosing-strategy: default
719           jenkins-ssh-credential: '{jenkins-ssh-credential}'
720
721     triggers:
722       - timed: '00 10 1 * *'
723       - github
724       - pollscm:
725           cron: ''
726       - lf-infra-github-pr-trigger:
727           trigger-phrase: '^remerge$'
728           only-trigger-phrase: true
729           status-context: 'Packer {platforms}-${templates} Merge'
730           permit-all: false
731           github-hooks: true
732           github-org: '{github-org}'
733           github_pr_whitelist: '{obj:github_pr_whitelist}'
734           github_pr_admin_list: '{obj:github_pr_admin_list}'
735
736 #################
737 # Packer Verify #
738 #################
739
740 - lf_packer_verify: &lf_packer_verify
741     name: lf-packer-verify
742
743     ######################
744     # Default parameters #
745     ######################
746
747     build-timeout: 10
748
749     gerrit_verify_triggers:
750       - patchset-created-event:
751           exclude-drafts: true
752           exclude-trivial-rebase: false
753           exclude-no-code-change: false
754       - draft-published-event
755       - comment-added-contains-event:
756           comment-contains-value: recheck$
757
758     gerrit_trigger_file_paths:
759       - compare-type: ANT
760         pattern: 'packer/vars/**.json'
761       - compare-type: ANT
762         pattern: 'packer/templates/**.json'
763       - compare-type: ANT
764         pattern: 'packer/provision/**.sh'
765       - compare-type: ANT
766         pattern: 'packer/provision/lib/**'
767
768     #####################
769     # Job Configuration #
770     #####################
771
772     concurrent: true
773
774     builders:
775       - lf-infra-packer-validate:
776           packer-cloud-settings: '{packer-cloud-settings}'
777           packer-version: '{packer-version}'
778
779 - job-template:
780     name: '{project-name}-packer-verify'
781     id: gerrit-packer-verify
782     <<: *lf_packer_common
783     # yamllint disable-line rule:key-duplicates
784     <<: *lf_packer_verify
785
786     git-url: '$GIT_URL/$GERRIT_PROJECT'
787
788     scm:
789       - lf-infra-gerrit-scm:
790           git-url: '{git-url}'
791           refspec: '$GERRIT_REFSPEC'
792           branch: '$GERRIT_BRANCH'
793           submodule-recursive: '{submodule-recursive}'
794           choosing-strategy: gerrit
795           jenkins-ssh-credential: '{jenkins-ssh-credential}'
796
797     triggers:
798       - gerrit:
799           server-name: '{gerrit-server-name}'
800           trigger-on: '{obj:gerrit_verify_triggers}'
801           projects:
802             - project-compare-type: ANT
803               project-pattern: '{project}'
804               branches:
805                 - branch-compare-type: ANT
806                   branch-pattern: '**/{branch}'
807               file-paths: '{obj:gerrit_trigger_file_paths}'
808
809 - job-template:
810     name: '{project-name}-packer-verify'
811     id: github-packer-verify
812     <<: *lf_packer_common
813     # yamllint disable-line rule:key-duplicates
814     <<: *lf_packer_verify
815
816     properties:
817       - github:
818           url: '{git-url}/{github-org}/{project}'
819
820     scm:
821       - lf-infra-github-scm:
822           url: '{git-clone-url}{github-org}/{project}'
823           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
824           branch: '$sha1'
825           submodule-recursive: '{submodule-recursive}'
826           choosing-strategy: default
827           jenkins-ssh-credential: '{jenkins-ssh-credential}'
828
829     triggers:
830       - lf-infra-github-pr-trigger:
831           trigger-phrase: '^recheck$'
832           only-trigger-phrase: false
833           status-context: 'Packer Verify'
834           permit-all: true
835           github-hooks: true
836           github-org: ''
837           github_pr_whitelist:
838             - ''
839           github_pr_admin_list:
840             - ''