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