aboutsummaryrefslogtreecommitdiff
path: root/jenkins/dispatch.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'jenkins/dispatch.groovy')
-rw-r--r--jenkins/dispatch.groovy132
1 files changed, 78 insertions, 54 deletions
diff --git a/jenkins/dispatch.groovy b/jenkins/dispatch.groovy
index f48022e..4f5551b 100644
--- a/jenkins/dispatch.groovy
+++ b/jenkins/dispatch.groovy
@@ -1,14 +1,15 @@
// Parameters inherited from the calling script via environment injection.
//----------------------------------------------------------------------------
-// MANIFEST_FILE - The "release" type; list of recipes/packages to build
-// LABEL - Node or logical group of build nodes
-// PY_VERSION - Python version hosted by conda to support the build
-// BUILD_CONTROL_REPO - Repository holding this & other build system files,
-// and manifest files
-// CONDA_VERSION - First, then the version is forced to this value.
-// CONDA_BUILD_VERSION - Conda-build is installed forced to this version.
-// CONDA_BASE_URL - Where to get the conda installer
-// UTILS_REPO - Repository holding support utilities
+// MANIFEST_FILE - The "release" type; list of recipes/packages to build
+// LABEL - Node or logical group of build nodes
+// PY_VERSION - Python version hosted by conda to support the build
+// BUILD_CONTROL_REPO - Repository holding this & other build system files,
+// and manifest files
+// BUILD_CONTROL_BRANCH - Branch to obtain from build control repo
+// CONDA_VERSION - First, then the version is forced to this value.
+// CONDA_BUILD_VERSION - Conda-build is installed forced to this version.
+// CONDA_BASE_URL - Where to get the conda installer
+// UTILS_REPO - Repository holding support utilities
// Directories to create within the workspace
this.utils_dir = "utils"
@@ -26,59 +27,104 @@ node(LABEL) {
def uname = sh(script: "uname", returnStdout: true).trim()
if (uname == "Darwin") {
this.OSname = "MacOSX"
+ this.OSdesc = "MacOS"
+ this.OSversion = sh(script: "sw_vers -productVersion", returnStdout: true).trim()
env.PATH = "${env.PATH}:/sw/bin"
this.CONDA_PLATFORM = "osx-64"
}
if (uname == "Linux") {
this.OSname = uname
+ this.OSdesc = sh(script: "lsb_release -i",
+ returnStdout: true).trim().tokenize()[2]
+ this.OSversion = sh(script: "lsb_release -r",
+ returnStdout: true).trim().tokenize()[1]
this.CONDA_PLATFORM = "linux-64"
}
assert uname != null
- println("NODE_NAME = ${env.NODE_NAME}")
-
// Delete any existing job workspace directory contents.
// The directory deleted is the one named after the jenkins pipeline job.
deleteDir()
+ // Get the manifest and build control files
+ git branch: BUILD_CONTROL_BRANCH, url: BUILD_CONTROL_REPO
+
+ this.manifest = readYaml file: "manifests/${MANIFEST_FILE}"
+ if (this.manifest.channel_URL[-1..-1] == "/") {
+ this.manifest.channel_URL = this.manifest.channel_URL[0..-2]
+ }
+
// Allow for sharing build_list between stages below.
this.build_list = []
- stage("Setup") {
+ stage("Summary") {
+ def time = new Date()
+ def manifest_pkg_txt = ""
+ for (pkgname in this.manifest.packages) {
+ manifest_pkg_txt = "${manifest_pkg_txt}${pkgname}\n"
+ }
+ println("\n" +
+ " Build Info Summary:\n" +
+ "${time}\n" +
+ "JOB_DEF_GENERATION_TIME: ${JOB_DEF_GENERATION_TIME}\n" +
+ "OSname: ${this.OSname}\n" +
+ "OSDesc: ${this.OSdesc}\n" +
+ "OSverion: ${this.OSversion}\n" +
+ "script: dispatch.groovy\n" +
+ "env.WORKSPACE: ${env.WORKSPACE}\n" +
+ " Job suite parameters:\n" +
+ "LABEL: ${LABEL}\n" +
+ "env.NODE_NAME: ${env.NODE_NAME}\n" +
+ "PY_VERSION: ${PY_VERSION}\n" +
+ "MANIFEST_FILE: ${MANIFEST_FILE}\n" +
+ "PATH: ${PATH}\n" +
+ "CONDA_VERSION: ${CONDA_VERSION}\n" +
+ "CONDA_BUILD_VERSION: ${CONDA_BUILD_VERSION}\n" +
+ "CONDA_BASE_URL: ${CONDA_BASE_URL}\n" +
+ "BUILD_CONTROL_REPO: ${BUILD_CONTROL_REPO}\n" +
+ "BUILD_CONTROL_BRANCH: ${BUILD_CONTROL_BRANCH}\n" +
+ "UTILS_REPO: ${UTILS_REPO}\n" +
+ " Trigger parameters:\n" +
+ "this.cull_manifest: ${this.cull_manifest}\n" +
+ " Manifest values:\n" +
+ "Recipe repository: ${this.manifest.repository}\n" +
+ "Numpy version spec: ${this.manifest.numpy_version}\n" +
+ "Channel URL: ${this.manifest.channel_URL}\n" +
+ "Package list:\n${manifest_pkg_txt}")
+ }
+ stage("Setup") {
// Inherited from env() assignment performed in the generator
// DSL script.
- println "LABEL = ${LABEL}"
assert LABEL != null
assert LABEL != "label-DEFAULTVALUE"
// Inherited from env() assignment performed in the generator
// DSL script.
- println("PY_VERSION = ${PY_VERSION}")
assert PY_VERSION != null
assert PY_VERSION != "py_version-DEFAULTVALUE"
this.py_maj_version = "${PY_VERSION.tokenize(".")[0]}"
// Inherited from env() assignment performed in the generator
// DSL script.
- println("MANIFEST_FILE = ${MANIFEST_FILE}")
assert MANIFEST_FILE != null
assert MANIFEST_FILE != "manifest_file-DEFAULTVALUE"
- if (CONDA_BASE_URL[-1..-1] == "/") {
- CONDA_BASE_URL = [0..-2]
+ // Get conda recipes
+ dir(this.recipes_dir) {
+ git url: this.manifest.repository
}
- // Parameters passed at trigger time
- println("this.cull_manifest: ${this.cull_manifest}")
-
- println("PATH = ${env.PATH}")
-
- // Fetch the manifest files
- git branch: BUILD_CONTROL_BRANCH, url: BUILD_CONTROL_REPO
+ // Get build utilities
+ dir(this.utils_dir) {
+ git url: UTILS_REPO
+ }
// Check for the availability of a download tool and then use it
// to get the conda installer.
+ if (CONDA_BASE_URL[-1..-1] == "/") {
+ CONDA_BASE_URL = [0..-2]
+ }
def dl_cmds = ["wget --no-verbose --server-response --no-check-certificate",
"curl -OSs"]
def dl_cmd = null
@@ -100,67 +146,45 @@ node(LABEL) {
dl_cmd = dl_cmd + " ${CONDA_BASE_URL}/${conda_installer}"
sh dl_cmd
- // Run miniconda installer and then force to particular version
+ // Install specific versions of miniconda and conda-build
sh "bash ./${conda_installer} -b -p miniconda"
env.PATH = "${env.WORKSPACE}/miniconda/bin/:${env.PATH}"
sh "conda install --quiet conda=${CONDA_VERSION}"
sh "conda install --quiet --yes conda-build=${CONDA_BUILD_VERSION}"
// Apply bugfix patch to conda_build 2.1.1
- def filename = "${env.WORKSPACE}/miniconda/lib/python${PY_VERSION}/site-packages/conda_build/config.py"
+ def filename = "${env.WORKSPACE}/miniconda/lib/python${PY_VERSION}/" +
+ "site-packages/conda_build/config.py"
def patches_dir = "${env.WORKSPACE}/patches"
def patchname = "conda_build_2.1.1_substr_fix_py${this.py_maj_version}.patch"
def full_patchname = "${patches_dir}/${patchname}"
sh "patch ${filename} ${full_patchname}"
- this.manifest = readYaml file: "manifests/${MANIFEST_FILE}"
- if (this.manifest.channel_URL[-1..-1] == "/") {
- this.manifest.channel_URL = this.manifest.channel_URL[0..-2]
- }
- println("Manifest repository: ${this.manifest.repository}")
- println("Manifest numpy version specification: " +
- "${this.manifest.numpy_version}")
- println("Manifest channel_URL: ${this.manifest.channel_URL}")
- println("Manifest packages to build:")
- for (pkgname in this.manifest.packages) {
- println(pkgname)
- }
-
- // Retrieve conda recipes
- dir(this.recipes_dir) {
- git url: this.manifest.repository
- }
}
stage("Generate build list") {
- // Obtain build utilities
- dir(this.utils_dir) {
- git url: UTILS_REPO
- }
-
// Generate a filtered, optionally culled, & dependency-ordered list
// of available package recipes.
def culled_option = "--culled"
if (this.cull_manifest == "false") {
culled_option = ""
}
- def blist_file = "build_list"
+ def build_list_file = "build_list"
cmd = "${this.utils_dir}/rambo.py"
args = ["--platform ${this.CONDA_PLATFORM}",
"--python ${PY_VERSION}",
"--manifest manifests/${MANIFEST_FILE}",
- "--file ${blist_file}",
+ "--file ${build_list_file}",
"${culled_option}",
this.recipes_dir]
for (arg in args) {
cmd = "${cmd} ${arg}"
}
sh(script: cmd)
-
- def blist_text = readFile blist_file
- this.build_list = blist_text.trim().tokenize()
+ def build_list_text = readFile build_list_file
+ this.build_list = build_list_text.trim().tokenize()
println("Build list:")
- println(this.build_list)
+ println(build_list_text)
}
stage("Build packages") {