| 1 | /** |
| 2 | * Copyright (C) 2016 - Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com> |
| 3 | * |
| 4 | * This program is free software: you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by |
| 6 | * the Free Software Foundation, either version 3 of the License, or |
| 7 | * (at your option) any later version. |
| 8 | * |
| 9 | * This program is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | * GNU General Public License for more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 16 | */ |
| 17 | import hudson.model.* |
| 18 | import hudson.AbortException |
| 19 | import hudson.console.HyperlinkNote |
| 20 | import java.util.concurrent.CancellationException |
| 21 | |
| 22 | |
| 23 | def jobs = hudson.model.Hudson.instance.items |
| 24 | def jobStartWith = "kernel_" |
| 25 | def toBuild = [] |
| 26 | def counter = 0 |
| 27 | |
| 28 | def anotherBuild |
| 29 | jobs.each { job -> |
| 30 | def jobName = job.getName() |
| 31 | if (jobName.startsWith(jobStartWith)) { |
| 32 | counter = counter + 1 |
| 33 | def lastBuild = job.getLastBuild() |
| 34 | if (lastBuild == null || lastBuild.result != Result.SUCCESS) { |
| 35 | toBuild.push(job) |
| 36 | } else { |
| 37 | println("\t"+ jobName + " Already built") |
| 38 | } |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | def ongoingBuild = [] |
| 43 | def maxConcurrentBuild = 4 |
| 44 | |
| 45 | while (toBuild.size() != 0) { |
| 46 | if(ongoingBuild.size() <= maxConcurrentBuild) { |
| 47 | def job = toBuild.pop() |
| 48 | ongoingBuild.push(job.scheduleBuild2(0)) |
| 49 | println "\t triggering " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName) |
| 50 | } else { |
| 51 | sleep(5000) |
| 52 | ongoingBuild.removeAll{ it.isCancelled() || it.isDone() } |
| 53 | } |
| 54 | } |