blob: 1ed95f5b9417adfce01ee97a1bb82cf79fa08696 [file] [log] [blame]
Jakub Josef83379312017-03-29 18:12:34 +02001
2/**
3 * Test salt models pipeline
4 * DEFAULT_GIT_REF
5 * DEFAULT_GIT_URL
6 * CREDENTIALS_ID
Jakub Josef27424bc2017-05-22 16:56:27 +02007 * EXTRA_FORMULAS
chnydad66d6fa2017-06-22 09:34:43 +02008 * SYSTEM_GIT_URL
9 * SYSTEM_GIT_REF
Jakub Josef83379312017-03-29 18:12:34 +020010 */
11
Jakub Josefc5a223a2017-03-01 14:40:08 +010012def common = new com.mirantis.mk.Common()
13def gerrit = new com.mirantis.mk.Gerrit()
Filip Pytloun38005aa2017-03-06 10:26:38 +010014def ssh = new com.mirantis.mk.Ssh()
15def git = new com.mirantis.mk.Git()
Jakub Josefc5a223a2017-03-01 14:40:08 +010016
Filip Pytloun19376a82017-03-07 12:29:00 +010017def gerritRef
18try {
19 gerritRef = GERRIT_REFSPEC
20} catch (MissingPropertyException e) {
21 gerritRef = null
22}
23
Mykyta Karpinc0758f32017-06-23 18:10:24 +030024def formulasSource
25try {
26 formulasSource = FORMULAS_SOURCE
27} catch (MissingPropertyException e) {
28 formulasSource = "pkg"
29}
30
Jakub Josef83379312017-03-29 18:12:34 +020031def defaultGitRef, defaultGitUrl
Filip Pytloun19376a82017-03-07 12:29:00 +010032try {
Jakub Josef83379312017-03-29 18:12:34 +020033 defaultGitRef = DEFAULT_GIT_REF
34 defaultGitUrl = DEFAULT_GIT_URL
Filip Pytloun19376a82017-03-07 12:29:00 +010035} catch (MissingPropertyException e) {
Jakub Josef83379312017-03-29 18:12:34 +020036 defaultGitRef = null
37 defaultGitUrl = null
Filip Pytloun19376a82017-03-07 12:29:00 +010038}
Jakub Josef83379312017-03-29 18:12:34 +020039def checkouted = false
chnyda3b1d2a62017-06-13 10:08:12 +020040node("python") {
Jakub Josefc5a223a2017-03-01 14:40:08 +010041 try{
Jakub Josef27424bc2017-05-22 16:56:27 +020042 stage("stop old tests"){
43 if (gerritRef) {
44 def runningTestBuildNums = _getRunningTriggeredTestsBuildNumbers(env["JOB_NAME"], GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER)
45 for(int i=0; i<runningTestBuildNums.size(); i++){
46 common.infoMsg("Old test with run number ${runningTestBuildNums[i]} found, stopping")
47 Jenkins.instance.getItemByFullName(env["JOB_NAME"]).getBuildByNumber(runningTestBuildNums[i]).finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
48 }
49 }
50 }
Jakub Josefc5a223a2017-03-01 14:40:08 +010051 stage("checkout") {
Filip Pytloun19376a82017-03-07 12:29:00 +010052 if (gerritRef) {
Jakub Josef83379312017-03-29 18:12:34 +020053 // job is triggered by Gerrit
Jakub Joseffcb615e2017-04-10 14:34:40 +020054 // test if change aren't already merged
Jakub Josefb2235902017-06-16 12:49:16 +020055 def gerritChange = gerrit.getGerritChange(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, CREDENTIALS_ID, true)
56 // test if gerrit change is already Verified
Jakub Josef2ed50812017-06-16 14:56:58 +020057 if(gerrit.patchsetHasApproval(gerritChange.currentPatchSet,"Verified", "+")){
Jakub Josef894f1e32017-06-19 16:24:19 +000058 common.successMsg("Gerrit change ${GERRIT_CHANGE_NUMBER} patchset ${GERRIT_PATCHSET_NUMBER} already has Verified, skipping tests") // do nothing
Jakub Josefbcd2e902017-06-13 14:40:41 +020059 // test WIP contains in commit message
Jakub Josefb2235902017-06-16 12:49:16 +020060 }else if (gerritChange.commitMessage.contains("WIP")) {
Jakub Josef894f1e32017-06-19 16:24:19 +000061 common.successMsg("Commit message contains WIP, skipping tests") // do nothing
Jakub Josefbcd2e902017-06-13 14:40:41 +020062 } else {
63 def merged = gerritChange.status == "MERGED"
64 if(!merged){
65 checkouted = gerrit.gerritPatchsetCheckout ([
66 credentialsId : CREDENTIALS_ID
67 ])
68 } else{
69 common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to test them")
70 }
Jakub Joseffcb615e2017-04-10 14:34:40 +020071 }
chnydad66d6fa2017-06-22 09:34:43 +020072 // defaultGitUrl is passed to the triggered job
73 defaultGitUrl = "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"
74 defaultGitRef = GERRIT_REFSPEC
Jakub Josef83379312017-03-29 18:12:34 +020075 } else if(defaultGitRef && defaultGitUrl) {
Jakub Josefe1407ac2017-03-30 14:10:19 +020076 checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
Jakub Josefbcd2e902017-06-13 14:40:41 +020077 } else {
78 throw new Exception("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
Filip Pytloun19376a82017-03-07 12:29:00 +010079 }
Jakub Josefc5a223a2017-03-01 14:40:08 +010080 }
chnydaa9c88702017-05-09 16:51:07 +020081
chnyda14e44292017-05-13 19:00:06 +020082 stage("test-nodes") {
Jakub Josefbcd2e902017-06-13 14:40:41 +020083 if(checkouted) {
Jakub Josef740a7882017-06-01 14:54:01 +020084 def nodes = sh(script: "find ./nodes -type f -name 'cfg*.yml'", returnStdout: true).tokenize()
chnydad66d6fa2017-06-22 09:34:43 +020085 def branches = [:]
chnyda81ae93d2017-06-22 15:49:52 +020086 def acc = 0
chnydad66d6fa2017-06-22 09:34:43 +020087 for (int i = 0; i < nodes.size(); i++) {
chnyda1b606482017-06-22 15:17:20 +020088 def testTarget = sh(script: "basename ${nodes[i]} .yml", returnStdout: true).trim()
chnyda1186a9c2017-06-26 13:13:32 +020089 if (acc >= PARALLEL_NODE_GROUP_SIZE.toInteger()) {
chnyda81ae93d2017-06-22 15:49:52 +020090 parallel branches
chnyda81ae93d2017-06-22 15:49:52 +020091 branches = [:]
chnyda1186a9c2017-06-26 13:13:32 +020092 acc = 0
chnyda81ae93d2017-06-22 15:49:52 +020093 }
chnyda1186a9c2017-06-26 13:13:32 +020094
95 branches[testTarget] = {
96 build job: "test-salt-model-node", parameters: [
97 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: defaultGitUrl],
98 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: defaultGitRef],
99 [$class: 'StringParameterValue', name: 'NODE_TARGET', value: testTarget],
chnydaab82fd42017-06-26 13:30:02 +0200100 [$class: 'StringParameterValue', name: 'FORMULAS_SOURCE', value: formulasSource],
chnyda1186a9c2017-06-26 13:13:32 +0200101 [$class: 'StringParameterValue', name: 'EXTRA_FORMULAS', value: EXTRA_FORMULAS],
Jakub Josef09251c92017-06-27 11:49:33 +0200102 [$class: 'StringParameterValue', name: 'FORMULAS_REVISION', value: FORMULAS_REVISION],
chnyda1186a9c2017-06-26 13:13:32 +0200103 [$class: 'StringParameterValue', name: 'CREDENTIALS_ID', value: CREDENTIALS_ID],
104 [$class: 'StringParameterValue', name: 'SYSTEM_GIT_URL', value: SYSTEM_GIT_URL],
105 [$class: 'StringParameterValue', name: 'SYSTEM_GIT_REF', value: SYSTEM_GIT_REF]
106 ]}
107 acc++;
chnyda81ae93d2017-06-22 15:49:52 +0200108 }
chnydaf504ba12017-06-26 13:35:46 +0200109 if (acc != 0) {
110 parallel branches
111 }
Jakub Josefc5a223a2017-03-01 14:40:08 +0100112 }
chnyda51b03142017-05-10 17:15:27 +0200113 }
Jakub Josefc5a223a2017-03-01 14:40:08 +0100114 } catch (Throwable e) {
Jakub Josefc5a223a2017-03-01 14:40:08 +0100115 currentBuild.result = "FAILURE"
116 throw e
117 } finally {
118 common.sendNotification(currentBuild.result,"",["slack"])
119 }
Tomáš Kukrál500c0182017-05-11 13:46:19 +0200120}
Jakub Josef8d024772017-05-15 18:07:45 +0200121
Jakub Josef27424bc2017-05-22 16:56:27 +0200122@NonCPS
123def _getRunningTriggeredTestsBuildNumbers(jobName, gerritChangeNumber, excludePatchsetNumber){
124 def gerrit = new com.mirantis.mk.Gerrit()
125 def jenkinsUtils = new com.mirantis.mk.JenkinsUtils()
126 def triggeredBuilds= gerrit.getGerritTriggeredBuilds(jenkinsUtils.getJobRunningBuilds(jobName), gerritChangeNumber, excludePatchsetNumber)
127 def buildNums =[]
Jakub Josefbcd2e902017-06-13 14:40:41 +0200128 for (int i=0; i<triggeredBuilds.size(); i++) {
Jakub Josef27424bc2017-05-22 16:56:27 +0200129 buildNums.add(triggeredBuilds[i].number)
130 }
131 return buildNums
Jakub Josef8d024772017-05-15 18:07:45 +0200132}