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