aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jenkins/generator_DSL.groovy206
-rw-r--r--jenkins/job-suite-generator.groovy4
2 files changed, 112 insertions, 98 deletions
diff --git a/jenkins/generator_DSL.groovy b/jenkins/generator_DSL.groovy
index f74275c..7dd10ea 100644
--- a/jenkins/generator_DSL.groovy
+++ b/jenkins/generator_DSL.groovy
@@ -6,20 +6,9 @@ import org.yaml.snakeyaml.Yaml
def yaml = new Yaml()
def config = yaml.load(readFileFromWorkspace("manifests/${manifest_file}"))
-def job_def_generation_time = new Date()
+def job_def_generation_time = new Date()
-//-----------------------------------------------------------------------
-// Create a folder to contain the jobs which are created below.
-
-suite_name = "${manifest_file.tokenize(".")[0]}_${label}_py${py_version}"
-folder(suite_name)
-
-
-//-----------------------------------------------------------------------
-// Generate the dispatch job that will trigger the chain of package
-// build jobs.
-
this.script = "dispatch.groovy"
this.build_control_repo = readFileFromWorkspace("VAR-build_control_repo")
@@ -27,93 +16,118 @@ this.build_control_repo = this.build_control_repo.trim()
this.build_control_branch = readFileFromWorkspace("VAR-build_control_branch")
this.build_control_branch= this.build_control_branch.trim()
-pipelineJob("${suite_name}/_${script.tokenize(".")[0]}") {
- // At trigger-time, allow for setting manifest culling behavior.
- parameters {
- booleanParam("cull_manifest",
- true,
- "Whether or not package recipes that would generate a " +
- "package file name that already exists in the manfest's" +
- " channel archive are removed from the build list.")
- }
- println("\n" +
- "script: ${this.script}\n" +
- "MANIFEST_FILE: ${manifest_file}\n" +
- "LABEL: ${label}\n" +
- "PY_VERSION: ${py_version}\n" +
- "BUILD_CONTROL_REPO: ${build_control_repo}\n" +
- "BUILD_CONTROL_BRANCH: ${build_control_branch}\n" +
- "CONDA_VERSION: ${conda_version}\n" +
- "CONDA_BUILD_VERSION: ${conda_build_version}\n" +
- "CONDA_BASE_URL: ${conda_base_URL}\n" +
- "UTILS_REPO: ${utils_repo}\n")
- environmentVariables {
- env("JOB_DEF_GENERATION_TIME", job_def_generation_time)
- env("SCRIPT", this.script)
- env("MANIFEST_FILE", manifest_file)
- env("LABEL", label)
- env("PY_VERSION", py_version)
- env("BUILD_CONTROL_REPO", build_control_repo)
- env("BUILD_CONTROL_BRANCH", build_control_branch)
- env("CONDA_VERSION", conda_version)
- env("CONDA_BUILD_VERSION", conda_build_version)
- env("CONDA_BASE_URL", conda_base_URL)
- env("UTILS_REPO", utils_repo)
- }
- definition {
- cps {
- script(readFileFromWorkspace("jenkins/${this.script}"))
- sandbox()
+// For each label (OS) in the list provided by the 'labels' job parameter, iterate
+// over each python version provided by the 'py_versions' job parameter, to obtain
+// every combination of OS and python version. Generate a separate job suite for
+// each combination.
+for (label in labels.trim().tokenize()) {
+ for (py_version in py_versions.trim().tokenize()) {
+
+ //-----------------------------------------------------------------------
+ // Create a folder to contain the jobs which are created below.
+
+ suite_name = "${manifest_file.tokenize(".")[0]}_${label}_py${py_version}"
+ folder(suite_name) {
+ description("Build suite generated: ${job_def_generation_time}\n" +
+ "build control repo: ${build_control_repo}\n" +
+ "build control branch/tag: ${build_control_branch}\n" +
+ "conda version: ${conda_version}\n" +
+ "conda-build version: ${conda_build_version}\n" +
+ "utils_repo: ${utils_repo}")
}
- }
-}
-
-
-//-----------------------------------------------------------------------
-// Generate the series of actual package building jobs.
-for(pkg in config.packages) {
-
- pipelineJob("${suite_name}/${pkg}") {
- environmentVariables {
- env("JOB_DEF_GENERATION_TIME", job_def_generation_time)
- }
- parameters {
- stringParam("label",
- "label-DEFAULTVALUE",
- "The node on which to run.")
- stringParam("build_control_repo",
- "build_control_repo-DEFAULTVALUE",
- "Repository containing the build system scripts.")
- stringParam("build_control_branch",
- "build_control_branch-DEFAULTVALUE",
- "Branch checked out to obtain build system scripts.")
- stringParam("py_version",
- "py_version-DEFAULTVALUE",
- "python version to use")
- stringParam("numpy_version",
- "numpy_version-DEFAULTVALUE",
- "Version of numpy to use")
- stringParam("parent_workspace",
- "parent_workspace-DEFAULTVALUE",
- "The workspace dir of the dispatch job")
- stringParam("manifest_file",
- "manifest_file-DEFAULTVALUE",
- "Manifest (release) file to use for the build.")
- stringParam("cull_manifest",
- "cull_manifest-DEFAULTVALUE",
- "Was the manifest culled as part of dispatch?")
- stringParam("channel_URL",
- "channel_URL-DEFAULTVALUE",
- "Publication channel used for culled builds.")
- }
- definition {
- cps {
- script(readFileFromWorkspace("jenkins/package_builder.groovy"))
- sandbox()
+ //-----------------------------------------------------------------------
+ // Generate the dispatch job that will trigger the chain of package
+ // build jobs.
+ pipelineJob("${suite_name}/_${script.tokenize(".")[0]}") {
+ // At trigger-time, allow for setting manifest culling behavior.
+ parameters {
+ booleanParam("cull_manifest",
+ true,
+ "Whether or not package recipes that would generate a " +
+ "package file name that already exists in the manfest's" +
+ " channel archive are removed from the build list.")
+ }
+ println("\n" +
+ "script: ${this.script}\n" +
+ "MANIFEST_FILE: ${manifest_file}\n" +
+ "LABEL: ${label}\n" +
+ "PY_VERSION: ${py_version}\n" +
+ "BUILD_CONTROL_REPO: ${build_control_repo}\n" +
+ "BUILD_CONTROL_BRANCH: ${build_control_branch}\n" +
+ "CONDA_VERSION: ${conda_version}\n" +
+ "CONDA_BUILD_VERSION: ${conda_build_version}\n" +
+ "CONDA_BASE_URL: ${conda_base_URL}\n" +
+ "UTILS_REPO: ${utils_repo}\n")
+ environmentVariables {
+ env("JOB_DEF_GENERATION_TIME", job_def_generation_time)
+ env("SCRIPT", this.script)
+ env("MANIFEST_FILE", manifest_file)
+ env("LABEL", label)
+ env("PY_VERSION", py_version)
+ env("BUILD_CONTROL_REPO", build_control_repo)
+ env("BUILD_CONTROL_BRANCH", build_control_branch)
+ env("CONDA_VERSION", conda_version)
+ env("CONDA_BUILD_VERSION", conda_build_version)
+ env("CONDA_BASE_URL", conda_base_URL)
+ env("UTILS_REPO", utils_repo)
+ }
+ definition {
+ cps {
+ script(readFileFromWorkspace("jenkins/${this.script}"))
+ sandbox()
+ }
}
}
- } // end pipelineJob
-} //end for(pkg...
+ //-----------------------------------------------------------------------
+ // Generate the series of actual package building jobs.
+
+ for(pkg in config.packages) {
+
+ pipelineJob("${suite_name}/${pkg}") {
+ environmentVariables {
+ env("JOB_DEF_GENERATION_TIME", job_def_generation_time)
+ }
+ parameters {
+ stringParam("label",
+ "label-DEFAULTVALUE",
+ "The node on which to run.")
+ stringParam("build_control_repo",
+ "build_control_repo-DEFAULTVALUE",
+ "Repository containing the build system scripts.")
+ stringParam("build_control_branch",
+ "build_control_branch-DEFAULTVALUE",
+ "Branch checked out to obtain build system scripts.")
+ stringParam("py_version",
+ "py_version-DEFAULTVALUE",
+ "python version to use")
+ stringParam("numpy_version",
+ "numpy_version-DEFAULTVALUE",
+ "Version of numpy to use")
+ stringParam("parent_workspace",
+ "parent_workspace-DEFAULTVALUE",
+ "The workspace dir of the dispatch job")
+ stringParam("manifest_file",
+ "manifest_file-DEFAULTVALUE",
+ "Manifest (release) file to use for the build.")
+ stringParam("cull_manifest",
+ "cull_manifest-DEFAULTVALUE",
+ "Was the manifest culled as part of dispatch?")
+ stringParam("channel_URL",
+ "channel_URL-DEFAULTVALUE",
+ "Publication channel used for culled builds.")
+ }
+ definition {
+ cps {
+ script(readFileFromWorkspace("jenkins/package_builder.groovy"))
+ sandbox()
+ }
+ }
+ } // end pipelineJob
+
+ } //end for(pkg...
+
+ } // end for(py_version
+} // end for(label
diff --git a/jenkins/job-suite-generator.groovy b/jenkins/job-suite-generator.groovy
index 1501b69..c53ec2e 100644
--- a/jenkins/job-suite-generator.groovy
+++ b/jenkins/job-suite-generator.groovy
@@ -59,8 +59,8 @@ node("master") {
"build_control_branch: ${build_control_branch}\n" +
" Parameters:\n" +
"manifest_file: ${this.manifest_file}\n" +
- "label: ${this.label}\n" +
- "py_version: ${this.py_version}\n" +
+ "labels: ${this.labels}\n" +
+ "py_versions: ${this.py_versions}\n" +
"conda_version: ${this.conda_version}\n" +
"conda_build_version: ${this.conda_build_version}\n" +
"conda_base_URL: ${this.conda_base_URL}\n" +