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