From d69f7696e4fa2a48795e2e7f08e9235455eeb15a Mon Sep 17 00:00:00 2001 From: Mick Semb Wever Date: Fri, 10 Jan 2020 10:34:27 +0100 Subject: [PATCH] Create Jenkins pipeline definition, and split out Jenkins test-all builds to individual builds for each of the test targets patch by Mick Semb Wever; reviewed by David Capwell for CASSANDRA-15496 --- .circleci/config.yml | 2 +- .circleci/config.yml.HIGHRES | 2 +- .circleci/config.yml.LOWRES | 2 +- .jenkins/Jenkinsfile | 273 +++++++++++++++++++++++++++++++++++ build.xml | 6 +- ide/idea/workspace.xml | 1 - 6 files changed, 277 insertions(+), 9 deletions(-) create mode 100644 .jenkins/Jenkinsfile diff --git a/.circleci/config.yml b/.circleci/config.yml index fee6f2c856..b1ed0ef494 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1085,4 +1085,4 @@ workflows: # destination: dtest_<> # - store_artifacts: # path: ~/cassandra-dtest/logs -# destination: dtest_<>_logs \ No newline at end of file +# destination: dtest_<>_logs diff --git a/.circleci/config.yml.HIGHRES b/.circleci/config.yml.HIGHRES index 7340d9993a..4bbef27d00 100644 --- a/.circleci/config.yml.HIGHRES +++ b/.circleci/config.yml.HIGHRES @@ -1085,4 +1085,4 @@ workflows: # destination: dtest_<> # - store_artifacts: # path: ~/cassandra-dtest/logs -# destination: dtest_<>_logs \ No newline at end of file +# destination: dtest_<>_logs diff --git a/.circleci/config.yml.LOWRES b/.circleci/config.yml.LOWRES index fee6f2c856..b1ed0ef494 100644 --- a/.circleci/config.yml.LOWRES +++ b/.circleci/config.yml.LOWRES @@ -1085,4 +1085,4 @@ workflows: # destination: dtest_<> # - store_artifacts: # path: ~/cassandra-dtest/logs -# destination: dtest_<>_logs \ No newline at end of file +# destination: dtest_<>_logs diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile new file mode 100644 index 0000000000..adb2a8d84f --- /dev/null +++ b/.jenkins/Jenkinsfile @@ -0,0 +1,273 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +// +// Jenkins declaration of how to build and test the current codebase. +// Jenkins infrastructure related settings should be kept in +// https://github.com/apache/cassandra-builds/blob/master/jenkins-dsl/cassandra_job_dsl_seed.groovy +// + +pipeline { + agent any + stages { + stage('Init') { + steps { + cleanWs() + } + } + stage('Build') { + steps { + build job: "${env.JOB_NAME}-artifacts" + } + } + stage('Test') { + parallel { + stage('JVM DTests') { + steps { + warnError('Tests unstable') { + build job: "${env.JOB_NAME}-test-jvm-dtest-forking" + } + } + post { + success { + warnError('missing test xml files') { + script { + copyTestResults('test-jvm-dtest-forking') + } + } + } + unstable { + warnError('missing test xml files') { + script { + copyTestResults('test-jvm-dtest-forking') + } + } + } + } + } + stage('units') { + steps { + warnError('Tests unstable') { + build job: "${env.JOB_NAME}-test" + } + } + 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('burn') { + steps { + warnError('Tests unstable') { + build job: "${env.JOB_NAME}-test-burn" + } + } + 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('Distributed Test') { + parallel { + stage('dtest') { + steps { + warnError('Tests unstable') { + build job: "${env.JOB_NAME}-dtest" + } + } + post { + success { + warnError('missing test xml files') { + script { + copyTestResults('dtest') + } + } + } + unstable { + warnError('missing test xml files') { + script { + copyTestResults('dtest') + } + } + } + } + } + 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 { + 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') + } + } + } + } + } + } + } + stage('Summary') { + steps { + junit '**/TEST*.xml,**/cqlshlib.xml,**/nosetests.xml' + + // the following should fail on any installation other than builds.apache.org + // TODO: keep jenkins infrastructure related settings in `cassandra_job_dsl_seed.groovy` + warnError('cannot send notifications') { + slackSend channel: '#cassandra-builds', message: "${currentBuild.fullDisplayName} completed: ${currentBuild.result}. See ${env.BUILD_URL}" + emailext to: 'builds@cassandra.apache.org', subject: "Build complete: ${currentBuild.fullDisplayName} [${currentBuild.result}] ${env.GIT_COMMIT}", body: '${CHANGES}  ${JELLY_SCRIPT,template="text"}' + } + } + } +} + +def copyTestResults(target) { + step([$class: 'CopyArtifact', + projectName: "${env.JOB_NAME}-${target}", + optional: true, + fingerprintArtifacts: true, + selector: [$class: 'StatusBuildSelector', stable: false], + target: target]); +} diff --git a/build.xml b/build.xml index bd7878a412..c307e26c84 100644 --- a/build.xml +++ b/build.xml @@ -1559,10 +1559,6 @@ - - @@ -1785,7 +1781,7 @@ ]]> - + diff --git a/ide/idea/workspace.xml b/ide/idea/workspace.xml index e632b5f040..4826f6c1ff 100644 --- a/ide/idea/workspace.xml +++ b/ide/idea/workspace.xml @@ -324,7 +324,6 @@ -