moving Apex timer trigger off build to daily job
[releng.git] / jjb / apex / apex.yml
1 - project:
2     name: apex
3     jobs:
4         - 'apex-verify-{stream}'
5         - 'apex-merge-{stream}'
6         - 'apex-build-{stream}'
7         - 'apex-deploy-virtual-{stream}'
8         - 'apex-deploy-baremetal-{stream}'
9         - 'apex-daily-{stream}'
10
11     # stream:    branch with - in place of / (eg. stable-arno)
12     # branch:    branch (eg. stable/arno)
13     stream:
14         - master:
15             branch: 'master'
16             gs-pathname: ''
17             flags: '-fM'
18             disabled: false
19
20     project: 'apex'
21
22 - job-template:
23     name: 'apex-verify-{stream}'
24
25     node: opnfv-jump-1
26
27     logrotate:
28         daysToKeep: 30
29         numToKeep: 10
30         artifactDaysToKeep: -1
31         artifactNumToKeep: -1
32
33     parameters:
34         - apex-parameter:
35             gs-pathname: '{gs-pathname}'
36             flags: '{flags}'
37         - project-parameter:
38             project: '{project}'
39         - gerrit-parameter:
40             branch: '{branch}'
41         - string:
42             name: GIT_BASE
43             default: ssh://gerrit.opnfv.org:29418/$PROJECT
44             description: "Used for overriding the GIT URL coming from parameters macro."
45
46     scm:
47         - gerrit-trigger-scm:
48             credentials-id: '{ssh-credentials}'
49             refspec: '$GERRIT_REFSPEC'
50             choosing-strategy: 'gerrit'
51
52     triggers:
53         - gerrit:
54             trigger-on:
55                 - patchset-created-event:
56                     exclude-drafts: 'false'
57                     exclude-trivial-rebase: 'false'
58                     exclude-no-code-change: 'false'
59                 - draft-published-event
60                 - comment-added-contains-event:
61                     comment-contains-value: 'recheck'
62                 - comment-added-contains-event:
63                     comment-contains-value: 'reverify'
64             projects:
65               - project-compare-type: 'ANT'
66                 project-pattern: 'apex'
67                 branches:
68                   - branch-compare-type: 'ANT'
69                     branch-pattern: '**/master'
70                 forbidden-file-paths:
71                   - compare-type: ANT
72                     pattern: 'docs/**'
73
74     properties:
75         - build-blocker:
76             use-build-blocker: true
77             blocking-jobs:
78                 - "apex-daily.*"
79
80     builders:
81         - 'apex-build'
82         - 'apex-deploy-virtual'
83         - 'apex-workspace-cleanup'
84
85 - job-template:
86     name: 'apex-merge-{stream}'
87
88     # builder-merge job to run JJB update
89     #
90     # This job's purpose is to update all the JJB
91
92     node: opnfv-jump-1
93
94     disabled: true
95
96     parameters:
97         - apex-parameter:
98             gs-pathname: '{gs-pathname}'
99             flags: '{flags}'
100         - project-parameter:
101             project: '{project}'
102         - gerrit-parameter:
103             branch: '{branch}'
104         - string:
105             name: GIT_BASE
106             default: ssh://gerrit.opnfv.org:29418/$PROJECT
107             description: "Used for overriding the GIT URL coming from parameters macro."
108
109     scm:
110         - gerrit-trigger-scm:
111             credentials-id: '{ssh-credentials}'
112             refspec: ''
113             choosing-strategy: 'default'
114
115     triggers:
116         - gerrit:
117             trigger-on:
118                 - change-merged-event
119                 - comment-added-contains-event:
120                     comment-contains-value: 'remerge'
121             projects:
122               - project-compare-type: 'ANT'
123                 project-pattern: 'apex'
124                 branches:
125                     - branch-compare-type: 'ANT'
126                       branch-pattern: '**/master'
127                 forbidden-file-paths:
128                   - compare-type: ANT
129                     pattern: 'docs/**'
130
131     builders:
132         - 'apex-build'
133         - 'apex-deploy-virtual'
134         - 'apex-workspace-cleanup'
135
136 - job-template:
137     name: 'apex-build-{stream}'
138
139     # Job template for builds
140     #
141     # Required Variables:
142     #     stream:    branch with - in place of / (eg. stable)
143     #     branch:    branch (eg. stable)
144     node: opnfv-jump-1
145
146     disabled: false
147
148     parameters:
149         - project-parameter:
150             project: '{project}'
151         - apex-parameter:
152             gs-pathname: '{gs-pathname}'
153             flags: '{flags}'
154         - gerrit-parameter:
155             branch: '{branch}'
156         - string:
157             name: GIT_BASE
158             default: ssh://gerrit.opnfv.org:29418/$PROJECT
159             description: "Used for overriding the GIT URL coming from parameters macro."
160
161     scm:
162         - git-scm:
163             credentials-id: '{ssh-credentials}'
164             refspec: ''
165             branch: '{branch}'
166
167     builders:
168         - 'apex-build'
169         - 'apex-deploy-virtual'
170         - 'apex-upload-artifact'
171         - 'apex-workspace-cleanup'
172
173 - job-template:
174     name: 'apex-deploy-virtual-{stream}'
175
176     # Job template for virtual deployment
177     #
178     # Required Variables:
179     #     stream:    branch with - in place of / (eg. stable)
180     #     branch:    branch (eg. stable)
181     node: opnfv-jump-1
182
183     disabled: false
184
185     parameters:
186         - project-parameter:
187             project: '{project}'
188         - apex-parameter:
189             gs-pathname: '{gs-pathname}'
190             flags: '{flags}'
191
192     builders:
193         - 'apex-deploy-virtual'
194         - 'apex-workspace-cleanup'
195
196 - job-template:
197     name: 'apex-deploy-baremetal-{stream}'
198
199     # Job template for baremetal deployment
200     #
201     # Required Variables:
202     #     stream:    branch with - in place of / (eg. stable)
203     #     branch:    branch (eg. stable)
204     node: opnfv-jump-1
205
206     disabled: true
207
208     parameters:
209         - project-parameter:
210             project: '{project}'
211         - apex-parameter:
212             gs-pathname: '{gs-pathname}'
213             flags: '{flags}'
214
215     builders:
216         - 'apex-workspace-cleanup'
217
218 - job-template:
219     name: 'apex-daily-{stream}'
220
221     # Job template for daily build
222     #
223     # Required Variables:
224     #     stream:    branch with - in place of / (eg. stable)
225     #     branch:    branch (eg. stable)
226     node: opnfv-jump-1
227
228     disabled: false
229
230     parameters:
231         - project-parameter:
232             project: '{project}'
233         - apex-parameter:
234             gs-pathname: '{gs-pathname}'
235             flags: '{flags}'
236
237     properties:
238         - build-blocker:
239             use-build-blocker: true
240             blocking-jobs:
241                 - "apex-daily.*"
242
243     triggers:
244         - 'apex-{stream}'
245
246     builders:
247         - trigger-builds:
248           - project: 'apex-build-{stream}'
249             git-revision: true
250             block: true
251         - trigger-builds:
252           - project: 'apex-deploy-virtual-{stream}'
253             git-revision: true
254             block: true
255         - trigger-builds:
256           - project: 'apex-deploy-baremetal-{stream}'
257         - trigger-builds:
258           - project: 'functest-apex-{stream}'
259             block: true
260             block-thresholds:
261                 build-step-failure-threshold: 'never'
262                 failure-threshold: 'never'
263                 unstable-threshold: 'FAILURE'
264
265 ########################
266 # parameter macros
267 ########################
268 - parameter:
269     name: apex-parameter
270     parameters:
271         - string:
272             name: ARTIFACT_NAME
273             default: 'latest'
274             description: "RPM Artifact name that will be appended to GS_URL to deploy a specific artifact"
275         - string:
276             name: BUILD_DIRECTORY
277             default: $WORKSPACE/build_output
278             description: "Directory where the build artifact will be located upon the completion of the build."
279         - string:
280             name: CACHE_DIRECTORY
281             default: $HOME/opnfv/cache/{gs-pathname}
282             description: "Directory where the cache to be used during the build is located."
283         - string:
284             name: GIT_BASE
285             default: https://gerrit.opnfv.org/gerrit/$PROJECT
286             description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
287         - string:
288             name: GS_URL
289             default: artifacts.opnfv.org/$PROJECT/{gs-pathname}
290             description: "URL to Google Storage."
291         - string:
292             name: FLAGS
293             default: '{flags}'
294             description: "Build Flags"
295
296 ########################
297 # builder macros
298 ########################
299 - builder:
300     name: 'apex-build'
301     builders:
302         - shell: |
303             #!/bin/bash
304             set -o errexit
305             set -o nounset
306             set -o pipefail
307             # log info to console
308             echo "Starting the build of Apex using OpenStack Master packages. This will take some time..."
309             echo "---------------------------------------------------------------------------------------"
310             echo "Build flags for this build are ${FLAGS}"
311             echo "---------------------------------------------------------------------------------------"
312             echo
313             # create the cache directory if it doesn't exist
314             [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY
315             # set OPNFV_ARTIFACT_VERSION
316             export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S")
317             # start the build
318             cd $WORKSPACE/ci
319             ./build.sh $FLAGS -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY
320             RPM_VERSION=$(grep Version $BUILD_DIRECTORY/../build/opnfv-apex.spec | awk '{ print $2 }')-$(echo $OPNFV_ARTIFACT_VERSION | tr -d '_-')
321             # list the contents of BUILD_OUTPUT directory
322             ls -al $BUILD_DIRECTORY
323             # save information regarding artifact into file
324             (
325                 echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
326                 echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
327                 echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
328                 echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
329                 echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)"
330                 echo "OPNFV_SRPM_URL=$GS_URL/opnfv-apex-$RPM_VERSION.src.rpm"
331                 echo "OPNFV_RPM_URL=$GS_URL/opnfv-apex-$RPM_VERSION.noarch.rpm"
332                 echo "OPNFV_RPM_MD5SUM=$(md5sum $BUILD_DIRECTORY/opnfv-apex-$RPM_VERSION.noarch.rpm | cut -d' ' -f1)"
333                 echo "OPNFV_BUILD_URL=$BUILD_URL"
334             ) > $WORKSPACE/opnfv.properties
335             echo
336             echo "--------------------------------------------------------"
337
338 - builder:
339     name: 'apex-workspace-cleanup'
340     builders:
341         - shell: |
342             #!/bin/bash
343             set -o errexit
344             set -o nounset
345             set -o pipefail
346
347             # delete everything that is in $WORKSPACE
348             /bin/rm -rf $WORKSPACE
349
350 - builder:
351     name: 'apex-upload-artifact'
352     builders:
353         - shell: |
354             #!/bin/bash
355             set -o errexit
356             set -o nounset
357             set -o pipefail
358
359             # log info to console
360             echo "Uploading the Apex artifact. This could take some time..."
361             echo "--------------------------------------------------------"
362             echo
363
364             # source the opnfv.properties to get ARTIFACT_VERSION
365             source $WORKSPACE/opnfv.properties
366
367             # upload artifact and additional files to google storage
368             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
369             gsutil cp $BUILD_DIRECTORY/$(basename $OPNFV_RPM_URL) gs://$GS_URL/$(basename $OPNFV_RPM_URL) > gsutil.iso.log 2>&1
370             gsutil cp $BUILD_DIRECTORY/$(basename $OPNFV_SRPM_URL) gs://$GS_URL/$(basename $OPNFV_SRPM_URL) > gsutil.iso.log 2>&1
371             gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1
372             gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1
373
374             echo
375             echo "--------------------------------------------------------"
376             echo "Done!"
377             echo "ISO Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
378             echo "RPM Artifact is available as http://$GS_URL/$(basename $OPNFV_RPM_URL)"
379
380 - builder:
381     name: 'apex-deploy-virtual'
382     builders:
383         - shell: |
384             #!/bin/bash
385             set -o errexit
386             set -o nounset
387             set -o pipefail
388
389             # log info to console
390             echo "Starting the Apex virtual deployment."
391             echo "--------------------------------------------------------"
392             echo
393
394             if [[ ! "$ARTIFACT_NAME" == "latest" ]]; then
395                 # if artifact name is passed the pull a
396                 # specific artifact from artifacts.opnfv.org
397                 RPM_INSTALL_PATH=$GS_URL/$ARTIFACT_NAME
398             else
399                 if [[ -f opnfv.properties ]]; then
400                     # if opnfv.properties exists then use the
401                     # local build. Source the file so we get local OPNFV vars
402                     source opnfv.properties
403                     RPM_INSTALL_PATH=build_output/$(basename $OPNFV_RPM_URL)
404                 else
405                     # no opnfv.properties means use the latest from artifacts.opnfv.org
406                     # get the latest.properties to get the link to the latest artifact
407                     curl -s -o $WORKSPACE/opnfv.properties http://$GS_URL/latest.properties
408                     [[ -f opnfv.properties ]] || exit 1
409                     # source the file so we get OPNFV vars
410                     source opnfv.properties
411                     RPM_INSTALL_PATH=$RPM_URL
412                 fi
413             fi
414
415             source opnfv.properties
416             RPM_INSTALL_PATH=build_output/$(basename $OPNFV_RPM_URL)
417
418             # update / install the new rpm
419             if rpm -q opnfv-apex > /dev/null; then
420                if sudo yum update -y $RPM_INSTALL_PATH | grep "does not update installed package"; then
421                    sudo yum downgrade -y $RPM_INSTALL_PATH;
422                fi
423             else
424                sudo yum install -y $RPM_INSTALL_PATH;
425             fi
426
427             # cleanup virtual machines before we start
428             sudo opnfv-clean
429             # initiate virtual deployment
430             sudo opnfv-deploy -v
431
432             echo
433             echo "--------------------------------------------------------"
434             echo "Done!"
435
436 #######################
437 # trigger macros
438 ########################
439 - trigger:
440     name: 'apex-master'
441     triggers:
442         - timed: '0 3 * * *'