blob: e2e7d5aa36be2e2c09f400f81a182f728886fcd0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
- 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"
|