mirror of https://github.com/apache/cassandra
Jenkinsfile fixes for wrong test reports being copied, and reports getting clobbered
- copy artifacts from specific build numbers, not lastest stage builds - presend script to avoid threads in the builds mailing list - Suffix "cassandra.testtag" value to the testsuite name, so testsuite elements are separated cleanly patch by Mick Semb Wever; reviewed by Berenguer Blasi for CASSANDRA-15925
This commit is contained in:
parent
d584003966
commit
bb2562b777
|
|
@ -37,236 +37,182 @@ 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"
|
||||
}
|
||||
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')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('long-test', long_test.getNumber())
|
||||
}
|
||||
}
|
||||
}
|
||||
post {
|
||||
success {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('test-compression')
|
||||
}
|
||||
}
|
||||
}
|
||||
unstable {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('test-compression')
|
||||
}
|
||||
}
|
||||
}
|
||||
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('Distributed Test') {
|
||||
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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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('Distributed Test') {
|
||||
parallel {
|
||||
stage('dtest') {
|
||||
steps {
|
||||
warnError('Tests unstable') {
|
||||
build job: "${env.JOB_NAME}-dtest"
|
||||
}
|
||||
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')
|
||||
}
|
||||
post {
|
||||
success {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest')
|
||||
}
|
||||
}
|
||||
}
|
||||
unstable {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest-novnode', dtest_novnode.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-offheap') {
|
||||
steps {
|
||||
script {
|
||||
dtest_offheap = build job: "${env.JOB_NAME}-dtest-offheap", propagate: false
|
||||
if (dtest_offheap.result != 'SUCCESS') unstable('dtest-offheap 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')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('dtest-offheap') {
|
||||
steps {
|
||||
warnError('Tests unstable') {
|
||||
build job: "${env.JOB_NAME}-dtest-offheap"
|
||||
}
|
||||
}
|
||||
post {
|
||||
success {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest-offheap')
|
||||
}
|
||||
}
|
||||
}
|
||||
unstable {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest-offheap')
|
||||
}
|
||||
post {
|
||||
always {
|
||||
warnError('missing test xml files') {
|
||||
script {
|
||||
copyTestResults('dtest-offheap', dtest_offheap.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}. <https://github.com/apache/cassandra/commit/${env.GIT_COMMIT}|${env.GIT_COMMIT}>\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]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,8 +143,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
|
||||
|
|
|
|||
Loading…
Reference in New Issue