@@ -19,19 +19,67 @@ def notifySlack(String buildStatus = 'STARTED') {
1919 slackSend(color : color, channel : ' #status-k8s' , message : msg)
2020}
2121
22+ def fetchParamsFromGitLog () {
23+ def myParams = [:];
24+ // Copy configured params
25+ for (entry in params) {
26+ myParams[entry. key] = entry. value;
27+ }
28+
29+ // Fetch params configured in git commit messages
30+ // Syntax: [ci OPT=value]
31+ // Example: [ci TESTOPTIONS="-test.run ^TestSimpleSingle$"]
32+ def options = sh(returnStdout : true , script : " git log --reverse remotes/origin/master..HEAD | grep -o \'\\ [ci[^\\ []*\\ ]\' | sed -E \' s/\\ [ci (.*)\\ ]/\\ 1/\' " ). trim(). split(" \n " )
33+ for (opt in options) {
34+ def idx = opt. indexOf(' =' );
35+ if (idx > 0 ) {
36+ def key = opt. substring(0 , idx);
37+ def value = opt. substring(idx+1 ). replaceAll(' ^\" |\" $' , ' ' );
38+ myParams[key] = value;
39+ // println("Overwriting myParams.${key} with ${value}");
40+ }
41+ }
42+
43+ // Show params in log
44+ for (entry in myParams) {
45+ println (" Using myParams.${ entry.key} with ${ entry.value} " );
46+ }
47+
48+ return myParams;
49+ }
50+
2251def kubeConfigRoot = " /home/jenkins/.kube"
2352
24- def buildTestSteps (String kubeConfigRoot , String kubeconfig ) {
53+ def buildBuildSteps (Map myParams ) {
54+ return {
55+ timestamps {
56+ withEnv([
57+ " DEPLOYMENTNAMESPACE=${ myParams.TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
58+ " DOCKERNAMESPACE=${ myParams.DOCKERNAMESPACE} " ,
59+ " IMAGETAG=jenkins-test" ,
60+ " LONG=${ myParams.LONG ? 1 : 0} " ,
61+ " TESTOPTIONS=${ myParams.TESTOPTIONS} " ,
62+ ]) {
63+ sh " make"
64+ sh " make run-unit-tests"
65+ sh " make docker-test"
66+ }
67+ }
68+ }
69+ }
70+
71+ def buildTestSteps (Map myParams , String kubeConfigRoot , String kubeconfig ) {
2572 return {
2673 timestamps {
2774 withCredentials([string(credentialsId : ' ENTERPRISEIMAGE' , variable : ' DEFAULTENTERPRISEIMAGE' )]) {
2875 withEnv([
29- " DEPLOYMENTNAMESPACE=${ params .TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
30- " DOCKERNAMESPACE=${ params .DOCKERNAMESPACE} " ,
31- " ENTERPRISEIMAGE=${ params .ENTERPRISEIMAGE} " ,
76+ " DEPLOYMENTNAMESPACE=${ myParams .TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
77+ " DOCKERNAMESPACE=${ myParams .DOCKERNAMESPACE} " ,
78+ " ENTERPRISEIMAGE=${ myParams .ENTERPRISEIMAGE} " ,
3279 " IMAGETAG=jenkins-test" ,
3380 " KUBECONFIG=${ kubeConfigRoot} /${ kubeconfig} " ,
34- " LONG=${ params.LONG ? 1 : 0} " ,
81+ " LONG=${ myParams.LONG ? 1 : 0} " ,
82+ " TESTOPTIONS=${ myParams.TESTOPTIONS} " ,
3583 ]) {
3684 sh " make run-tests"
3785 }
@@ -40,12 +88,12 @@ def buildTestSteps(String kubeConfigRoot, String kubeconfig) {
4088 }
4189}
4290
43- def buildCleanupSteps (String kubeConfigRoot , String kubeconfig ) {
91+ def buildCleanupSteps (Map myParams , String kubeConfigRoot , String kubeconfig ) {
4492 return {
4593 timestamps {
4694 withEnv([
47- " DEPLOYMENTNAMESPACE=${ params .TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
48- " DOCKERNAMESPACE=${ params .DOCKERNAMESPACE} " ,
95+ " DEPLOYMENTNAMESPACE=${ myParams .TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
96+ " DOCKERNAMESPACE=${ myParams .DOCKERNAMESPACE} " ,
4997 " KUBECONFIG=${ kubeConfigRoot} /${ kubeconfig} " ,
5098 ]) {
5199 sh " make cleanup-tests"
@@ -66,31 +114,26 @@ pipeline {
66114 string(name : ' KUBECONFIGS' , defaultValue : ' kube-ams1,scw-183a3b' , description : ' KUBECONFIGS is a comma separated list of Kubernetes configuration files (relative to /home/jenkins/.kube) on which the tests are run' , )
67115 string(name : ' TESTNAMESPACE' , defaultValue : ' jenkins' , description : ' TESTNAMESPACE sets the kubernetes namespace to ru tests in (this must be short!!)' , )
68116 string(name : ' ENTERPRISEIMAGE' , defaultValue : ' ' , description : ' ENTERPRISEIMAGE sets the docker image used for enterprise tests)' , )
117+ string(name : ' TESTOPTIONS' , defaultValue : ' ' , description : ' TESTOPTIONS is used to pass additional test options to the integration test' , )
69118 }
70119 stages {
71120 stage(' Build' ) {
72121 steps {
73- timestamps {
74- withEnv([
75- " DEPLOYMENTNAMESPACE=${ params.TESTNAMESPACE} -${ env.GIT_COMMIT} " ,
76- " DOCKERNAMESPACE=${ params.DOCKERNAMESPACE} " ,
77- " IMAGETAG=jenkins-test" ,
78- " LONG=${ params.LONG ? 1 : 0} " ,
79- ]) {
80- sh " make"
81- sh " make run-unit-tests"
82- sh " make docker-test"
83- }
122+ script {
123+ def myParams = fetchParamsFromGitLog();
124+ def buildSteps = buildBuildSteps(myParams);
125+ buildSteps();
84126 }
85127 }
86128 }
87129 stage(' Test' ) {
88130 steps {
89131 script {
90- def configs = " ${ params.KUBECONFIGS} " . split(" ," )
132+ def myParams = fetchParamsFromGitLog();
133+ def configs = " ${ myParams.KUBECONFIGS} " . split(" ," )
91134 def testTasks = [:]
92135 for (kubeconfig in configs) {
93- testTasks[" ${ kubeconfig} " ] = buildTestSteps(kubeConfigRoot, kubeconfig)
136+ testTasks[" ${ kubeconfig} " ] = buildTestSteps(myParams, kubeConfigRoot, kubeconfig)
94137 }
95138 parallel testTasks
96139 }
@@ -101,10 +144,11 @@ pipeline {
101144 post {
102145 always {
103146 script {
104- def configs = " ${ params.KUBECONFIGS} " . split(" ," )
147+ def myParams = fetchParamsFromGitLog();
148+ def configs = " ${ myParams['KUBECONFIGS']} " . split(" ," )
105149 def cleanupTasks = [:]
106150 for (kubeconfig in configs) {
107- cleanupTasks[" ${ kubeconfig} " ] = buildCleanupSteps(kubeConfigRoot, kubeconfig)
151+ cleanupTasks[" ${ kubeconfig} " ] = buildCleanupSteps(myParams, kubeConfigRoot, kubeconfig)
108152 }
109153 parallel cleanupTasks
110154 }
0 commit comments