diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile index 586c04848d..cf6afee60f 100644 --- a/.jenkins/Jenkinsfile +++ b/.jenkins/Jenkinsfile @@ -40,20 +40,16 @@ pipeline { parallel { stage('stress') { steps { - build job: "${env.JOB_NAME}-stress-test" + script { + stress = build job: "${env.JOB_NAME}-stress-test", propagate: false + if (stress.result != 'SUCCESS') unstable('stress test failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('stress-test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('stress-test') + copyTestResults('stress-test', stress.getNumber()) } } } @@ -61,20 +57,16 @@ pipeline { } stage('fqltool') { steps { - build job: "${env.JOB_NAME}-fqltool-test" + script { + fqltool = build job: "${env.JOB_NAME}-fqltool-test", propagate: false + if (fqltool.result != 'SUCCESS') unstable('fqltool test failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('fqltool-test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('fqltool-test') + copyTestResults('fqltool-test', fqltool.getNumber()) } } } @@ -82,22 +74,16 @@ pipeline { } stage('JVM DTests') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-jvm-dtest" - } + script { + jvm_dtest = build job: "${env.JOB_NAME}-jvm-dtest", propagate: false + if (jvm_dtest.result != 'SUCCESS') unstable('jvm-dtest failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('jvm-dtest') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('jvm-dtest') + copyTestResults('jvm-dtest', jvm_dtest.getNumber()) } } } @@ -105,22 +91,16 @@ pipeline { } stage('units') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test" + script { + test = build job: "${env.JOB_NAME}-test", propagate: false + if (test.result != 'SUCCESS') unstable('unit test failures') } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test') + copyTestResults('test', test.getNumber()) } } } @@ -128,22 +108,16 @@ pipeline { } stage('long units') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-long-test" - } + script { + long_test = build job: "${env.JOB_NAME}-long-test", propagate: false + if (long_test.result != 'SUCCESS') unstable('long unit test failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('long-test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('long-test') + copyTestResults('long-test', long_test.getNumber()) } } } @@ -151,118 +125,88 @@ pipeline { } stage('burn') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test-burn" - } + script { + burn = build job: "${env.JOB_NAME}-test-burn", propagate: false + if (burn.result != 'SUCCESS') unstable('burn test failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('test-burn') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test-burn') + copyTestResults('test-burn', burn.getNumber()) } } } } } stage('cdc') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test-cdc" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('test-cdc') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test-cdc') - } - } - } + steps { + script { + cdc = build job: "${env.JOB_NAME}-test-cdc", propagate: false + if (cdc.result != 'SUCCESS') unstable('cdc failures') } } - stage('compression') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test-compression" + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('test-cdc', cdc.getNumber()) + } } } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('test-compression') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test-compression') - } - } - } + } + } + stage('compression') { + steps { + script { + compression = build job: "${env.JOB_NAME}-test-compression", propagate: false + if (compression.result != 'SUCCESS') unstable('compression failures') } } - stage('cqlsh') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-cqlsh-tests" + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('test-compression', compression.getNumber()) + } } } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('cqlsh-tests') - } - } + } + } + stage('cqlsh') { + steps { + script { + cqlsh = build job: "${env.JOB_NAME}-cqlsh-tests", propagate: false + if (cqlsh.result != 'SUCCESS') unstable('cqlsh failures') } - unstable { + } + post { + always { warnError('missing test xml files') { script { - copyTestResults('cqlsh-tests') + copyTestResults('cqlsh-tests', cqlsh.getNumber()) } } } } - } + } } } stage('Distributed Test') { parallel { stage('dtest') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest" - } + script { + dtest = build job: "${env.JOB_NAME}-dtest", propagate: false + if (dtest.result != 'SUCCESS') unstable('dtest failures') + } } post { - success { + always { warnError('missing test xml files') { script { - copyTestResults('dtest') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest') + copyTestResults('dtest', dtest.getNumber()) } } } @@ -270,70 +214,52 @@ pipeline { } stage('dtest-large') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest-large" - } + script { + dtest_large = build job: "${env.JOB_NAME}-dtest-large", propagate: false + if (dtest_large.result != 'SUCCESS') unstable('dtest-large failures') + } } post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest-large') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest-large') - } - } + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest-large', dtest_large.getNumber()) + } + } } } } stage('dtest-novnode') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest-novnode" - } + script { + dtest_novnode = build job: "${env.JOB_NAME}-dtest-novnode", propagate: false + if (dtest_novnode.result != 'SUCCESS') unstable('dtest-novnode failures') + } } post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest-novnode') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest-novnode') - } - } + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest-novnode', dtest_novnode.getNumber()) + } + } } } } stage('dtest-offheap') { steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest-offheap" - } + script { + dtest_offheap = build job: "${env.JOB_NAME}-dtest-offheap", propagate: false + if (dtest_offheap.result != 'SUCCESS') unstable('dtest-offheap failures') + } } post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest-offheap') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest-offheap') - } - } + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest-offheap', dtest_offheap.getNumber()) + } + } } } } @@ -342,19 +268,19 @@ pipeline { stage('Summary') { steps { sh "rm -fR cassandra-builds" - sh "git clone https://gitbox.apache.org/repos/asf/cassandra-builds.git" + sh "git clone --depth 1 --single-branch https://gitbox.apache.org/repos/asf/cassandra-builds.git" sh "./cassandra-builds/build-scripts/cassandra-test-report.sh" junit testResults: '**/build/test/**/TEST*.xml,**/cqlshlib.xml,**/nosetests.xml', testDataPublishers: [[$class: 'StabilityTestDataPublisher']] - // the following should fail on any installation other than builds.apache.org + // the following should fail on any installation other than ci-cassandra.apache.org // TODO: keep jenkins infrastructure related settings in `cassandra_job_dsl_seed.groovy` warnError('cannot send notifications') { script { changes = formatChanges(currentBuild.changeSets) echo "changes: ${changes}" } - slackSend channel: '#cassandra-builds', message: ":apache: <${env.BUILD_URL}|${currentBuild.fullDisplayName}> completed: ${currentBuild.result}. ${env.GIT_COMMIT}\n${changes}" - emailext to: 'builds@cassandra.apache.org', subject: "Build complete: ${currentBuild.fullDisplayName} [${currentBuild.result}] ${env.GIT_COMMIT}", body: ''' + slackSend channel: '#cassandra-builds', message: ":apache: <${env.BUILD_URL}|${currentBuild.fullDisplayName}> completed: ${currentBuild.result}. \n${changes}" + emailext to: 'builds@cassandra.apache.org', subject: "Build complete: ${currentBuild.fullDisplayName} [${currentBuild.result}] ${env.GIT_COMMIT}", presendScript: '${FILE,path="cassandra-builds/jenkins-dsl/cassandra_email_presend.groovy"}', body: ''' ------------------------------------------------------------------------------- Build ${ENV,var="JOB_NAME"} #${BUILD_NUMBER} ${BUILD_STATUS} URL: ${BUILD_URL} @@ -378,12 +304,12 @@ ${FILE,path="cassandra-test-report.txt"} } } -def copyTestResults(target) { +def copyTestResults(target, build_number) { step([$class: 'CopyArtifact', projectName: "${env.JOB_NAME}-${target}", optional: true, fingerprintArtifacts: true, - selector: [$class: 'StatusBuildSelector', stable: false], + selector: specific("${build_number}"), target: target]); } diff --git a/test/unit/org/apache/cassandra/CassandraXMLJUnitResultFormatter.java b/test/unit/org/apache/cassandra/CassandraXMLJUnitResultFormatter.java index b342b45af1..5015be9267 100644 --- a/test/unit/org/apache/cassandra/CassandraXMLJUnitResultFormatter.java +++ b/test/unit/org/apache/cassandra/CassandraXMLJUnitResultFormatter.java @@ -154,8 +154,8 @@ public class CassandraXMLJUnitResultFormatter implements JUnitResultFormatter, X doc = getDocumentBuilder().newDocument(); rootElement = doc.createElement(TESTSUITE); String n = suite.getName(); -// if (n != null && !tag.isEmpty()) -// n = n + "-" + tag; + if (n != null && !tag.isEmpty()) + n = n + "-" + tag; rootElement.setAttribute(ATTR_NAME, n == null ? UNKNOWN : n); //add the timestamp