From d0580f626de62ef6635bd72c8c2955da43becedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 5 Aug 2016 11:32:35 +0200 Subject: [PATCH] Next step jenkinsfile (#25622) * Adding timestamper and evaluation of test results even in case of failure * Adding build timeout * use fixed value 120 minutes as timeout for each test executing for now * Terminate the build as soon as test execution fails * Adjust external testing as well * Finalize use of executeAndReport --- Jenkinsfile | 167 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 117 insertions(+), 50 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b728cb4ca50b..8c15c67f25f7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,70 +1,137 @@ #!groovy +/* + * This Jenkinsfile is intended to run on https://ci.owncloud.org and may fail anywhere else. + * It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc. + */ -node('SLAVE') { +timestampedNode('SLAVE') { stage 'Checkout' checkout scm sh '''git submodule update --init''' stage 'JavaScript Testing' - sh '''./autotest-js.sh''' - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-js.xml']) + executeAndReport('tests/autotest-results-js.xml') { + sh '''./autotest-js.sh''' + } stage 'PHPUnit' - sh ''' - export NOCOVERAGE=1 - unset USEDOCKER - phpenv local 7.0 - ./autotest.sh sqlite - phpenv local 5.4 - ./autotest.sh mysql - phpenv local 5.6 - ./autotest.sh pgsql - phpenv local 5.5 - ./autotest.sh oci - ''' - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-sqlite.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-mysql.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-oci.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-pgsql.xml']) + executeAndReport('tests/autotest-results-sqlite.xml') { + sh ''' + export NOCOVERAGE=1 + unset USEDOCKER + phpenv local 7.0 + ./autotest.sh sqlite + ''' + } + executeAndReport('tests/autotest-results-mysql.xml') { + sh ''' + export NOCOVERAGE=1 + unset USEDOCKER + phpenv local 5.4 + ./autotest.sh mysql + ''' + } + executeAndReport('tests/autotest-results-pgsql.xml') { + sh ''' + export NOCOVERAGE=1 + unset USEDOCKER + phpenv local 5.6 + ./autotest.sh pgsql + ''' + } + executeAndReport('tests/autotest-results-oci.xml') { + sh ''' + export NOCOVERAGE=1 + unset USEDOCKER + phpenv local 5.5 + ./autotest.sh oci + ''' + } stage 'Files External Testing' - sh '''phpenv local 7.0 - export NOCOVERAGE=1 - unset USEDOCKER - ./autotest-external.sh sqlite webdav-ownCloud - ./autotest-external.sh sqlite smb-silvershell - ./autotest-external.sh sqlite swift-ceph - ./autotest-external.sh sqlite smb-windows - ''' + executeAndReport('tests/autotest-external-results-sqlite-webdav-ownCloud.xml') { + sh '''phpenv local 7.0 + export NOCOVERAGE=1 + unset USEDOCKER + ./autotest-external.sh sqlite webdav-ownCloud + ''' + } + executeAndReport('tests/autotest-external-results-sqlite-smb-silvershell.xml') { + sh '''phpenv local 7.0 + export NOCOVERAGE=1 + unset USEDOCKER + ./autotest-external.sh sqlite smb-silvershell + ''' + } + executeAndReport('tests/autotest-external-results-sqlite-swift-ceph.xml') { + sh '''phpenv local 7.0 + export NOCOVERAGE=1 + unset USEDOCKER + ./autotest-external.sh sqlite swift-ceph + ''' + } + executeAndReport('tests/autotest-external-results-sqlite-smb-windows.xml') { + sh '''phpenv local 7.0 + export NOCOVERAGE=1 + unset USEDOCKER + ./autotest-external.sh sqlite smb-windows + ''' + } + step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite-webdav-ownCloud.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite-smb-silvershell.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite-swift-ceph.xml']) - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite-smb-windows.xml']) stage 'Primary Objectstore Test - Swift' - sh '''phpenv local 7.0 + executeAndReport('tests/autotest-results-mysql.xml') { + sh '''phpenv local 7.0 - export NOCOVERAGE=1 - export RUN_OBJECTSTORE_TESTS=1 - export PRIMARY_STORAGE_CONFIG="swift" - unset USEDOCKER + export NOCOVERAGE=1 + export RUN_OBJECTSTORE_TESTS=1 + export PRIMARY_STORAGE_CONFIG="swift" + unset USEDOCKER - rm tests/autotest-results-*.xml - ./autotest.sh mysql - ''' - step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-results-mysql.xml']) + rm tests/autotest-results-*.xml + ./autotest.sh mysql + ''' + } stage 'Integration Testing' - sh '''phpenv local 7.0 - rm -rf config/config.php - ./occ maintenance:install --admin-pass=admin - rm -rf build/integration/output - rm -rf build/integration/vendor - rm -rf build/integration/composer.lock - cd build/integration - ./run.sh - ''' - step([$class: 'JUnitResultArchiver', testResults: 'build/integration/output/*.xml']) + executeAndReport('build/integration/output/*.xml') { + sh '''phpenv local 7.0 + rm -rf config/config.php + ./occ maintenance:install --admin-pass=admin + rm -rf build/integration/output + rm -rf build/integration/vendor + rm -rf build/integration/composer.lock + cd build/integration + ./run.sh + ''' + } } +void executeAndReport(String testResultLocation, def body) { + def failed = false + // We're wrapping this in a timeout - if it takes longer, kill it. + try { + timeout(time: 120, unit: 'MINUTES') { + body.call() + } + } catch (Exception e) { + failed = true + echo "Test execution failed: ${e}" + } finally { + step([$class: 'JUnitResultArchiver', testResults: testResultLocation]) + } + + if (failed) { + error "Test execution failed. Terminating the build" + } +} + +// Runs the given body within a Timestamper wrapper on the given label. +def timestampedNode(String label, Closure body) { + node(label) { + wrap([$class: 'TimestamperBuildWrapper']) { + body.call() + } + } +}