diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile
new file mode 100644
index 0000000000..572e8de119
--- /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('cqlsh') {
+ steps {
+ warnError('Tests unstable') {
+ build job: "${env.JOB_NAME}-cqlsh-tests"
+ }
+ }
+ post {
+ success {
+ warnError('missing test xml files') {
+ script {
+ copyTestResults('cqlsh-test')
+ }
+ }
+ }
+ unstable {
+ warnError('missing test xml files') {
+ script {
+ copyTestResults('cqlsh-test')
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ 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('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 d24f7456f8..e5433166f9 100644
--- a/build.xml
+++ b/build.xml
@@ -1507,10 +1507,6 @@
-
-
@@ -1746,7 +1742,7 @@
-
+
diff --git a/ide/idea/workspace.xml b/ide/idea/workspace.xml
index 3424af3f00..9cf2d966a5 100644
--- a/ide/idea/workspace.xml
+++ b/ide/idea/workspace.xml
@@ -324,7 +324,6 @@
-