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