- job: name: check-lava-status project-type: freestyle defaults: global logrotate: daysToKeep: 90 numToKeep: 90 properties: - authorization: anonymous: - job-read - job-extended-read parameters: - string: name: LAVA_JOB_ID_POOL default: '' - password: name: LAVA_USER default: ${LAVA_USER} - password: name: LAVA_TOKEN default: ${LAVA_TOKEN} disabled: false node: master display-name: 'Check LAVA job status' triggers: - timed: 'H/5 * * * *' wrappers: - timestamps publishers: - groovy-postbuild: | import groovy.net.xmlrpc.* void log(msg) { manager.listener.logger.println(msg) } def job = hudson.model.Hudson.instance.getItem("check-lava-status") def property = job.getProperty(hudson.model.ParametersDefinitionProperty.class) def parameter = property.getParameterDefinition("LAVA_JOB_ID_POOL") def lavaJobIdPool = parameter.getDefaultValue().tokenize() def lavaJobIdPoolClone = lavaJobIdPool.clone() def lavaUser = property.getParameterDefinition("LAVA_USER").getDefaultValue() def lavaToken = property.getParameterDefinition("LAVA_TOKEN").getDefaultValue() lavaJobIdPool.each { def pblJob = hudson.model.Hudson.instance.getItem("post-build-lava") def variables = pblJob.getBuildByNumber(it.toInteger()).getBuildVariables() def lavaServer = variables.LAVA_SERVER def lavaJobId = variables.LAVA_JOB_ID def buildUrl = variables.BUILD_JOB.tokenize("/") def buildName = buildUrl[4] if (buildUrl.size() == 7) { buildName += "/" + buildUrl[5] } def buildNumber = buildUrl.last().toInteger() def build = hudson.model.Hudson.instance.getItemByFullName(buildName).getBuildByNumber(buildNumber) def lavaLab = new XMLRPCServerProxy("https://${lavaServer}") lavaLab.setBasicAuth(lavaUser, lavaToken) def response = lavaLab.invokeMethod("scheduler.job_status", [lavaJobId]) log response switch (response.job_status) { case ["Complete", "Incomplete", "Canceled"]: lavaJobIdPoolClone.remove(it) log "LAVA job removed: " + lavaJobId // update build job information (badge, shortText, description) description = build.getDescription() description = description.replaceAll(">${lavaJobId}<", ">${lavaJobId} - ${response.job_status}<") build.setDescription(description) break } } lavaJobIdPool = lavaJobIdPoolClone.join(" ") parameter.setDefaultValue(lavaJobIdPool) job.save() # classpath: # - "/usr/share/groovy/lib/groovy-xmlrpc-0.8.jar"