问题
鉴于所有工作都有字符串LEVEL_X在其工作名称中,其中X是一个数字> 1.我希望每个工作用X = n监视每个工作X = n-1,并开始构建,如果每个工作都成功完成.我希望这项工作以X = n1分钟的间隔监视其他工作.
首先,我有兴趣知道最好的方法是什么,其次我想要解决方案,如果一个可以通过一个小脚本实现,也许是一个可以system groovy script使用GROOVY PLUGIN 运行的groovy脚本.
我一直在尝试在Groovy脚本程序脚本中找到一个轻量级方法,以列出所有当前正在运行的任何类型的作业.我发现唯一可靠的方法是:
start = System.currentTimeMillis()
def jobsFound = []
def buildingJobs = Jenkins.instance.getAllItems(Job.class).findAll {
it.isBuilding()
}
buildingJobs.each { job->
allRuns = job._getRuns()
allRuns.each { item->
if (!item.isBuilding()) { return } // This job is not building
jobsFound.push(item.getUrl())
}
}
timespent = (System.currentTimeMillis() - start ) / 1000
println "Time: ${timespent} seconds"
println "{jobsFound.size} jobs"
// RESULTS:
// Time: 2.015 seconds. 15 jobs
Run Code Online (Sandbox Code Playgroud)
问题是上面列举了所有当前正在运行的作业 - 我们有数千个! - 然后枚举每个正在运行的作业的所有构建(一些作业有多达300个构建).以上内容可能需要五分钟才能完成,具体取决于当前正在构建的作业数量.
一种更有效的方法是枚举活动执行程序,但是此方法忽略了在主服务器上运行的管道(也就是工作流程)作业:
start = System.currentTimeMillis()
def busyExecutors = Jenkins.instance.computers.collect {
c -> c.executors.findAll …Run Code Online (Sandbox Code Playgroud)