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