Improve functions for waiting jobs within same gerrit trigger
Change-Id: I98dd8c69522e061262aa5277c204bda23665364f
Related-Prod: PROD-25788 (PROD:25788)
diff --git a/src/com/mirantis/mk/JenkinsUtils.groovy b/src/com/mirantis/mk/JenkinsUtils.groovy
index 0434814..94869eb 100644
--- a/src/com/mirantis/mk/JenkinsUtils.groovy
+++ b/src/com/mirantis/mk/JenkinsUtils.groovy
@@ -158,12 +158,12 @@
*/
@NonCPS
def getBuildCauseActions(build) {
- def causeAction = build.actions.find { it -> it instanceof hudson.model.CauseAction }
- if(causeAction) {
- return causeAction.causes
- } else {
- return []
+ for(action in build.actions) {
+ if (action instanceof hudson.model.CauseAction) {
+ return action.causes
+ }
}
+ return []
}
/**
@@ -174,14 +174,12 @@
@NonCPS
def getGerritBuildContext(build) {
def causes = getBuildCauseActions(build)
- if (causes) {
- def gerritTriggerCause = causes.find { cause ->
- cause instanceof com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritCause
- }
- return gerritTriggerCause.context.getOtherBuilds()
- } else {
- return []
+ for(cause in causes) {
+ if (cause instanceof com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritCause) {
+ return cause.context.getOtherBuilds()
+ }
}
+ return []
}
/**
@@ -191,11 +189,18 @@
* checkBuilds - List of job names or regexps, which should be used to check provided builds list
* regexp - Wheither to use regexp or simple string matching
*/
+@NonCPS
def waitForOtherBuilds(LinkedHashMap config){
- def common = new com.mirantis.mk.Common()
- def builds = config.get('builds')
+ def context = config.get('context', 'gerrit')
+ def builds = []
+ if (context == 'gerrit') {
+ builds = getGerritBuildContext(currentBuild.rawBuild)
+ } else if (context == 'custom') {
+ builds = config.get('builds')
+ }
def checkBuilds = config.get('checkBuilds')
def regexp = config.get('regexp', false)
+
def waitForBuilds = builds.findAll { build ->
def jobName = build.fullDisplayName.tokenize(' ')[0]
if (regexp) {
@@ -204,16 +209,25 @@
jobName in checkBuilds
}
}
+
+ def buildsMap = []
if (waitForBuilds) {
def waiting = true
- common.infoMsg("Waiting for next jobs: ${waitForBuilds}")
+ print "\u001B[36mWaiting for next jobs: ${waitForBuilds}\u001B[0m"
while(waiting) {
waiting = false
waitForBuilds.each { job ->
if (job.inProgress) {
waiting = true
+ } else {
+ buildInfo = [
+ 'jobName': job.fullDisplayName.tokenize(' ')[0],
+ 'jobNumber': job.number,
+ ]
+ buildsMap.add(buildInfo)
}
}
}
}
+ return buildsMap
}