Move apache dtests to running in docker
use dumb-init to get signal handling to work (https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html)
Patch by marcuse; reviewed by Michael Shuler for CASSANDRA-14241
diff --git a/build-scripts/cassandra-dtest-pytest.sh b/build-scripts/cassandra-dtest-pytest.sh
index 993bcb3..7eae11e 100755
--- a/build-scripts/cassandra-dtest-pytest.sh
+++ b/build-scripts/cassandra-dtest-pytest.sh
@@ -52,13 +52,13 @@
rm -r upgrade_tests/ # TEMP: remove upgrade_tests - we have no dual JDK installation
set +e # disable immediate exit from this point
if [ "${DTEST_TARGET}" = "dtest" ]; then
- pytest --log-level="INFO" --use-vnodes --num-tokens=32 --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
+ pytest -vv --log-level="INFO" --use-vnodes --num-tokens=32 --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
elif [ "${DTEST_TARGET}" = "dtest-novnode" ]; then
- pytest --log-level="INFO" --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
+ pytest -vv --log-level="INFO" --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
elif [ "${DTEST_TARGET}" = "dtest-offheap" ]; then
- pytest --log-level="INFO" --use-vnodes --num-tokens=32 --use-off-heap-memtables --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
+ pytest -vv --log-level="INFO" --use-vnodes --num-tokens=32 --use-off-heap-memtables --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --skip-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
elif [ "${DTEST_TARGET}" = "dtest-large" ]; then
- pytest --log-level="INFO" --use-vnodes --num-tokens=32 --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --force-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
+ pytest -vv --log-level="INFO" --use-vnodes --num-tokens=32 --junit-xml=nosetests.xml -s --cassandra-dir=$CASSANDRA_DIR --force-resource-intensive-tests 2>&1 | tee -a ${WORKSPACE}/test_stdout.txt
else
echo "Unknown dtest target: ${DTEST_TARGET}"
exit 1
diff --git a/docker/jenkins/dtest.sh b/docker/jenkins/dtest.sh
index 87dd77f..0d8cdb9 100644
--- a/docker/jenkins/dtest.sh
+++ b/docker/jenkins/dtest.sh
@@ -3,7 +3,9 @@
export LANG=en_US.UTF-8
export PYTHONIOENCODING=utf-8
export PYTHONUNBUFFERED=true
+echo "dtest.sh: running: git clone --depth=1 --branch=$BRANCH https://github.com/$REPO/cassandra.git"
git clone --depth=1 --branch=$BRANCH https://github.com/$REPO/cassandra.git
cd cassandra
+echo git clone --branch=$DTEST_BRANCH $DTEST_REPO
git clone --branch=$DTEST_BRANCH $DTEST_REPO
-../cassandra-builds/build-scripts/cassandra-dtest-pytest.sh
+../cassandra-builds/build-scripts/cassandra-dtest-pytest.sh $1
diff --git a/docker/jenkins/jenkinscommand.sh b/docker/jenkins/jenkinscommand.sh
index f218ff9..5e4741d 100644
--- a/docker/jenkins/jenkinscommand.sh
+++ b/docker/jenkins/jenkinscommand.sh
@@ -1,13 +1,18 @@
#!/bin/sh
+DOCKER_IMAGE="kjellman/cassandra-test:0.4.4"
+BUILDSREPO=$5
+BUILDSBRANCH=$6
cat > env.list <<EOF
-REPO=$REPO
-BRANCH=$BRANCH
-DTEST_REPO=$DTEST_REPO
-DTEST_BRANCH=$DTEST_BRANCH
+REPO=$1
+BRANCH=$2
+DTEST_REPO=$3
+DTEST_BRANCH=$4
EOF
-ID=$(docker run --env-file env.list -dt kjellman/cassandra-test:0.4.3 bash -ilc "git clone --depth=1 --branch dock https://github.com/krummas/cassandra-builds.git; sh ./cassandra-builds/docker/jenkins/dtest.sh")
+echo "jenkinscommand.sh: running: git clone --depth=1 --branch $BUILDSBRANCH $BUILDSREPO; sh ./cassandra-builds/docker/jenkins/dtest.sh $7"
+ID=$(docker run --env-file env.list -dt $DOCKER_IMAGE dumb-init bash -ilc "git clone --depth=1 --branch $BUILDSBRANCH $BUILDSREPO; sh ./cassandra-builds/docker/jenkins/dtest.sh $7")
# use docker attach instead of docker wait to get output
docker attach --no-stdin $ID
echo "$ID done, copying files"
docker cp $ID:/home/cassandra/cassandra/cassandra-dtest/nosetests.xml .
docker cp $ID:/home/cassandra/cassandra/test_stdout.txt .
+docker rm $ID
diff --git a/jenkins-dsl/cassandra_job_dsl_seed.groovy b/jenkins-dsl/cassandra_job_dsl_seed.groovy
index 9ab039c..1d4d0da 100644
--- a/jenkins-dsl/cassandra_job_dsl_seed.groovy
+++ b/jenkins-dsl/cassandra_job_dsl_seed.groovy
@@ -344,7 +344,7 @@
scm(triggerInterval)
}
steps {
- shell("./cassandra-builds/build-scripts/cassandra-dtest-pytest.sh ${targetName}")
+ shell("sh ./cassandra-builds/docker/jenkins/jenkinscommand.sh apache ${branchName} https://github.com/apache/cassandra-dtest.git master ${buildsRepo} ${buildsBranch} ${targetName}")
}
}
}
@@ -423,7 +423,7 @@
}
/**
- * Parameterized Dev Branch dtest
+ * Parameterized Dev Branch dtest in docker
*/
job('Cassandra-devbranch-dtest') {
description(jobDescription)
@@ -446,7 +446,6 @@
stringParam('BRANCH', 'trunk', 'The branch of cassandra to checkout')
stringParam('DTEST_REPO', "${dtestRepo}", 'The cassandra-dtest repo URL')
stringParam('DTEST_BRANCH', 'master', 'The branch of cassandra-dtest to checkout')
- stringParam('DTEST_SCRIPT', './cassandra-builds/build-scripts/cassandra-dtest-pytest.sh', 'A temporary means of specifying an alternate script to run the dtests.')
}
scm {
git {
@@ -462,62 +461,7 @@
steps {
buildDescription('', buildDescStr)
shell("git clean -xdff ; git clone -b ${buildsBranch} ${buildsRepo}")
- shell('git clone -b ${DTEST_BRANCH} ${DTEST_REPO}')
- shell('${DTEST_SCRIPT}')
- }
- publishers {
- archiveArtifacts('test_stdout.txt')
- archiveJunit('cassandra-dtest/nosetests.xml') {
- testDataPublishers {
- publishTestStabilityData()
- }
- }
- postBuildTask {
- task('.', 'echo "Finding job process orphans.."; if pgrep -af ${JOB_BASE_NAME}; then pkill -9 -f ${JOB_BASE_NAME}; fi')
- }
- }
-}
-
-/**
- * Parameterized Dev Branch dtest in docker
- */
-job('Cassandra-devbranch-dtest-docker') {
- description(jobDescription)
- concurrentBuild()
- jdk(jdkLabel)
- label(slaveLabel)
- logRotator {
- numToKeep(50)
- }
- wrappers {
- timeout {
- noActivity(2400)
- }
- }
- throttleConcurrentBuilds {
- categories(['Cassandra'])
- }
- parameters {
- stringParam('REPO', 'apache', 'The github user/org to clone cassandra repo from')
- stringParam('BRANCH', 'trunk', 'The branch of cassandra to checkout')
- stringParam('DTEST_REPO', "${dtestRepo}", 'The cassandra-dtest repo URL')
- stringParam('DTEST_BRANCH', 'master', 'The branch of cassandra-dtest to checkout')
- }
- scm {
- git {
- remote {
- url('https://github.com/${REPO}/cassandra.git')
- }
- branch('${BRANCH}')
- extensions {
- cleanAfterCheckout()
- }
- }
- }
- steps {
- buildDescription('', buildDescStr)
- shell("git clean -xdff ; git clone -b dock https://github.com/krummas/cassandra-builds.git")
- shell('sh ./cassandra-builds/docker/jenkins/jenkinscommand.sh')
+ shell("sh ./cassandra-builds/docker/jenkins/jenkinscommand.sh \$REPO \$BRANCH \$DTEST_REPO \$DTEST_BRANCH ${buildsRepo} ${buildsBranch}")
}
publishers {
archiveArtifacts('test_stdout.txt')