blob: dd396098de418b499760622c51db640e8279f3b8 [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**/
Jakub Josef09d9d032017-04-04 17:51:03 +02007import groovy.json.JsonSlurper
Jakub Joseff2a66e92017-03-08 17:21:07 +01008
9def common = new com.mirantis.mk.Common()
10def gerrit = new com.mirantis.mk.Gerrit()
Jakub Josefeda07682017-03-09 14:50:54 +010011def ssh = new com.mirantis.mk.Ssh()
Jakub Joseff2a66e92017-03-08 17:21:07 +010012node("python") {
13 try{
Jakub Josef09d9d032017-04-04 17:51:03 +020014 // test if change is not already merged
15 ssh.prepareSshAgentKey(CREDENTIALS_ID)
16 ssh.ensureKnownHosts(GERRIT_HOST)
Jakub Josefdac4f112017-04-05 11:59:40 +020017 def gerritChangeStatus = _getGerritChangeStatus(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER)
Jakub Joseff2a66e92017-03-08 17:21:07 +010018 stage("test") {
Jakub Josefdac4f112017-04-05 11:59:40 +020019 if (gerritChangeStatus != "MERGED" && !SKIP_TEST.equals("true")){
Jakub Josef617e1162017-03-21 15:58:27 +010020 wrap([$class: 'AnsiColorBuildWrapper']) {
21 def gerritProjectArray = GERRIT_PROJECT.tokenize("/")
22 def gerritProject = gerritProjectArray[gerritProjectArray.size() - 1]
23 def jobsNamespace = JOBS_NAMESPACE
24 // remove plural s on the end of job namespace
25 if (JOBS_NAMESPACE[JOBS_NAMESPACE.length() - 1].equals("s")){
26 jobsNamespace = JOBS_NAMESPACE.substring(0, JOBS_NAMESPACE.length() - 1)
27 }
Jakub Joseff64c3402017-03-21 18:58:40 +010028 def testJob = String.format("test-%s-%s", jobsNamespace, gerritProject)
Jakub Josef617e1162017-03-21 15:58:27 +010029 if (_jobExists(testJob)) {
30 common.infoMsg("Test job ${testJob} found, running")
31 build job: testJob, parameters: [
Jakub Josefc1c2ec22017-03-31 18:59:03 +020032 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"],
Jakub Josef83379312017-03-29 18:12:34 +020033 [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: GERRIT_REFSPEC]
Jakub Josef617e1162017-03-21 15:58:27 +010034 ]
35 } else {
36 common.infoMsg("Test job ${testJob} not found")
37 }
Jakub Josefa722d432017-03-10 12:43:00 +010038 }
Jakub Josef617e1162017-03-21 15:58:27 +010039 } else {
40 common.infoMsg("Test job skipped")
Jakub Josefa722d432017-03-10 12:43:00 +010041 }
Jakub Joseff2a66e92017-03-08 17:21:07 +010042 }
43 stage("submit review"){
Jakub Josefdac4f112017-04-05 11:59:40 +020044 if(gerritChangeStatus == "MERGED"){
Jakub Josef09d9d032017-04-04 17:51:03 +020045 common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to gate them")
46 }else{
47 ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit review --submit %s,%s", GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER))
48 common.infoMsg(String.format("Gerrit review %s,%s submitted", GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER))
49 }
Jakub Joseffd91d1f2017-03-08 17:27:41 +010050 }
Jakub Joseff2a66e92017-03-08 17:21:07 +010051 } catch (Throwable e) {
52 // If there was an error or exception thrown, the build failed
53 currentBuild.result = "FAILURE"
54 throw e
55 } finally {
Jakub Josef83379312017-03-29 18:12:34 +020056 //common.sendNotification(currentBuild.result,"",["slack"])
Jakub Joseff2a66e92017-03-08 17:21:07 +010057 }
Jakub Josef4251feb2017-03-10 16:10:53 +010058}
59
60@NonCPS
61def _jobExists(jobName){
Jakub Josef253d4482017-03-13 14:04:46 +010062 return Jenkins.instance.items.find{it -> it.name.equals(jobName)}
63}
Jakub Josefdac4f112017-04-05 11:59:40 +020064
65@NonCPS
66def _getGerritChangeStatus(gerritName, gerritHost, gerritChange){
Jakub Josef4830c1a2017-04-05 12:16:53 +020067 def ssh = new com.mirantis.mk.Ssh()
Jakub Josefdac4f112017-04-05 11:59:40 +020068 def output = ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit query --format=JSON change:%s", gerritName, gerritHost, gerritChange))
69 def jsonSlurper = new JsonSlurper()
Jakub Joseff8ca0dc2017-04-05 12:13:29 +020070 def gerritChangeObject = jsonSlurper.parseText(output)
71 if(gerritChangeObject["status"]){
72 return gerritChangeObject["status"]
Jakub Josefdac4f112017-04-05 11:59:40 +020073 }else{
74 return "ERROR"
75 }
76}