Merge "jjb: move project-style to releng-defaults.yaml"
[releng.git] / jjb / genesis / genesis-foreman.yml
1 ########################
2 # Job configuration for genesis/foreman
3 ########################
4 - project:
5
6     name: genesis-foreman
7
8     project: 'genesis'
9
10     installer: 'foreman'
11
12     jobs:
13         - 'genesis-foreman-verify-build-{stream}'
14         - 'genesis-foreman-merge-{stream}'
15         - 'genesis-foreman-daily-{stream}'
16         - 'genesis-foreman-build-{stream}'
17         - 'genesis-foreman-deploy-{stream}'
18         - 'genesis-foreman-lab-reconfig-{stream}'
19         - 'genesis-foreman-deploy-runner-{stream}'
20         - 'genesis-foreman-verify-deploy-virtual-{stream}'
21
22     # stream:    branch with - in place of / (eg. stable-arno)
23     # branch:    branch (eg. stable/arno)
24     stream:
25         - master:
26             branch: 'master'
27             gs-pathname: ''
28             disabled: true
29         - stable-arno:
30             branch: 'stable/arno'
31             gs-pathname: '/arno'
32             disabled: true
33 ########################
34 # job templates
35 ########################
36
37 - job-template:
38     name: 'genesis-foreman-verify-build-{stream}'
39
40     node: ericsson-build
41
42     concurrent: true
43
44     properties:
45         - throttle:
46             enabled: true
47             max-total: 1
48
49     logrotate:
50         daysToKeep: 30
51         numToKeep: 10
52         artifactDaysToKeep: -1
53         artifactNumToKeep: -1
54
55     parameters:
56         - project-parameter:
57             project: '{project}'
58         - gerrit-parameter:
59             branch: '{branch}'
60         - foreman-parameter:
61             installer: '{installer}'
62             gs-pathname: '{gs-pathname}'
63     scm:
64         - gerrit-trigger-scm:
65             credentials-id: '{ssh-credentials}'
66             refspec: '$GERRIT_REFSPEC'
67             choosing-strategy: 'gerrit'
68
69     triggers:
70         - gerrit:
71             trigger-on:
72                 - patchset-created-event:
73                     exclude-drafts: 'false'
74                     exclude-trivial-rebase: 'false'
75                     exclude-no-code-change: 'false'
76                 - draft-published-event
77                 - comment-added-contains-event:
78                     comment-contains-value: 'recheck'
79                 - comment-added-contains-event:
80                     comment-contains-value: 'reverify'
81             projects:
82               - project-compare-type: 'ANT'
83                 project-pattern: 'genesis'
84                 branches:
85                   - branch-compare-type: 'ANT'
86                     branch-pattern: '**/{branch}'
87                 file-paths:
88                   - compare-type: ANT
89                     pattern: 'common/ci/**'
90                   - compare-type: ANT
91                     pattern: 'common/manifests/**'
92                   - compare-type: ANT
93                     pattern: 'common/puppet-opnfv/**'
94                   - compare-type: ANT
95                     pattern: 'common/tools/**'
96                   - compare-type: ANT
97                     pattern: '{installer}/build/**'
98                   - compare-type: ANT
99                     pattern: '{installer}/ci/**'
100                   - compare-type: ANT
101                     pattern: '{installer}/include/**'
102                 forbidden-file-paths:
103                   - compare-type: ANT
104                     pattern: 'common/docs/**'
105                   - compare-type: ANT
106                     pattern: '{installer}/docs/**'
107
108     builders:
109         - 'foreman-build'
110         - 'foreman-workspace-cleanup'
111
112 - job-template:
113     name: 'genesis-foreman-merge-{stream}'
114
115     node: ericsson-build
116
117     concurrent: true
118
119     properties:
120         - throttle:
121             enabled: true
122             max-total: 2
123
124     logrotate:
125         daysToKeep: 30
126         numToKeep: 40
127         artifactDaysToKeep: -1
128         artifactNumToKeep: 5
129
130     parameters:
131         - project-parameter:
132             project: '{project}'
133         - gerrit-parameter:
134             branch: '{branch}'
135         - foreman-parameter:
136             installer: '{installer}'
137             gs-pathname: ''
138     scm:
139         - gerrit-trigger-scm:
140             credentials-id: '{ssh-credentials}'
141             refspec: ''
142             choosing-strategy: 'default'
143
144     triggers:
145         - gerrit:
146             trigger-on:
147                 - change-merged-event
148                 - comment-added-contains-event:
149                     comment-contains-value: 'remerge'
150             projects:
151               - project-compare-type: 'ANT'
152                 project-pattern: 'genesis'
153                 branches:
154                   - branch-compare-type: 'ANT'
155                     branch-pattern: '**/{branch}'
156                 file-paths:
157                   - compare-type: ANT
158                     pattern: 'common/ci/**'
159                   - compare-type: ANT
160                     pattern: 'common/manifests/**'
161                   - compare-type: ANT
162                     pattern: 'common/puppet-opnfv/**'
163                   - compare-type: ANT
164                     pattern: 'common/tools/**'
165                   - compare-type: ANT
166                     pattern: '{installer}/build/**'
167                   - compare-type: ANT
168                     pattern: '{installer}/ci/**'
169                   - compare-type: ANT
170                     pattern: '{installer}/include/**'
171                 forbidden-file-paths:
172                   - compare-type: ANT
173                     pattern: 'common/docs/**'
174                   - compare-type: ANT
175                     pattern: '{installer}/docs/**'
176
177     builders:
178         - 'foreman-build'
179         - 'foreman-workspace-cleanup'
180
181 - job-template:
182     name: 'genesis-foreman-daily-{stream}'
183
184     node: ericsson-build
185
186     disabled: '{obj:disabled}'
187
188     triggers:
189         - 'foreman-{stream}'
190
191     parameters:
192         - project-parameter:
193             project: '{project}'
194         - foreman-parameter:
195             installer: '{installer}'
196             gs-pathname: '{gs-pathname}'
197
198     scm:
199         - git-scm:
200             credentials-id: '{ssh-credentials}'
201             refspec: ''
202             branch: '{branch}'
203
204     logrotate:
205         daysToKeep: 30
206         numToKeep: 10
207         artifactDaysToKeep: -1
208         artifactNumToKeep: -1
209
210     builders:
211         - trigger-builds:
212           - project: 'genesis-foreman-build-{stream}'
213             git-revision: true
214             block: true
215         - trigger-builds:
216           - project: 'genesis-foreman-lab-reconfig-{stream}'
217             git-revision: true
218             block: true
219         - trigger-builds:
220           - project: 'genesis-foreman-deploy-{stream}'
221             git-revision: true
222             block: true
223         - trigger-builds:
224           - project: 'functest-foreman-{stream}'
225             block: true
226             block-thresholds:
227                 build-step-failure-threshold: 'never'
228                 failure-threshold: 'never'
229                 unstable-threshold: 'FAILURE'
230         # - trigger-builds:
231           # - project: 'yardstick-foreman-{stream}'
232             # block: true
233             # block-thresholds:
234                 # build-step-failure-threshold: 'never'
235                 # failure-threshold: 'never'
236                 # unstable-threshold: 'FAILURE'
237
238     publishers:
239         - trigger-parameterized-builds:
240             - project: 'genesis-fuel-daily-{stream}'
241               trigger-with-no-params: true
242
243 - job-template:
244     name: 'genesis-foreman-deploy-runner-{stream}'
245
246     disabled: false
247
248     node: master
249
250     logrotate:
251         daysToKeep: 30
252         numToKeep: 10
253         artifactDaysToKeep: -1
254         artifactNumToKeep: -1
255
256     parameters:
257         - project-parameter:
258             project: '{project}'
259         - foreman-parameter:
260             installer: '{installer}'
261             gs-pathname: '{gs-pathname}'
262         - string:
263             name: GIT_BASE
264             default: ssh://gerrit.opnfv.org:29418/$PROJECT
265             description: "Used for overriding the GIT URL coming from parameters macro."
266
267     scm:
268         - git-scm:
269             credentials-id: '{ssh-credentials}'
270             refspec: ''
271             branch: '{branch}'
272
273     properties:
274         - build-blocker:
275             use-build-blocker: true
276             blocking-jobs:
277                 - "genesis-fuel-daily.*"
278                 - "genesis-fuel-deploy-runner-{stream}"
279                 - "genesis-foreman-daily.*"
280
281     builders:
282         - 'foreman-lab-reconfig'
283         - trigger-builds:
284           - project: 'genesis-foreman-deploy-{stream}'
285             git-revision: true
286             block: true
287
288 - job-template:
289     name: 'genesis-foreman-build-{stream}'
290
291     node: ericsson-build
292
293     logrotate:
294         daysToKeep: 30
295         numToKeep: 10
296         artifactDaysToKeep: -1
297         artifactNumToKeep: -1
298
299     parameters:
300         - project-parameter:
301             project: '{project}'
302         - foreman-parameter:
303             installer: '{installer}'
304             gs-pathname: '{gs-pathname}'
305     scm:
306         - git-scm:
307             credentials-id: '{ssh-credentials}'
308             refspec: ''
309             branch: '{branch}'
310
311     builders:
312         - 'foreman-build'
313         - 'foreman-upload-artifact'
314         - 'foreman-workspace-cleanup'
315
316 - job-template:
317     name: 'genesis-foreman-deploy-{stream}'
318
319     disabled: false
320
321     node: opnfv-jump-2
322
323     logrotate:
324         daysToKeep: 30
325         numToKeep: 10
326         artifactDaysToKeep: -1
327         artifactNumToKeep: -1
328
329     parameters:
330         - project-parameter:
331             project: '{project}'
332         - foreman-parameter:
333             installer: '{installer}'
334             gs-pathname: '{gs-pathname}'
335         - string:
336             name: GIT_BASE
337             default: ssh://gerrit.opnfv.org:29418/$PROJECT
338             description: "Used for overriding the GIT URL coming from parameters macro."
339
340     scm:
341         - git-scm:
342             credentials-id: '{ssh-credentials}'
343             refspec: ''
344             branch: '{branch}'
345
346     builders:
347         - 'foreman-deploy'
348
349 - job-template:
350     name: 'genesis-foreman-lab-reconfig-{stream}'
351
352     disabled: false
353
354     node: master
355
356     logrotate:
357         daysToKeep: 30
358         numToKeep: 10
359         artifactDaysToKeep: -1
360         artifactNumToKeep: -1
361
362     parameters:
363         - project-parameter:
364             project: '{project}'
365         - foreman-parameter:
366             installer: '{installer}'
367             gs-pathname: '{gs-pathname}'
368         - string:
369             name: GIT_BASE
370             default: ssh://gerrit.opnfv.org:29418/$PROJECT
371             description: "Used for overriding the GIT URL coming from parameters macro."
372
373     scm:
374         - git-scm:
375             credentials-id: '{ssh-credentials}'
376             refspec: ''
377             branch: '{branch}'
378
379     properties:
380         - build-blocker:
381             use-build-blocker: true
382             blocking-jobs:
383                 - "genesis-fuel-daily.*"
384
385     builders:
386         - 'foreman-lab-reconfig'
387
388 - job-template:
389     name: 'genesis-foreman-verify-deploy-virtual-{stream}'
390
391     node: opnfv-jump-1
392
393     disabled: true
394
395     logrotate:
396         daysToKeep: 30
397         numToKeep: 10
398         artifactDaysToKeep: -1
399         artifactNumToKeep: -1
400
401     parameters:
402         - project-parameter:
403             project: '{project}'
404         - gerrit-parameter:
405             branch: '{branch}'
406         - foreman-parameter:
407             installer: '{installer}'
408             gs-pathname: '{gs-pathname}'
409         - string:
410             name: GIT_BASE
411             default: ssh://gerrit.opnfv.org:29418/$PROJECT
412             description: "Used for overriding the GIT URL coming from parameters macro."
413     scm:
414         - gerrit-trigger-scm:
415             credentials-id: '{ssh-credentials}'
416             refspec: '$GERRIT_REFSPEC'
417             choosing-strategy: 'gerrit'
418
419     triggers:
420         - gerrit:
421             trigger-on:
422                 - patchset-created-event:
423                     exclude-drafts: 'false'
424                     exclude-trivial-rebase: 'false'
425                     exclude-no-code-change: 'false'
426                 - draft-published-event
427                 - comment-added-contains-event:
428                     comment-contains-value: 'recheck'
429                 - comment-added-contains-event:
430                     comment-contains-value: 'reverify'
431             projects:
432               - project-compare-type: 'ANT'
433                 project-pattern: 'genesis'
434                 branches:
435                   - branch-compare-type: 'ANT'
436                     branch-pattern: '**/{branch}'
437                 file-paths:
438                   - compare-type: ANT
439                     pattern: 'common/ci/**'
440                   - compare-type: ANT
441                     pattern: 'common/manifests/**'
442                   - compare-type: ANT
443                     pattern: 'common/puppet-opnfv/**'
444                   - compare-type: ANT
445                     pattern: 'common/tools/**'
446                   - compare-type: ANT
447                     pattern: '{installer}/build/**'
448                   - compare-type: ANT
449                     pattern: '{installer}/ci/**'
450                   - compare-type: ANT
451                     pattern: '{installer}/include/**'
452                 forbidden-file-paths:
453                   - compare-type: ANT
454                     pattern: 'common/docs/**'
455                   - compare-type: ANT
456                     pattern: '{installer}/docs/**'
457             dependency-jobs: 'genesis-foreman-verify-build-{stream}'
458
459     builders:
460         - 'foreman-deploy-virtual'
461
462 ########################
463 # parameter macros
464 ########################
465 - parameter:
466     name: foreman-parameter
467     parameters:
468         - string:
469             name: INSTALLER
470             default: '{installer}'
471             description: "Installer to use."
472         - string:
473             name: BUILD_DIRECTORY
474             default: $WORKSPACE/build_output
475             description: "Directory where the build artifact will be located upon the completion of the build."
476         - string:
477             name: CACHE_DIRECTORY
478             default: $HOME/opnfv/cache/genesis-$INSTALLER{gs-pathname}
479             description: "Directory where the cache to be used during the build is located."
480         - string:
481             name: GIT_BASE
482             default: https://gerrit.opnfv.org/gerrit/$PROJECT
483             description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
484         - string:
485             name: GS_URL
486             default: artifacts.opnfv.org/$PROJECT/$INSTALLER{gs-pathname}
487             description: "URL to Google Storage."
488
489 ########################
490 # builder macros
491 ########################
492 - builder:
493     name: 'foreman-lab-reconfig'
494     builders:
495         - shell: |
496             #!/bin/bash
497             set -o errexit
498             set -o nounset
499             set -o pipefail
500
501             # check to see if ucs login info file exists
502             if [ -e ~/.ssh/ucs_creds ];then
503               source ~/.ssh/ucs_creds
504             else
505               echo "Unable to find UCS credentials for LF lab reconfiguration...Exiting"
506               exit 1
507             fi
508
509             # clone releng
510             echo "Cloning releng repo..."
511             if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/releng; then
512               echo "Unable to clone releng repo...Exiting"
513               exit 1
514             fi
515
516             # log info to console
517             echo "Starting the lab reconfiguration for $INSTALLER..."
518             echo "--------------------------------------------------------"
519             echo
520
521             # create venv
522             $WORKSPACE/releng/utils/lab-reconfiguration/create_venv.sh
523
524             # disable nounset because 'activate' script contains unbound variable(s)
525             set +o nounset
526             # enter venv
527             source $WORKSPACE/releng/utils/lab-reconfiguration/venv/bin/activate
528             # set nounset back again
529             set -o nounset
530
531             # verify we are in venv
532             if [[ ! $(which python | grep venv) ]]; then
533               echo "Unable to activate venv...Exiting"
534               exit 1
535             fi
536
537             python $WORKSPACE/releng/utils/lab-reconfiguration/reconfigUcsNet.py -i $ucs_host -u $ucs_user -p $ucs_password -f $WORKSPACE/releng/utils/lab-reconfiguration/foreman.yaml
538
539             # while undergoing reboot
540             sleep 30
541
542             # check to see if slave is back up
543             ping_counter=0
544             ping_flag=0
545             while [ "$ping_counter" -lt 20 ]; do
546               if [[ $(ping -c 5 172.30.10.72) ]]; then
547                 ping_flag=1
548                 break
549               fi
550               ((ping_counter++))
551               sleep 10
552             done
553
554             if [ "$ping_flag" -eq 1 ]; then
555               echo "Slave is pingable, now wait 180 seconds for services to start"
556               sleep 180
557             else
558               echo "Slave did not come back up after reboot: please check opnfv-jump-2"
559               exit 1
560             fi
561
562             set +o nounset
563             deactivate
564
565             echo
566             echo "--------------------------------------------------------"
567             echo "Done!"
568
569 - builder:
570     name: 'foreman-build'
571     builders:
572         - shell: |
573             #!/bin/bash
574             set -o errexit
575             set -o nounset
576             set -o pipefail
577
578             # log info to console
579             echo "Starting the build of $INSTALLER. This could take some time..."
580             echo "--------------------------------------------------------"
581             echo
582
583             # create the cache directory if it doesn't exist
584             [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY
585
586             # set OPNFV_ARTIFACT_VERSION
587             export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S")
588
589             # start the build
590             cd $WORKSPACE/$INSTALLER/ci
591             ./build.sh -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY
592
593             # list the contents of BUILD_OUTPUT directory
594             ls -al $BUILD_DIRECTORY
595
596             # save information regarding artifact into file
597             (
598                 echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
599                 echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
600                 echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
601                 echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
602                 echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)"
603                 echo "OPNFV_BUILD_URL=$BUILD_URL"
604             ) > $WORKSPACE/opnfv.properties
605
606             echo
607             echo "--------------------------------------------------------"
608             echo "Done!"
609
610 - builder:
611     name: 'foreman-deploy'
612     builders:
613         - shell: |
614             #!/bin/bash
615             set -o errexit
616             set -o nounset
617             set -o pipefail
618
619             # log info to console
620             echo "Starting the deployment using $INSTALLER. This could take some time..."
621             echo "--------------------------------------------------------"
622             echo
623
624             # cleanup first
625             sudo $WORKSPACE/common/ci/clean.sh -base_config $WORKSPACE/$INSTALLER/ci/inventory/lf_pod2_ksgen_settings.yml
626
627             echo "Sleeping for 60 seconds between clean and deploy to allow nodes to power off"
628             sleep 60
629
630             # and then initiate deployment
631             sudo $WORKSPACE/$INSTALLER/ci/deploy.sh -base_config $WORKSPACE/$INSTALLER/ci/inventory/lf_pod2_ksgen_settings.yml
632
633             echo
634             echo "--------------------------------------------------------"
635             echo "Done!"
636
637 - builder:
638     name: 'foreman-deploy-virtual'
639     builders:
640         - shell: |
641             #!/bin/bash
642             set -o errexit
643             set -o nounset
644             set -o pipefail
645
646             # log info to console
647             echo "Starting the virtual deployment using $INSTALLER. This could take some time..."
648             echo "--------------------------------------------------------"
649             echo
650
651             # cleanup baremetal first (in case baremetal was being used on pod2, remove when moved to isolated Virtual pod)
652             sudo $WORKSPACE/common/ci/clean.sh
653
654             # initiate virtual deployment
655             sudo $WORKSPACE/$INSTALLER/ci/deploy.sh -virtual
656
657             echo
658             echo "--------------------------------------------------------"
659             echo "Done!"
660
661 - builder:
662     name: 'foreman-upload-artifact'
663     builders:
664         - shell: |
665             #!/bin/bash
666             set -o errexit
667             set -o nounset
668             set -o pipefail
669
670             # log info to console
671             echo "Uploading the $INSTALLER artifact. This could take some time..."
672             echo "--------------------------------------------------------"
673             echo
674
675             # source the opnfv.properties to get ARTIFACT_VERSION
676             source $WORKSPACE/opnfv.properties
677
678             # upload artifact and additional files to google storage
679             gsutil cp $BUILD_DIRECTORY/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1
680             gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1
681             gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1
682
683             echo
684             echo "--------------------------------------------------------"
685             echo "Done!"
686             echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
687
688 - builder:
689     name: 'foreman-workspace-cleanup'
690     builders:
691         - shell: |
692             #!/bin/bash
693             set -o errexit
694             set -o nounset
695             set -o pipefail
696
697             # delete everything that is in $WORKSPACE
698             /bin/rm -rf $WORKSPACE
699
700 ########################
701 # trigger macros
702 ########################
703 - trigger:
704     name: 'foreman-master'
705     triggers:
706         - timed: '0 11 * * *'
707
708 - trigger:
709     name: 'foreman-stable-arno'
710     triggers:
711         - timed: '0 12 * * *'