diff options
Diffstat (limited to 'jenkins/build-trigger.jpl')
-rw-r--r-- | jenkins/build-trigger.jpl | 125 |
1 files changed, 104 insertions, 21 deletions
diff --git a/jenkins/build-trigger.jpl b/jenkins/build-trigger.jpl index 9e23b6f..ebb26ce 100644 --- a/jenkins/build-trigger.jpl +++ b/jenkins/build-trigger.jpl @@ -28,6 +28,8 @@ PUBLISH (boolean) Publish build results via the KernelCI backend API EMAIL (boolean) Send build results via email +LABS_WHITELIST + List of labs to include in the tests, all labs will be tested by default. KCI_API_URL (https://api.kernelci.org) URL of the KernelCI backend API KCI_TOKEN_ID @@ -53,7 +55,7 @@ def configAlreadyBuilt(config, kci_core) { dir(kci_core) { new_commit = sh( - script: """ + script: """\ ./kci_build \ check_new_commit \ --config=${config} \ @@ -143,21 +145,10 @@ list_kernel_configs \ } } -def addBuildOpts(config, kci_core, opts) { - dir(kci_core) { - opts['config'] = config - - def opts_raw = sh( - script: """\ -./kci_build \ -tree_branch \ ---config=${config} \ -""", returnStdout: true).trim() - def opt_list = opts_raw.tokenize('\n') - opts['tree'] = opt_list[0] - opts['git_url'] = opt_list[1] - opts['branch'] = opt_list[2] +def listArchitectures(kci_core, config) { + def arch_list = [] + dir(kci_core) { def raw_variants = sh( script: """\ ./kci_build \ @@ -166,7 +157,6 @@ list_variants \ """, returnStdout: true).trim() def variants = raw_variants.tokenize('\n') - def arch_list = [] for (String variant: variants) { def raw_variant_arch_list = sh( script: """\ @@ -181,11 +171,50 @@ arch_list \ if (!arch_list.contains(arch)) arch_list.add(arch) } - opts['arch_list'] = arch_list } + + return arch_list } -def buildKernelStep(job, arch, defconfig, build_env, opts) { +def addBuildOpts(config, kci_core, opts) { + dir(kci_core) { + opts['config'] = config + + def opts_raw = sh( + script: """\ +./kci_build \ +tree_branch \ +--config=${config} \ +""", returnStdout: true).trim() + def opt_list = opts_raw.tokenize('\n') + opts['tree'] = opt_list[0] + opts['git_url'] = opt_list[1] + opts['branch'] = opt_list[2] + } +} + +def scheduleTests(build_job_name, build_job_number, labs, kci_core) { + dir(kci_core) { + def labs_str = "" + for (lab in labs) + labs_str += "${lab} " + + def str_params = [ + 'LABS': labs_str.trim(), + 'TRIGGER_JOB_NAME': env.JOB_NAME, + 'TRIGGER_JOB_NUMBER': env.BUILD_NUMBER, + 'BUILD_JOB_NAME': build_job_name, + 'BUILD_JOB_NUMBER': "${build_job_number}", + ] + def params = [] + + def j = new Job() + j.addStrParams(params, str_params) + build(job: 'test-runner', parameters: params, propagate: false) + } +} + +def buildKernelStep(job, arch, defconfig, build_env, opts, labs, kci_core) { def str_params = [ 'ARCH': arch, 'DEFCONFIG': defconfig, @@ -201,7 +230,12 @@ def buildKernelStep(job, arch, defconfig, build_env, opts) { def j = new Job() j.addStrParams(job_params, str_params) - return { build(job: job, parameters: job_params, propagate: false) } + return { + def res = build(job: job, parameters: job_params, propagate: false) + print("${res.number}: ${arch} ${defconfig} ${build_env} ${res.result}") + if (res.result == "SUCCESS") + scheduleTests(job, res.number, labs, kci_core) + } } def buildsComplete(job, opts, arch) { @@ -229,6 +263,7 @@ node("docker && build-trigger") { def kci_core = "${env.WORKSPACE}/kernelci-core" def kdir = "${env.WORKSPACE}/configs/${params.BUILD_CONFIG}" def mirror = "${env.WORKSPACE}/linux.git" + def labs_info = "${env.WORKSPACE}/labs" def docker_image = "${params.DOCKER_BASE}base" def opts = [:] def configs = [] @@ -238,11 +273,57 @@ node("docker && build-trigger") { Container: ${docker_image}""") j.dockerPullWithRetry(docker_image).inside() { + def labs = [] + stage("Init") { timeout(time: 15, unit: 'MINUTES') { j.cloneKciCore( kci_core, params.KCI_CORE_URL, params.KCI_CORE_BRANCH) } + + sh(script: "rm -rf ${labs_info}; mkdir -p ${labs_info}") + + dir(kci_core) { + def raw_lab_names = sh( + script: "./kci_test list_labs", returnStdout: true).trim() + def all_lab_names = raw_lab_names.tokenize('\n') + def labs_list = [] + + if (params.LABS_WHITELIST) { + def whitelist = params.LABS_WHITELIST.tokenize(' ') + + for (lab in all_lab_names) + if (whitelist.contains(lab)) + labs_list.add(lab) + } else { + labs_list = all_lab_names + } + + for (lab in labs_list) { + def lab_json = "${labs_info}/${lab}.json" + def token = "${lab}-lava-api" + try { + withCredentials([string(credentialsId: token, + variable: 'SECRET')]) { + sh(script: """\ +./kci_test \ +get_lab_info \ +--lab=${lab} \ +--lab-json=${lab_json} \ +--user=kernel-ci \ +--token=${SECRET} \ +""") + } + labs.add(lab) + } catch (error) { + print("Error with ${lab}: ${error}") + } + } + } + + dir(labs_info) { + archiveArtifacts("*.json") + } } if (params.ALLOW_REBUILD != true) { @@ -276,7 +357,8 @@ node("docker && build-trigger") { print(step_name) builds[step_name] = buildKernelStep( - "kernel-build", arch, defconfig, build_env, opts) + "kernel-build", arch, defconfig, build_env, opts, labs, + kci_core) i += 1 } @@ -286,7 +368,8 @@ node("docker && build-trigger") { stage("Complete") { /* ToDo: convert kernel-arch-complete as a stage in this job */ - for (String arch: opts['arch_list']) { + def arch_list = listArchitectures(kci_core, params.BUILD_CONFIG) + for (String arch: arch_list) { buildsComplete("kernel-arch-complete", opts, arch) } } |