| #!/usr/bin/env groovy | |
| /* Remember for our Hudson jobs this needs to be ran as a | |
| _system_ groovy build stem, not a simple groovy build step. | |
| */ | |
| import org.eclipse.hudson.model.* | |
| void printAllProperties() { | |
| println("\n= = = All Properties = = =\n") | |
| def props = System.getProperties() | |
| for (prop in props) { | |
| println(prop) | |
| } | |
| println("\n= = = End of All Properties = = =\n") | |
| } | |
| void dumpObjectProperties (anyObject) { | |
| def filtered = ['class', 'active'] | |
| println("\n= = = Dump Object Properties = = =\n") | |
| println anyObject.properties | |
| .sort{it.key} | |
| .collect{it} | |
| .findAll{!filtered.contains(it.key)} | |
| .join('\n') | |
| println("\n= = = End of Dump Object Properties = = =\n") | |
| } | |
| void cancelIfAlsoQueued (String jobName) { | |
| //println("\n= = = = Checking if other Queued Jobs = = = = = = = =\n"); | |
| // Direct check of null does not work as expect. | |
| // Can not use variable in "wrapped script" at all, unless defined, | |
| // else MissingProperty exception | |
| // is thrown: | |
| // groovy.lang.MissingPropertyException: No such property: jobName for class: Script1 | |
| if (! jobName){ | |
| println("PROGRAMMING ERROR: This script must be provided a project name)"); | |
| } | |
| else { | |
| //println("Job name to clear from queue, if any: " + jobName); | |
| def q = hudson.model.Hudson.getInstance().getQueue(); | |
| def qitems = q.getItems(); | |
| def nJobsOfSameName = 0; | |
| if (qitems.length == 0) { | |
| println("\n\tNo other jobs in queue\n") | |
| } else { | |
| for (i=0;i<qitems.length;i++) { | |
| job=qitems[i].task; | |
| //dumpObjectProperties(job) | |
| if (job.getName().equals(jobName)) { | |
| nJobsOfSameName++; | |
| // If we find at even one of same name, we do not need to keep checking. | |
| break; | |
| } | |
| } | |
| // in our case, we do not want to cancel whole queue | |
| // if (qitems.length > 0) { | |
| // qitems[i].doCancelQueue() | |
| // Instead we will cancel, not fail, current job | |
| if (nJobsOfSameName > 0) { | |
| println("\n\tThis job was automatically cancelled, since another was in the queue, that will include the contribution.\n"); | |
| throw new InterruptedException(); | |
| } else { | |
| println("\n\tNo other jobs, of same name (" + jobName + ") were in the queue"); | |
| } | |
| } | |
| } | |
| } | |
| println("[INFO] Beginning Groovy script"); | |
| println("Groovy Version: " + GroovySystem.version); | |
| printAllProperties(); | |
| String thisProjectName = ""; | |
| // println("**** Dump this"); | |
| // dumpObjectProperties(this); | |
| // println("**** Dump this.getBinding()"); | |
| // dumpObjectProperties(this.getBinding()); | |
| // println("**** Dump binding.getVariable('build')"); | |
| // dumpObjectProperties(this.getBinding().getVariable("build")); | |
| // thisBuildName = this.getBinding().getVariable("build").getFullName(); | |
| thisProjectName = this.getBinding().getVariable("build").getParent().getFullName(); | |
| // println("thisBuildName: " + thisBuildName); | |
| // println("thisProjectName: " + thisProjectName); | |
| cancelIfAlsoQueued(thisProjectName); | |
| println("[INFO] Ending Groovy script"); |