3 # NOTE: make sure macros are listed in execution ordered.
5 # 1. parameters/properties
9 # 5. prebuilders (maven only, configured like Builders)
10 # 6. builders (maven, freestyle, matrix, etc..)
11 # 7. postbuilders (maven only, configured like Builders)
12 # 8. publishers/reporters/notifications
15 name: project-parameter
20 description: "JJB configured PROJECT parameter to identify an opnfv Gerrit project"
23 default: artifacts.opnfv.org/$PROJECT
24 description: "URL to Google Storage."
27 default: build.opnfv.org/artifacts.opnfv.org/$PROJECT
28 description: "URL to Google Storage proxy"
32 description: "JJB configured BRANCH parameter (e.g. master, stable/danube)"
36 description: "JJB configured GERRIT_BRANCH parameter (deprecated)"
39 name: logrotate-default
44 artifact-days-to-keep: 60
45 artifact-num-to-keep: 200
50 - git: &git-scm-defaults
51 credentials-id: '$SSH_CREDENTIAL_ID'
61 choosing-strategy: 'gerrit'
62 refspec: '$GERRIT_REFSPEC'
65 name: git-scm-with-submodules
68 credentials-id: '$SSH_CREDENTIAL_ID'
72 - 'refs/heads/{branch}'
79 name: 'daily-trigger-disabled'
84 name: 'weekly-trigger-disabled'
89 name: gerrit-trigger-patchset-created
92 server-name: 'gerrit.opnfv.org'
94 - patchset-created-event:
95 exclude-drafts: 'false'
96 exclude-trivial-rebase: 'false'
97 exclude-no-code-change: 'false'
98 - draft-published-event
99 - comment-added-contains-event:
100 comment-contains-value: 'recheck'
101 - comment-added-contains-event:
102 comment-contains-value: 'reverify'
104 - project-compare-type: 'ANT'
105 project-pattern: '{project}'
107 - branch-compare-type: 'ANT'
108 branch-pattern: '**/{branch}'
110 - compare-type: 'ANT'
119 name: gerrit-trigger-change-merged
122 server-name: 'gerrit.opnfv.org'
124 - change-merged-event
125 - comment-added-contains-event:
126 comment-contains-value: 'remerge'
128 - project-compare-type: 'ANT'
129 project-pattern: '{project}'
131 - branch-compare-type: 'ANT'
132 branch-pattern: '**/{branch}'
134 - compare-type: 'ANT'
141 server-name: 'gerrit.opnfv.org'
143 - comment-added-contains-event:
144 comment-contains-value: 'check-experimental'
146 - project-compare-type: 'ANT'
147 project-pattern: '{project}'
149 - branch-compare-type: 'ANT'
150 branch-pattern: '**/{branch}'
152 - compare-type: 'ANT'
161 name: ssh-agent-wrapper
163 - ssh-agent-credentials:
165 - 'd42411ac011ad6f3dd2e1fa34eaa5d87f910eb2e'
172 timeout-var: 'BUILD_TIMEOUT'
176 name: fix-workspace-permissions
181 sudo chown -R $USER:$USER $WORKSPACE || exit 1
184 name: build-html-and-pdf-docs-output
190 export PATH=$PATH:/usr/local/bin/
191 git clone ssh://gerrit.opnfv.org:29418/opnfvdocs docs_build/_opnfvdocs
192 GERRIT_COMMENT=gerrit_comment.txt ./docs_build/_opnfvdocs/scripts/docs-build.sh
195 name: upload-under-review-docs-to-opnfv-artifacts
202 export PATH=$PATH:/usr/local/bin/
204 [[ $GERRIT_CHANGE_NUMBER =~ .+ ]]
205 [[ -d docs_output ]] || exit 0
208 echo "###########################"
209 echo "UPLOADING DOCS UNDER REVIEW"
210 echo "###########################"
213 gs_base="artifacts.opnfv.org/$PROJECT/review"
214 gs_path="$gs_base/$GERRIT_CHANGE_NUMBER"
215 local_path="upload/$GERRIT_CHANGE_NUMBER"
218 mv docs_output "$local_path"
219 gsutil -m cp -r "$local_path" "gs://$gs_base"
222 -h "Content-Type:text/html" \
223 -h "Cache-Control:private, max-age=0, no-transform" \
224 "gs://$gs_path"/**.html > /dev/null 2>&1
226 echo "Document link(s):" >> gerrit_comment.txt
227 find "$local_path" | grep -e 'index.html$' -e 'pdf$' | \
228 sed -e "s|^$local_path| http://$gs_path|" >> gerrit_comment.txt
231 name: upload-generated-docs-to-opnfv-artifacts
238 export PATH=$PATH:/usr/local/bin/
240 [[ -d docs_output ]] || exit 0
243 echo "########################"
244 echo "UPLOADING GENERATED DOCS"
245 echo "########################"
248 echo "gs_path="$GS_URL/docs""
249 echo "local_path="upload/docs""
251 gs_path="$GS_URL/docs"
252 local_path="upload/docs"
255 mv docs_output "$local_path"
258 echo "gsutil -m cp -r "$local_path"/* "gs://$gs_path""
259 gsutil -m cp -r "$local_path"/* "gs://$gs_path"
262 -h "Content-Type:text/html" \
263 -h "Cache-Control:private, max-age=0, no-transform" \
264 "gs://$gs_path"/**.html > /dev/null 2>&1
266 echo "Document link(s):" >> gerrit_comment.txt
267 find "$local_path" | grep -e 'index.html$' -e 'pdf$' | \
268 sed -e "s|^$local_path| http://$gs_path|" >> gerrit_comment.txt
270 # To take advantage of this macro, have your build write
271 # out the file 'gerrit_comment.txt' with information to post
272 # back to gerrit and include this macro in the list of builders.
274 name: report-build-result-to-gerrit
281 export PATH=$PATH:/usr/local/bin/
282 if [[ -e gerrit_comment.txt ]] ; then
284 echo "posting review comment to gerrit..."
286 cat gerrit_comment.txt
288 ssh -p 29418 gerrit.opnfv.org \
289 "gerrit review -p $GERRIT_PROJECT \
290 -m '$(cat gerrit_comment.txt)' \
291 $GERRIT_PATCHSET_REVISION \
296 name: remove-old-docs-from-opnfv-artifacts
303 export PATH=$PATH:/usr/local/bin/
305 [[ $GERRIT_CHANGE_NUMBER =~ .+ ]]
307 gs_path="artifacts.opnfv.org/$PROJECT/review/$GERRIT_CHANGE_NUMBER"
309 if gsutil ls "gs://$gs_path" > /dev/null 2>&1 ; then
311 echo "Deleting Out-of-dated Documents..."
312 gsutil -m rm -r "gs://$gs_path"
314 gs_path="artifacts.opnfv.org/review/$GERRIT_CHANGE_NUMBER"
316 if gsutil ls "gs://$gs_path" > /dev/null 2>&1 ; then
318 echo "Deleting Out-of-dated Documents..."
319 gsutil -m rm -r "gs://$gs_path"
323 name: build-and-upload-artifacts-json-api
329 export PATH=$PATH:/usr/local/bin/
331 virtualenv -p python2.7 $WORKSPACE/releng_artifacts
332 source $WORKSPACE/releng_artifacts/bin/activate
334 # install python packages
335 pip install google-api-python-client
337 # generate and upload index file
338 echo "Generating Artifacts API ..."
339 python $WORKSPACE/utils/opnfv-artifacts.py > index.json
340 gsutil cp index.json gs://artifacts.opnfv.org/index.json
345 name: lint-python-code
352 export PATH=$PATH:/usr/local/bin/
354 virtualenv -p python2.7 $WORKSPACE/releng_flake8
355 source $WORKSPACE/releng_flake8/bin/activate
357 # install python packages
358 pip install "flake8==2.6.2"
360 # generate and upload lint log
361 echo "Running flake8 code on $PROJECT ..."
363 # Get number of flake8 violations. If none, this will be an
365 FLAKE_COUNT="$(find . \
366 -path './releng_flake8' -prune -o \
367 -path './.tox' -prune -o \
368 -type f -name "*.py" -print | \
369 xargs flake8 --exit-zero -qq --count 2>&1)"
371 # Ensure we start with a clean environment
374 if [ ! -z $FLAKE_COUNT ]; then
375 echo "Flake8 Violations: $FLAKE_COUNT" > lint.log
377 -path './releng_flake8' -prune -o \
378 -path './.tox' -prune -o \
379 -type f -name "*.py" -print | \
380 xargs flake8 --exit-zero --first >> violation.log
381 SHOWN=$(wc -l violation.log | cut -d' ' -f1)
382 echo -e "First $SHOWN shown\n---" >> lint.log
383 cat violation.log >> lint.log
384 sed -r -i '4,$s/^/ /g' lint.log
391 name: report-lint-result-to-gerrit
398 export PATH=$PATH:/usr/local/bin/
400 # If no violations were found, no lint log will exist.
401 if [[ -e lint.log ]] ; then
402 echo -e "\nposting linting report to gerrit...\n"
407 ssh -p 29418 gerrit.opnfv.org \
408 "gerrit review -p $GERRIT_PROJECT \
409 -m \"$(cat lint.log)\" \
410 $GERRIT_PATCHSET_REVISION \
417 name: upload-review-docs
419 - build-html-and-pdf-docs-output
420 - upload-under-review-docs-to-opnfv-artifacts
421 - report-build-result-to-gerrit
424 name: upload-merged-docs
426 - build-html-and-pdf-docs-output
427 - upload-generated-docs-to-opnfv-artifacts
428 - report-build-result-to-gerrit
429 - remove-old-docs-from-opnfv-artifacts
432 name: check-bash-syntax
434 - shell: "find . -name '*.sh' | xargs bash -n"
444 export PATH=$PATH:/usr/local/bin/
446 # install python packages
447 pip install "yamllint==1.6.0"
449 # generate and upload lint log
450 echo "Running yaml code on $PROJECT ..."
452 # Ensure we start with a clean environment
453 rm -f yaml-violation.log lint.log
455 # Get number of yaml violations. If none, this will be an
458 -type f -name "*.yml" -print \
459 -o -name "*.yaml" -print | \
460 xargs yamllint > yaml-violation.log || true
462 if [ -s "yaml-violation.log" ]; then
463 SHOWN=$(cat yaml-violation.log| grep -v "^$" |wc -l)
464 echo -e "First $SHOWN shown\n---" > lint.log
465 cat yaml-violation.log >> lint.log
466 sed -r -i '4,$s/^/ /g' lint.log
470 name: clean-workspace-log
473 find $WORKSPACE -type f -name '*.log' | xargs rm -f
476 name: archive-artifacts
479 artifacts: '{artifacts}'
485 name: publish-coverage
488 report-file: "coverage.xml"
490 health-auto-update: "false"
491 stability-auto-update: "false"
492 zoom-coverage-chart: "true"
503 # The majority of the email-ext plugin options are set to the default
504 # for this macro so they can be managed through Jenkins' global
507 name: email-jenkins-admins-on-failure
511 attach-build-log: true