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