Merge "upload ppa and corresponding md5 at the same time"
[releng.git] / jjb / compass4nfv / compass4nfv.yml
1 # this is the job configuration for bgs
2 - project:
3
4     name: compass
5
6     installer: 'compass'
7
8     jobs:
9         - 'compass-verify'
10         - 'compass-verify-on-ericsson-node'
11         - 'compass-merge'
12         - 'compass-daily-{stream}'
13         - 'compass-build-iso'
14         - 'compass-build-ppa'
15         - 'compass-deploy-virtual-{flavor}'
16
17     # stream:    branch with - in place of / (eg. stable-helium)
18     # branch:    branch (eg. stable/helium)
19     stream:
20         - master:
21             branch: 'master'
22
23     flavor:
24         - five:
25             conf: 'virtual_five'
26             node: 'huawei-build'
27         - cluster:
28             conf: 'virtual_cluster'
29             node: 'huawei-build'
30
31
32
33     project: 'compass4nfv'
34
35 ########################
36 # job templates
37 ########################
38 - job-template:
39     name: 'compass-verify-on-ericsson-node'
40
41     project-type: freestyle
42
43     disabled: true
44
45     node: ericsson-build
46
47     logrotate:
48         daysToKeep: 30
49         numToKeep: 10
50         artifactDaysToKeep: -1
51         artifactNumToKeep: -1
52
53     parameters:
54         - project-parameter:
55             project: '{project}'
56         - gerrit-parameter:
57             branch: 'master'
58         - compass-parameter:
59             installer: '{installer}'
60
61     scm:
62         - gerrit-trigger-scm:
63             credentials-id: '{ssh-credentials}'
64             refspec: '$GERRIT_REFSPEC'
65             choosing-strategy: 'gerrit'
66
67     wrappers:
68         - ssh-agent-credentials:
69             user: '{ssh-credentials}'
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: '{project}'
86                 branches:
87                   - branch-compare-type: 'ANT'
88                     branch-pattern: '**/master'
89                 forbidden-file-paths:
90                   - compare-type: ANT
91                     pattern: 'docs/**'
92
93     builders:
94         - 'builder-compass-build-iso'
95         - 'builder-compass-workspace-cleanup'
96
97 - job-template:
98     name: 'compass-verify'
99
100     project-type: freestyle
101
102     disabled: false
103
104     node: huawei-build
105
106     logrotate:
107         daysToKeep: 30
108         numToKeep: 10
109         artifactDaysToKeep: -1
110         artifactNumToKeep: -1
111
112     parameters:
113         - project-parameter:
114             project: '{project}'
115         - gerrit-parameter:
116             branch: 'master'
117         - compass-parameter:
118             installer: '{installer}'
119         - string:
120             name: FLAVOR_CONF
121             default: 'virtual_cluster'
122             description: ""
123     scm:
124         - gerrit-trigger-scm:
125             credentials-id: '{ssh-credentials}'
126             refspec: '$GERRIT_REFSPEC'
127             choosing-strategy: 'gerrit'
128
129     wrappers:
130         - ssh-agent-credentials:
131             user: '{ssh-credentials}'
132
133     triggers:
134         - gerrit:
135             trigger-on:
136                 - patchset-created-event:
137                     exclude-drafts: 'false'
138                     exclude-trivial-rebase: 'false'
139                     exclude-no-code-change: 'false'
140                 - draft-published-event
141                 - comment-added-contains-event:
142                     comment-contains-value: 'recheck'
143                 - comment-added-contains-event:
144                     comment-contains-value: 'reverify'
145             projects:
146               - project-compare-type: 'ANT'
147                 project-pattern: '{project}'
148                 branches:
149                   - branch-compare-type: 'ANT'
150                     branch-pattern: '**/master'
151                 forbidden-file-paths:
152                   - compare-type: ANT
153                     pattern: 'docs/**'
154
155     builders:
156         - 'builder-compass-build-iso'
157         - 'builder-compass-deploy-virtual-flavor'
158         - 'builder-compass-backup-logs'
159     publishers:
160         - archive:
161             artifacts: 'ansible.log'
162             allow-empty: 'true'
163             fingerprint: true
164
165 - job-template:
166     name: 'compass-merge'
167
168     # builder-merge job to run JJB update
169     #
170     # This job's purpose is to update all the JJB
171
172     project-type: freestyle
173
174     node: huawei-build
175
176     logrotate:
177         daysToKeep: 30
178         numToKeep: 40
179         artifactDaysToKeep: -1
180         artifactNumToKeep: 5
181
182     parameters:
183         - project-parameter:
184             project: '{project}'
185         - gerrit-parameter:
186             branch: 'master'
187         - compass-parameter:
188             installer: '{installer}'
189
190     scm:
191         - gerrit-trigger-scm:
192             credentials-id: '{ssh-credentials}'
193             refspec: ''
194             choosing-strategy: 'default'
195
196     wrappers:
197         - ssh-agent-credentials:
198             user: '{ssh-credentials}'
199
200     triggers:
201         - gerrit:
202             trigger-on:
203                 - change-merged-event
204                 - comment-added-contains-event:
205                     comment-contains-value: 'remerge'
206             projects:
207               - project-compare-type: 'ANT'
208                 project-pattern: '{project}'
209                 branches:
210                     - branch-compare-type: 'ANT'
211                       branch-pattern: '**/master'
212
213     builders:
214         - 'builder-compass-merge'
215
216 - job-template:
217     name: 'compass-daily-{stream}'
218
219     project-type: freestyle
220
221     node: huawei-build
222
223     parameters:
224         - project-parameter:
225             project: '{project}'
226         - compass-parameter:
227             installer: '{installer}'
228
229     scm:
230         - git-scm:
231             credentials-id: '{ssh-credentials}'
232             refspec: ''
233             branch: '{branch}'
234
235     triggers:
236         - timed: '@midnight'
237
238     logrotate:
239         daysToKeep: 30
240         numToKeep: 10
241         artifactDaysToKeep: -1
242         artifactNumToKeep: -1
243
244     builders:
245         - trigger-builds:
246           - project: 'compass-build-iso'
247             git-revision: true
248             block: true
249         - trigger-builds:
250           - project: 'compass-deploy-virtual-cluster'
251             git-revision: true
252             block: true
253
254 - job-template:
255     name: 'compass-build-iso'
256
257     project-type: freestyle
258
259     node: ericsson-build
260
261     logrotate:
262         daysToKeep: 30
263         numToKeep: 10
264         artifactDaysToKeep: -1
265         artifactNumToKeep: -1
266
267     parameters:
268         - project-parameter:
269             project: '{project}'
270         - compass-parameter:
271             installer: '{installer}'
272
273     scm:
274         - git-scm:
275             credentials-id: '{ssh-credentials}'
276             refspec: ''
277             branch: 'master'
278
279     builders:
280         - 'builder-compass-build-iso'
281         - 'builder-compass-upload-artifact'
282         - 'builder-compass-workspace-cleanup'
283
284 - job-template:
285     name: 'compass-build-ppa'
286
287     description: "build ppa(using docker) in huawei lab"
288
289     project-type: freestyle
290
291     node: huawei-build
292
293     logrotate:
294         daysToKeep: 30
295         numToKeep: 10
296         artifactDaysToKeep: -1
297         artifactNumToKeep: -1
298
299     parameters:
300         - project-parameter:
301             project: '{project}'
302         - compass-parameter:
303             installer: '{installer}'
304
305     scm:
306         - git-scm:
307             credentials-id: '{ssh-credentials}'
308             refspec: ''
309             branch: 'master'
310
311     triggers:
312         - timed: 'H 16 * * *'
313
314     builders:
315         - 'builder-compass-make-ppa'
316
317 - job-template:
318     name: 'compass-deploy-virtual-{flavor}'
319
320     project-type: freestyle
321
322     disabled: false
323
324     node: '{node}'
325
326     parameters:
327         - project-parameter:
328             project: '{project}'
329         - compass-parameter:
330             installer: '{installer}'
331         - string:
332             name: FLAVOR_CONF
333             default: '{conf}'
334             description: ""
335
336
337     logrotate:
338         daysToKeep: 30
339         numToKeep: 10
340         artifactDaysToKeep: -1
341         artifactNumToKeep: -1
342
343
344     builders:
345         - 'builder-compass-ci-preclean-workspace'
346         - 'builder-compass-download-artifact'
347         - 'builder-compass-deploy-virtual-flavor'
348         - 'builder-compass-backup-logs'
349     publishers:
350         - archive:
351             artifacts: 'ansible.log'
352             allow-empty: 'true'
353             fingerprint: true
354
355 ########################
356 # parameter macros
357 ########################
358 - parameter:
359     name: compass-parameter
360     parameters:
361         - string:
362             name: INSTALLER
363             default: '{installer}'
364             description: "Installer to use."
365         - string:
366             name: BUILD_DIRECTORY
367             default: $WORKSPACE/build_output
368             description: "Directory where the build artifact will be located upon the completion of the build."
369         - string:
370             name: CACHE_DIRECTORY
371             default: $HOME/opnfv/cache/$PROJECT
372             description: "Directory where the cache to be used during the build is located."
373         - string:
374             name: GIT_BASE
375             default: https://gerrit.opnfv.org/gerrit/$PROJECT
376             description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
377         - string:
378             name: GS_URL
379             default: artifacts.opnfv.org/$PROJECT/
380             description: "URL to Google Storage."
381         - string:
382             name: GS_URL_PROXY
383             default: build.opnfv.org/artifacts/$PROJECT/
384             description: "URL to Google Storage proxy"
385         - string:
386             name: installer_ip
387             default: "10.1.0.12"
388         - string:
389             name: PPA_REPO
390             default: "http://58.251.166.184:9999"
391         - string:
392             name: PPA_CACHE
393             default: "$WORKSPACE/work/repo/"
394
395 ########################
396 # builder macros
397 ########################
398 - builder:
399     name: 'builder-compass-merge'
400     builders:
401         - shell: |
402             #!/bin/bash
403             echo "Hello World!"
404
405 - builder:
406     name: 'builder-compass-make-ppa'
407     builders:
408         - shell: |
409             #!/bin/bash
410             set -x
411             set -o errexit
412             set -o nounset
413             set -o pipefail
414             # make ppa
415             cd $WORKSPACE/
416             ./build/make_repo.sh
417             # calc MD5 of ppa
418             cd $PPA_CACHE
419             for i in $(find *.gz *.iso *.img -type f)
420             do
421                 md5=$(md5sum $i | cut -d ' ' -f1)
422                 echo $md5 > $i.md5
423                 curl -T $i $PPA_REPO
424                 curl -T $i.md5 $PPA_REPO
425             done
426
427 - builder:
428     name: 'builder-compass-build-iso'
429     builders:
430         - shell: |
431             #!/bin/bash
432             set -o errexit
433             set -o nounset
434             set -o pipefail
435
436             # log info to console
437             echo "Starting the build of $INSTALLER. This could take some time..."
438             echo "--------------------------------------------------------"
439             echo
440
441             # create the cache directory if it doesn't exist
442             [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY
443             [[ -d $BUILD_DIRECTORY ]] || mkdir -p $BUILD_DIRECTORY
444
445             # set OPNFV_ARTIFACT_VERSION
446             export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S")
447
448             # start the build
449             if [ -d $PPA_CACHE ]
450             then
451                 cp $PPA_CACHE/*.tar.gz $PPA_CACHE/*.iso $PPA_CACHE/*.img $CACHE_DIRECTORY/ -f
452             fi
453
454             cd $WORKSPACE/
455             ./build.sh  --iso-dir $BUILD_DIRECTORY/ --iso-name compass.iso -c $CACHE_DIRECTORY
456
457             # list the build artifacts
458             ls -al $BUILD_DIRECTORY
459
460             # save information regarding artifact into file
461             (
462                 echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
463                 echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
464                 echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
465                 echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
466                 echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/compass.iso | cut -d' ' -f1)"
467                 echo "OPNFV_BUILD_URL=$BUILD_URL"
468             ) > $BUILD_DIRECTORY/opnfv.properties
469             echo
470             echo "--------------------------------------------------------"
471             echo "Done!"
472
473 - builder:
474     name: 'builder-compass-deploy-virtual-flavor'
475     builders:
476         - shell: |
477             #!/bin/bash
478             set -x
479
480             # log info to console
481             echo "Starting the deployment on virtual environment using $INSTALLER. This could take some time..."
482             echo "--------------------------------------------------------"
483             echo
484
485             export ISO_URL=file://$BUILD_DIRECTORY/compass.iso
486             cd $WORKSPACE
487             ./deploy.sh $FLAVOR_CONF
488
489             echo
490             echo "--------------------------------------------------------"
491             echo "Done!"
492
493 - builder:
494     name: 'builder-compass-upload-artifact'
495     builders:
496         - shell: |
497             #!/bin/bash
498             set -o errexit
499             set -o nounset
500             set -o pipefail
501
502             # log info to console
503             echo "Uploading the $INSTALLER artifact. This could take some time..."
504             echo "--------------------------------------------------------"
505             echo
506
507             # source the opnfv.properties to get ARTIFACT_VERSION
508             source $BUILD_DIRECTORY/opnfv.properties
509
510             # upload artifact and additional files to google storage
511             gsutil cp $BUILD_DIRECTORY/compass.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1
512             gsutil cp $BUILD_DIRECTORY/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1
513             gsutil cp $BUILD_DIRECTORY/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1
514
515
516             echo
517             echo "--------------------------------------------------------"
518             echo "Done!"
519             echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
520
521 - builder:
522     name: 'builder-compass-download-artifact'
523     builders:
524         - shell: |
525             #!/bin/bash
526             set -o errexit
527             set -o nounset
528             set -o pipefail
529
530             # log info to console
531             echo "Downloading the $INSTALLER artifact. This could take some time..."
532             echo "--------------------------------------------------------"
533             echo
534
535             # get the latest.properties file in order to get info regarding latest artifact
536             [[ -d $BUILD_DIRECTORY ]] || mkdir -p $BUILD_DIRECTORY
537             curl -s -o $BUILD_DIRECTORY/latest.properties http://$GS_URL/latest.properties
538
539             # check if we got the file
540             [[ -f $BUILD_DIRECTORY/latest.properties ]] || exit 1
541
542             # source the file so we get OPNFV vars
543             source $BUILD_DIRECTORY/latest.properties
544
545             # download the file
546             curl -s -o $BUILD_DIRECTORY/compass.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1
547
548             # list the file
549             ls -al $BUILD_DIRECTORY/compass.iso
550
551             echo
552             echo "--------------------------------------------------------"
553             echo "Done!"
554
555 - builder:
556     name: 'builder-compass-workspace-cleanup'
557     builders:
558         - shell: |
559             #!/bin/bash
560             set -o errexit
561             set -o nounset
562             set -o pipefail
563
564             # delete everything that is in $WORKSPACE
565             /bin/rm -rf $WORKSPACE
566
567 - builder:
568     name: 'builder-compass-ci-preclean-workspace'
569     builders:
570         - shell: |
571             #!/bin/bash
572             set -o errexit
573             set -o nounset
574             set -o pipefail
575
576             cd $WORKSPACE/..
577             sudo rm $WORKSPACE -rf
578             git clone $GIT_BASE  $WORKSPACE
579
580 - builder:
581     name: 'builder-compass-backup-logs'
582     builders:
583         - shell: |
584             ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
585             sshpass -p root scp 2>/dev/null $ssh_options root@${installer_ip}:/var/ansible/run/openstack_juno-opnfv2/ansible.log ./  &> /dev/null