diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile index 2b371c0129..4a640c2223 100644 --- a/.jenkins/Jenkinsfile +++ b/.jenkins/Jenkinsfile @@ -37,140 +37,104 @@ pipeline { } } stage('Test') { - parallel { - stage('JVM DTests') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-jvm-dtest" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('jvm-dtest') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('jvm-dtest') - } - } - } + parallel { + stage('JVM DTests') { + steps { + script { + jvm_dtest = build job: "${env.JOB_NAME}-jvm-dtest", propagate: false + if (jvm_dtest.result != 'SUCCESS') unstable('jvm-dtest failures') } } - stage('units') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test" + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('jvm-dtest', jvm_dtest.getNumber()) + } } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test') - } - } - } } } - stage('long units') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-long-test" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('long-test') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('long-test') - } - } - } + } + stage('units') { + steps { + script { + test = build job: "${env.JOB_NAME}-test", propagate: false + if (test.result != 'SUCCESS') unstable('unit test failures') } } - stage('burn') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test-burn" + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('test', test.getNumber()) + } } } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('test-burn') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test-burn') - } - } - } - } } - stage('compression') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-test-compression" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('test-compression') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('test-compression') - } - } - } + } + stage('long units') { + steps { + script { + long_test = build job: "${env.JOB_NAME}-long-test", propagate: false + if (long_test.result != 'SUCCESS') unstable('long unit test failures') } } - stage('cqlsh') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-cqlsh-tests" + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('long-test', long_test.getNumber()) + } } } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('cqlsh-test') - } - } + } + } + stage('burn') { + steps { + script { + burn = build job: "${env.JOB_NAME}-test-burn", propagate: false + if (burn.result != 'SUCCESS') unstable('burn test failures') + } + } + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('test-burn', burn.getNumber()) + } + } + } + } + } + stage('compression') { + steps { + script { + compression = build job: "${env.JOB_NAME}-test-compression", propagate: false + if (compression.result != 'SUCCESS') unstable('compression failures') + } + } + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('test-compression', compression.getNumber()) + } + } + } + } + } + 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-test') + copyTestResults('cqlsh-test', cqlsh.getNumber()) } } } @@ -179,94 +143,76 @@ pipeline { } } stage('Distributed Test') { - parallel { - stage('dtest') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest" + parallel { + stage('dtest') { + steps { + script { + dtest = build job: "${env.JOB_NAME}-dtest", propagate: false + if (dtest.result != 'SUCCESS') unstable('dtest failures') + } + } + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest', dtest.getNumber()) + } } } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest') - } + } + } + stage('dtest-large') { + steps { + script { + dtest_large = build job: "${env.JOB_NAME}-dtest-large", propagate: false + if (dtest_large.result != 'SUCCESS') unstable('dtest-large failures') + } + } + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest-large', dtest_large.getNumber()) } } } } - stage('dtest-large') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest-large" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest-large') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest-large') - } - } - } + } + stage('dtest-novnode') { + steps { + script { + dtest_novnode = build job: "${env.JOB_NAME}-dtest-novnode", propagate: false + if (dtest_novnode.result != 'SUCCESS') unstable('dtest-novnode failures') } } - stage('dtest-novnode') { - steps { - warnError('Tests unstable') { - build job: "${env.JOB_NAME}-dtest-novnode" - } - } - post { - success { - warnError('missing test xml files') { - script { - copyTestResults('dtest-novnode') - } - } - } - unstable { - warnError('missing test xml files') { - script { - copyTestResults('dtest-novnode') - } + post { + always { + warnError('missing test xml files') { + script { + copyTestResults('dtest-novnode', dtest_novnode.getNumber()) } } } } } } + } 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} @@ -290,12 +236,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