| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 1 |  | 
 | 2 | /** | 
 | 3 |  *  Test salt models pipeline | 
 | 4 |  *  DEFAULT_GIT_REF | 
 | 5 |  *  DEFAULT_GIT_URL | 
 | 6 |  *  CREDENTIALS_ID | 
| Jakub Josef | 27424bc | 2017-05-22 16:56:27 +0200 | [diff] [blame] | 7 |  *  EXTRA_FORMULAS | 
| chnyda | d66d6fa | 2017-06-22 09:34:43 +0200 | [diff] [blame] | 8 |  *  SYSTEM_GIT_URL | 
 | 9 |  *  SYSTEM_GIT_REF | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 10 |  */ | 
 | 11 |  | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 12 | def common = new com.mirantis.mk.Common() | 
 | 13 | def gerrit = new com.mirantis.mk.Gerrit() | 
| Filip Pytloun | 38005aa | 2017-03-06 10:26:38 +0100 | [diff] [blame] | 14 | def ssh = new com.mirantis.mk.Ssh() | 
 | 15 | def git = new com.mirantis.mk.Git() | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 16 |  | 
| chnyda | 64b7358 | 2017-07-19 12:01:32 +0200 | [diff] [blame] | 17 | def  config_node_name_pattern | 
 | 18 | try { | 
 | 19 |   config_node_name_pattern = CONFIG_NODE_NAME_PATTERN | 
 | 20 | } catch (MissingPropertyException e) { | 
 | 21 |   config_node_name_pattern = "cfg01" | 
 | 22 | } | 
 | 23 |  | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 24 | def gerritRef | 
 | 25 | try { | 
 | 26 |   gerritRef = GERRIT_REFSPEC | 
 | 27 | } catch (MissingPropertyException e) { | 
 | 28 |   gerritRef = null | 
 | 29 | } | 
 | 30 |  | 
| Mykyta Karpin | c0758f3 | 2017-06-23 18:10:24 +0300 | [diff] [blame] | 31 | def formulasSource | 
 | 32 | try { | 
 | 33 |   formulasSource = FORMULAS_SOURCE | 
 | 34 | } catch (MissingPropertyException e) { | 
 | 35 |   formulasSource = "pkg" | 
 | 36 | } | 
 | 37 |  | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 38 | def defaultGitRef, defaultGitUrl | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 39 | try { | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 40 |     defaultGitRef = DEFAULT_GIT_REF | 
 | 41 |     defaultGitUrl = DEFAULT_GIT_URL | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 42 | } catch (MissingPropertyException e) { | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 43 |     defaultGitRef = null | 
 | 44 |     defaultGitUrl = null | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 45 | } | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 46 | def checkouted = false | 
| chnyda | 3b1d2a6 | 2017-06-13 10:08:12 +0200 | [diff] [blame] | 47 | node("python") { | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 48 |   try{ | 
 | 49 |     stage("checkout") { | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 50 |       if (gerritRef) { | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 51 |         // job is triggered by Gerrit | 
| Jakub Josef | fcb615e | 2017-04-10 14:34:40 +0200 | [diff] [blame] | 52 |         // test if change aren't already merged | 
| Jakub Josef | b223590 | 2017-06-16 12:49:16 +0200 | [diff] [blame] | 53 |         def gerritChange = gerrit.getGerritChange(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, CREDENTIALS_ID, true) | 
 | 54 |         // test if gerrit change is already Verified | 
| Jakub Josef | 2ed5081 | 2017-06-16 14:56:58 +0200 | [diff] [blame] | 55 |         if(gerrit.patchsetHasApproval(gerritChange.currentPatchSet,"Verified", "+")){ | 
| Jakub Josef | 894f1e3 | 2017-06-19 16:24:19 +0000 | [diff] [blame] | 56 |           common.successMsg("Gerrit change ${GERRIT_CHANGE_NUMBER} patchset ${GERRIT_PATCHSET_NUMBER} already has Verified, skipping tests") // do nothing | 
| Jakub Josef | bcd2e90 | 2017-06-13 14:40:41 +0200 | [diff] [blame] | 57 |         // test WIP contains in commit message | 
| Jakub Josef | b223590 | 2017-06-16 12:49:16 +0200 | [diff] [blame] | 58 |         }else if (gerritChange.commitMessage.contains("WIP")) { | 
| Jakub Josef | 894f1e3 | 2017-06-19 16:24:19 +0000 | [diff] [blame] | 59 |           common.successMsg("Commit message contains WIP, skipping tests") // do nothing | 
| Jakub Josef | bcd2e90 | 2017-06-13 14:40:41 +0200 | [diff] [blame] | 60 |         } else { | 
 | 61 |           def merged = gerritChange.status == "MERGED" | 
 | 62 |           if(!merged){ | 
 | 63 |             checkouted = gerrit.gerritPatchsetCheckout ([ | 
 | 64 |               credentialsId : CREDENTIALS_ID | 
 | 65 |             ]) | 
 | 66 |           } else{ | 
 | 67 |             common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to test them") | 
 | 68 |           } | 
| Jakub Josef | fcb615e | 2017-04-10 14:34:40 +0200 | [diff] [blame] | 69 |         } | 
| chnyda | d66d6fa | 2017-06-22 09:34:43 +0200 | [diff] [blame] | 70 |         // defaultGitUrl is passed to the triggered job | 
 | 71 |         defaultGitUrl = "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}" | 
 | 72 |         defaultGitRef = GERRIT_REFSPEC | 
| Jakub Josef | 8337931 | 2017-03-29 18:12:34 +0200 | [diff] [blame] | 73 |       } else if(defaultGitRef && defaultGitUrl) { | 
| Jakub Josef | e1407ac | 2017-03-30 14:10:19 +0200 | [diff] [blame] | 74 |           checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID) | 
| Jakub Josef | bcd2e90 | 2017-06-13 14:40:41 +0200 | [diff] [blame] | 75 |       } else { | 
 | 76 |         throw new Exception("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null") | 
| Filip Pytloun | 19376a8 | 2017-03-07 12:29:00 +0100 | [diff] [blame] | 77 |       } | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 78 |     } | 
| chnyda | a9c8870 | 2017-05-09 16:51:07 +0200 | [diff] [blame] | 79 |  | 
| chnyda | 14e4429 | 2017-05-13 19:00:06 +0200 | [diff] [blame] | 80 |     stage("test-nodes") { | 
| Jakub Josef | bcd2e90 | 2017-06-13 14:40:41 +0200 | [diff] [blame] | 81 |       if(checkouted) { | 
| chnyda | 64b7358 | 2017-07-19 12:01:32 +0200 | [diff] [blame] | 82 |         def nodes = sh(script: "find ./nodes -type f -name '${config_node_name_pattern}*.yml'", returnStdout: true).tokenize() | 
| chnyda | d66d6fa | 2017-06-22 09:34:43 +0200 | [diff] [blame] | 83 |         def branches = [:] | 
| chnyda | 81ae93d | 2017-06-22 15:49:52 +0200 | [diff] [blame] | 84 |         def acc = 0 | 
| chnyda | d66d6fa | 2017-06-22 09:34:43 +0200 | [diff] [blame] | 85 |         for (int i = 0; i < nodes.size(); i++) { | 
| chnyda | 1b60648 | 2017-06-22 15:17:20 +0200 | [diff] [blame] | 86 |           def testTarget = sh(script: "basename ${nodes[i]} .yml", returnStdout: true).trim() | 
| chnyda | 1186a9c | 2017-06-26 13:13:32 +0200 | [diff] [blame] | 87 |           if (acc >= PARALLEL_NODE_GROUP_SIZE.toInteger()) { | 
| chnyda | 81ae93d | 2017-06-22 15:49:52 +0200 | [diff] [blame] | 88 |             parallel branches | 
| chnyda | 81ae93d | 2017-06-22 15:49:52 +0200 | [diff] [blame] | 89 |             branches = [:] | 
| chnyda | 1186a9c | 2017-06-26 13:13:32 +0200 | [diff] [blame] | 90 |             acc = 0 | 
| chnyda | 81ae93d | 2017-06-22 15:49:52 +0200 | [diff] [blame] | 91 |           } | 
| chnyda | 1186a9c | 2017-06-26 13:13:32 +0200 | [diff] [blame] | 92 |  | 
 | 93 |           branches[testTarget] = { | 
 | 94 |             build job: "test-salt-model-node", parameters: [ | 
 | 95 |               [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: defaultGitUrl], | 
 | 96 |               [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: defaultGitRef], | 
 | 97 |               [$class: 'StringParameterValue', name: 'NODE_TARGET', value: testTarget], | 
| chnyda | ab82fd4 | 2017-06-26 13:30:02 +0200 | [diff] [blame] | 98 |               [$class: 'StringParameterValue', name: 'FORMULAS_SOURCE', value: formulasSource], | 
| chnyda | 1186a9c | 2017-06-26 13:13:32 +0200 | [diff] [blame] | 99 |               [$class: 'StringParameterValue', name: 'EXTRA_FORMULAS', value: EXTRA_FORMULAS], | 
| Jakub Josef | 09251c9 | 2017-06-27 11:49:33 +0200 | [diff] [blame] | 100 |               [$class: 'StringParameterValue', name: 'FORMULAS_REVISION', value: FORMULAS_REVISION], | 
| chnyda | 1186a9c | 2017-06-26 13:13:32 +0200 | [diff] [blame] | 101 |               [$class: 'StringParameterValue', name: 'CREDENTIALS_ID', value: CREDENTIALS_ID], | 
 | 102 |               [$class: 'StringParameterValue', name: 'SYSTEM_GIT_URL', value: SYSTEM_GIT_URL], | 
 | 103 |               [$class: 'StringParameterValue', name: 'SYSTEM_GIT_REF', value: SYSTEM_GIT_REF] | 
 | 104 |             ]} | 
 | 105 |           acc++; | 
| chnyda | 81ae93d | 2017-06-22 15:49:52 +0200 | [diff] [blame] | 106 |         } | 
| chnyda | f504ba1 | 2017-06-26 13:35:46 +0200 | [diff] [blame] | 107 |         if (acc != 0) { | 
 | 108 |           parallel branches | 
 | 109 |         } | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 110 |       } | 
| chnyda | 51b0314 | 2017-05-10 17:15:27 +0200 | [diff] [blame] | 111 |     } | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 112 |   } catch (Throwable e) { | 
| Jakub Josef | c5a223a | 2017-03-01 14:40:08 +0100 | [diff] [blame] | 113 |      currentBuild.result = "FAILURE" | 
 | 114 |      throw e | 
 | 115 |   } finally { | 
 | 116 |      common.sendNotification(currentBuild.result,"",["slack"]) | 
 | 117 |   } | 
| Tomáš Kukrál | 500c018 | 2017-05-11 13:46:19 +0200 | [diff] [blame] | 118 | } | 
| Jakub Josef | 8d02477 | 2017-05-15 18:07:45 +0200 | [diff] [blame] | 119 |  |