X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=dsl%2Fkernel-lttng-modules.seed.groovy;h=56fe7468eb5c04d9fb9d5b5c8b50aa48cd37eb10;hb=974f7068483f05e6eb8df144e92f2d9233dcb306;hp=c13f48bf5fbd00a3c2cac78aadf48a6d1e2d9b9a;hpb=d11d066523259929ac708817268cd60093e2e1ca;p=lttng-ci.git diff --git a/dsl/kernel-lttng-modules.seed.groovy b/dsl/kernel-lttng-modules.seed.groovy index c13f48b..56fe746 100644 --- a/dsl/kernel-lttng-modules.seed.groovy +++ b/dsl/kernel-lttng-modules.seed.groovy @@ -87,9 +87,10 @@ class BasicVersion implements Comparable { } } -def kernelTagCutOff = new BasicVersion("3.19", "") -def modulesBranches = ["master","stable-2.5.0","stable-2.6.0", "stable-2.4.0"] +def kernelTagCutOff = new BasicVersion("2.6.36", "") +def modulesBranches = ["master", "stable-2.5", "stable-2.6"] +//def modulesBranches = ["master","stable-2.5","stable-2.6", "stable-2.4"] def linuxURL = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" def modulesURL = "git://git.lttng.org/lttng-modules.git" @@ -100,14 +101,15 @@ String recipeCheckoutTo = "recipe" String modulesCheckoutTo = "lttng-modules" def linuxGitReference = "/home/jenkins/gitcache/linux-stable.git" -String process = "git ls-remote -t $linuxURL | cut -c42- | sort -V" // Check if we are on jenkins // Useful for outside jenkins devellopment related to groovy only scripting def isJenkinsInstance = binding.variables.containsKey('JENKINS_HOME') +// Fetch tags and format // Split the string into sections based on | // And pipe the results together +String process = "git ls-remote -t $linuxURL | cut -c42- | sort -V" def out = new StringBuilder() def err = new StringBuilder() Process result = process.tokenize( '|' ).inject( null ) { p, c -> @@ -137,9 +139,13 @@ if ( result.exitValue() == 0 ) { // Sort the version via Comparable implementation of KernelVersion versions = versions.sort() - // Find the version cut of + // Find the version cutoff def cutoffPos = versions.findIndexOf{(it.major >= kernelTagCutOff.major) && (it.minor >= kernelTagCutOff.minor) && (it.revision >= kernelTagCutOff.revision) && (it.build >= kernelTagCutOff.build) && (it.rc >= kernelTagCutOff.rc)} + // If error set cutoff on last so no job are created + if (cutoffPos == -1) { + cutoffPos = versions.size() + } // Get last version and include only last rc def last def lastNoRcPos @@ -155,8 +161,14 @@ if ( result.exitValue() == 0 ) { } String modulesPrefix = "lttng-modules" - String kernelPrefix = "kernel" + String kernelPrefix = "dsl-kernel" String separator = "-" + + + println("CutOff index") + println(cutoffPos) + + // Actual job creation for (int i = cutoffPos; i < versions.size() ; i++) { @@ -196,10 +208,10 @@ if ( result.exitValue() == 0 ) { } } // Corresponding Module job - modulesJob.each { - println("\t" + it.key + " " + it.value) + modulesJob.each { job -> + println("\t" + job.key + " " + job.value) if (isJenkinsInstance) { - matrixJob(it.value) { + matrixJob(job.value) { using("modules") multiscm { git { @@ -217,7 +229,7 @@ if ( result.exitValue() == 0 ) { name(modulesPrefix) url(modulesURL) } - branch(it.key) + branch(job.key) relativeTargetDir(modulesCheckoutTo) } } @@ -232,4 +244,133 @@ if ( result.exitValue() == 0 ) { } } } + + // Trigger generations + def dslTriggerKernel = """\ +import hudson.model.* +import hudson.AbortException +import hudson.console.HyperlinkNote +import java.util.concurrent.CancellationException +import java.util.Random + + +Random random = new Random() +def jobs = hudson.model.Hudson.instance.items +def fail = false +def jobStartWith = "dsl-kernel-" +def toBuild = [] +def counter = 0 + +def anotherBuild +jobs.each { job -> + def jobName = job.getName() + if (jobName.startsWith(jobStartWith)) { + counter = counter + 1 + def lastBuild = job.getLastBuild() + if (lastBuild == null || lastBuild.result != Result.SUCCESS) { + toBuild.push(job) + } else { + println("\\tAlready built") + } + } +} + +println "Kernel total "+ counter +println "Kernel to build "+ toBuild.size() + + +def kernelEnabledNode = 0 +hudson.model.Hudson.instance.nodes.each { node -> + if (node.getLabelString().contains("kernel")){ + kernelEnabledNode++ + } +} +println "Nb of live kernel enabled build node "+ kernelEnabledNode + +def ongoingBuild = [] + +while (toBuild.size() != 0) { + if(ongoingBuild.size() <= (kernelEnabledNode.intdiv(2))) { + def job = toBuild.pop() + ongoingBuild.push(job.scheduleBuild2(0)) + println "\\t trigering" + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName) + } else { + Thread.sleep(random.nextInt(120000)) + ongoingBuild.removeAll{ it.isCancelled() || it.isDone() } + } +} + +if (fail){ + throw new AbortException("Some job failed") +} +""" + def dslTriggerModule = """\ +import hudson.model.* +import hudson.AbortException +import hudson.console.HyperlinkNote +import java.util.concurrent.CancellationException +import java.util.Random + + +Random random = new Random() +def jobs = hudson.model.Hudson.instance.items +def fail = false +def jobStartWith = "JOBPREFIX" +def toBuild = [] +def counter = 0 + +def anotherBuild +jobs.each { job -> + def jobName = job.getName() + if (jobName.startsWith(jobStartWith)) { + counter = counter + 1 + toBuild.push(job) + } +} + +// Get valid node +def kernelEnabledNode = 0 +hudson.model.Hudson.instance.nodes.each { node -> + if (node.getLabelString().contains("kernel")){ + kernelEnabledNode++ + } +} + +def ongoingBuild = [] +while (toBuild.size() != 0) { + if(ongoingBuild.size() <= (kernelEnabledNode.intdiv(2))) { + def job = toBuild.pop() + ongoingBuild.push(job.scheduleBuild2(0)) + println "\\t trigering " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName) + } else { + Thread.sleep(random.nextInt(60000)) + ongoingBuild.removeAll{ it.isCancelled() || it.isDone() } + } +} + +if (fail){ + throw new AbortException("Some job failed") +} +""" + if (isJenkinsInstance) { + freeStyleJob("dsl-trigger-kernel") { + steps { + systemGroovyCommand(dslTriggerKernel) + } + triggers { + cron("H 0 * * *") + } + } + + modulesBranches.each { branch -> + freeStyleJob("dsl-trigger-module-${branch}") { + steps { + systemGroovyCommand(dslTriggerModule.replaceAll("JOBPREFIX",modulesPrefix + separator + branch + separator)) + } + triggers { + scm('@daily') + } + } + } + } }