blob: e42524b8e803c88a42cf17fc8228d7b80e238fba [file] [log] [blame]
Jakub Joseff2a66e92017-03-08 17:21:07 +01001/**
2 * Gerrit gating pipeline
3 * CREDENTIALS_ID - Gerrit credentails ID
Jakub Josefb62d00a2017-03-13 12:21:40 +01004 * JOBS_NAMESPACE - Gerrit gating jobs namespace (mk, contrail, ...)
Jakub Joseff2a66e92017-03-08 17:21:07 +01005 *
6**/
7
8def common = new com.mirantis.mk.Common()
9def gerrit = new com.mirantis.mk.Gerrit()
Jakub Josefeda07682017-03-09 14:50:54 +010010def ssh = new com.mirantis.mk.Ssh()
Jakub Josefa63f9862018-01-11 17:58:38 +010011timeout(time: 12, unit: 'HOURS') {
12 node("python") {
13 try{
14 // test if change is not already merged
15 ssh.prepareSshAgentKey(CREDENTIALS_ID)
16 ssh.ensureKnownHosts(GERRIT_HOST)
17 def gerritChange = gerrit.getGerritChange(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, CREDENTIALS_ID, true)
18 def doSubmit = false
19 def giveVerify = false
20 stage("test") {
21 if (gerritChange.status != "MERGED" && !SKIP_TEST.equals("true")){
22 // test max CodeReview
23 if(gerrit.patchsetHasApproval(gerritChange.currentPatchSet,"Code-Review", "+")){
24 doSubmit = true
25 def gerritProjectArray = GERRIT_PROJECT.tokenize("/")
26 def gerritProject = gerritProjectArray[gerritProjectArray.size() - 1]
27 def jobsNamespace = JOBS_NAMESPACE
28 def plural_namespaces = ['salt-formulas', 'salt-models']
29 // remove plural s on the end of job namespace
30 if (JOBS_NAMESPACE in plural_namespaces){
31 jobsNamespace = JOBS_NAMESPACE.substring(0, JOBS_NAMESPACE.length() - 1)
32 }
33 // salt-formulas tests have -latest on end of the name
34 if(JOBS_NAMESPACE.equals("salt-formulas")){
35 gerritProject=gerritProject+"-latest"
36 }
37 def testJob = String.format("test-%s-%s", jobsNamespace, gerritProject)
38 if (_jobExists(testJob)) {
39 common.infoMsg("Test job ${testJob} found, running")
40 def patchsetVerified = gerrit.patchsetHasApproval(gerritChange.currentPatchSet,"Verified", "+")
41 build job: testJob, parameters: [
42 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"],
43 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: GERRIT_REFSPEC]
44 ]
45 giveVerify = true
46 } else {
47 common.infoMsg("Test job ${testJob} not found")
48 }
Ruslan Kamaldinov310ffc02017-08-08 16:07:42 +040049 } else {
Jakub Josefa63f9862018-01-11 17:58:38 +010050 common.errorMsg("Change don't have a CodeReview, skipping gate")
Jakub Josef617e1162017-03-21 15:58:27 +010051 }
Jakub Josef7ed33e42017-06-23 16:51:34 +020052 } else {
Jakub Josefa63f9862018-01-11 17:58:38 +010053 common.infoMsg("Test job skipped")
Jakub Josefa722d432017-03-10 12:43:00 +010054 }
55 }
Jakub Josefa63f9862018-01-11 17:58:38 +010056 stage("submit review"){
57 if(gerritChange.status == "MERGED"){
58 common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to gate them")
59 }else if(doSubmit){
60 if(giveVerify){
61 common.warningMsg("Change ${GERRIT_CHANGE_NUMBER} don't have a Verified, but tests were successful, so adding Verified and submitting")
62 ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit review --verified +1 --submit %s,%s", GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER))
63 }else{
64 ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit review --submit %s,%s", GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER))
65 }
66 common.infoMsg(String.format("Gerrit review %s,%s submitted", GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER))
Jakub Josef7ed33e42017-06-23 16:51:34 +020067 }
Jakub Josef09d9d032017-04-04 17:51:03 +020068 }
Jakub Josefa63f9862018-01-11 17:58:38 +010069 } catch (Throwable e) {
70 // If there was an error or exception thrown, the build failed
71 currentBuild.result = "FAILURE"
72 currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message
73 throw e
Jakub Joseffd91d1f2017-03-08 17:27:41 +010074 }
Jakub Joseff2a66e92017-03-08 17:21:07 +010075 }
Jakub Josef4251feb2017-03-10 16:10:53 +010076}
77
78@NonCPS
79def _jobExists(jobName){
Jakub Josef253d4482017-03-13 14:04:46 +010080 return Jenkins.instance.items.find{it -> it.name.equals(jobName)}
Mikhail Ivanovf5cd07f2017-04-11 17:09:54 +040081}