diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index 3e383bfd7..c16ad7357 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -19,6 +19,42 @@ def notifySlack(String buildStatus = 'STARTED') { slackSend(color: color, channel: '#status-k8s', message: msg) } +def kubeConfigRoot = "/home/jenkins/.kube" + +def buildTestSteps(String kubeConfigRoot, String kubeconfig) { + return { + timestamps { + lock("${kubeconfig}-${params.TESTNAMESPACE}-${env.GIT_COMMIT}") { + withCredentials([string(credentialsId: 'ENTERPRISEIMAGE', variable: 'DEFAULTENTERPRISEIMAGE')]) { + withEnv([ + "ENTERPRISEIMAGE=${params.ENTERPRISEIMAGE}", + "IMAGETAG=${env.GIT_COMMIT}", + "KUBECONFIG=${kubeConfigRoot}/${kubeconfig}", + "LONG=${params.LONG ? 1 : 0}", + "PUSHIMAGES=1", + "TESTNAMESPACE=${params.TESTNAMESPACE}-${env.GIT_COMMIT}", + ]) { + sh "make run-tests" + } + } + } + } + } +} + +def buildCleanupSteps(String kubeConfigRoot, String kubeconfig) { + return { + timestamps { + withEnv([ + "KUBECONFIG=${kubeConfigRoot}/${kubeconfig}", + "TESTNAMESPACE=${params.TESTNAMESPACE}-${env.GIT_COMMIT}", + ]) { + sh "make cleanup-tests" + } + } + } +} + pipeline { options { buildDiscarder(logRotator(daysToKeepStr: '7', numToKeepStr: '10')) @@ -26,7 +62,7 @@ pipeline { agent any parameters { booleanParam(name: 'LONG', defaultValue: false, description: 'Execute long running tests') - string(name: 'KUBECONFIG', defaultValue: '/home/jenkins/.kube/scw-183a3b', description: 'KUBECONFIG controls which k8s cluster is used', ) + string(name: 'KUBECONFIGS', defaultValue: 'scw-183a3b,c11', description: 'KUBECONFIGS is a comma separated list of Kubernetes configuration files (relative to /home/jenkins/.kube) on which the tests are run', ) string(name: 'TESTNAMESPACE', defaultValue: 'jenkins', description: 'TESTNAMESPACE sets the kubernetes namespace to ru tests in (this must be short!!)', ) string(name: 'ENTERPRISEIMAGE', defaultValue: '', description: 'ENTERPRISEIMAGE sets the docker image used for enterprise tests)', ) } @@ -36,30 +72,25 @@ pipeline { timestamps { withEnv([ "IMAGETAG=${env.GIT_COMMIT}", + "LONG=${params.LONG ? 1 : 0}", + "PUSHIMAGES=1", ]) { sh "make" sh "make run-unit-tests" + sh "make docker-test" } } } } stage('Test') { steps { - timestamps { - lock("${params.TESTNAMESPACE}-${env.GIT_COMMIT}") { - withCredentials([string(credentialsId: 'ENTERPRISEIMAGE', variable: 'DEFAULTENTERPRISEIMAGE')]) { - withEnv([ - "ENTERPRISEIMAGE=${params.ENTERPRISEIMAGE}", - "IMAGETAG=${env.GIT_COMMIT}", - "KUBECONFIG=${params.KUBECONFIG}", - "LONG=${params.LONG ? 1 : 0}", - "PUSHIMAGES=1", - "TESTNAMESPACE=${params.TESTNAMESPACE}-${env.GIT_COMMIT}", - ]) { - sh "make run-tests" - } - } + script { + def configs = "${params.KUBECONFIGS}".split(",") + def testTasks = [:] + for (kubeconfig in configs) { + testTasks["${kubeconfig}"] = buildTestSteps(kubeConfigRoot, kubeconfig) } + parallel testTasks } } } @@ -67,13 +98,13 @@ pipeline { post { always { - timestamps { - withEnv([ - "KUBECONFIG=${params.KUBECONFIG}", - "TESTNAMESPACE=${params.TESTNAMESPACE}-${env.GIT_COMMIT}", - ]) { - sh "make cleanup-tests" + script { + def configs = "${params.KUBECONFIGS}".split(",") + def cleanupTasks = [:] + for (kubeconfig in configs) { + cleanupTasks["${kubeconfig}"] = buildCleanupSteps(kubeConfigRoot, kubeconfig) } + parallel cleanupTasks } } failure {