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