jjb: Add jobs for building ci/dev images
[lttng-ci.git] / pipelines / images / default.groovy
diff --git a/pipelines/images/default.groovy b/pipelines/images/default.groovy
new file mode 100644 (file)
index 0000000..615c48f
--- /dev/null
@@ -0,0 +1,88 @@
+#!groovy
+
+def OS = '{{OS}}'
+def RELEASES = {{RELEASES}}
+def ARCHES = {{ARCHES}}
+def IMAGE_TYPES = {{IMAGE_TYPES}}
+def PROFILES = {{PROFILES}}
+def c = [RELEASES,
+         ARCHES,
+         IMAGE_TYPES].combinations()
+c.removeAll({
+    (params.ARCH_FILTER != 'all' && it[1] != params.ARCH_FILTER) ||
+        (params.IMAGE_TYPE_FILTER != 'all' && it[2] != params.IMAGE_TYPE_FILTER) ||
+        (params.RELEASE_FILTER != 'all' && it[0] != params.RELEASE_FILTER)
+})
+
+// Skip i386 Vms
+c.removeAll({
+    it[1] == 'i386' && it[2] == 'vm'
+})
+
+def base_image_tasks = [:]
+def profile_image_tasks = [:]
+for(int index = 0; index < c.size(); index++) {
+    def envMap = [
+        RELEASE: c[index][0],
+        ARCH: c[index][1],
+        IMAGE_TYPE: c[index][2]
+    ]
+    def image_name = "${OS}/${envMap.RELEASE}/${envMap.ARCH}/${envMap.IMAGE_TYPE}"
+    base_image_tasks[image_name] = { ->
+        def job_ids = []
+        stage("base:${image_name}") {
+            print(envMap)
+            build(
+                job: 'images_distrobuilder',
+                parameters: [
+                    string(name: 'OS', value: OS),
+                    string(name: 'RELEASE', value: envMap.RELEASE),
+                    string(name: 'ARCH', value: envMap.ARCH),
+                    string(name: 'IMAGE_TYPE', value: envMap.IMAGE_TYPE),
+                    string(name: 'GIT_URL', value: params.GIT_URL),
+                    string(name: 'GIT_BRANCH', value: params.GIT_BRANCH)
+                ]
+            )
+        }
+    }
+    for (int profile_index = 0; profile_index < PROFILES.size(); profile_index++) {
+        // Using a second map gets around some weirdness with the closures finding
+        // PROFILES[profile_index] where most jobs would have a null value for the
+        // profile
+        def envMap2 = envMap.clone()
+        envMap2.PROFILE = PROFILES[profile_index]
+        if (env.PROFILE_FILTER == 'all' || env.PROFILE_FILTER == PROFILES[profile_index]) {
+            profile_image_tasks["${PROFILES[profile_index]}:${image_name}"] = { ->
+                print(envMap2)
+                build(
+                    job: 'images_imagebuilder',
+                    parameters: [
+                        string(name: 'OS', value: OS),
+                        string(name: 'RELEASE', value: envMap2.RELEASE),
+                        string(name: 'ARCH', value: envMap2.ARCH),
+                        string(name: 'IMAGE_TYPE', value: envMap2.IMAGE_TYPE),
+                        string(name: 'PROFILE', value:  envMap2.PROFILE),
+                        string(name: 'GIT_URL', value: params.GIT_URL),
+                        string(name: 'GIT_BRANCH', value: params.GIT_BRANCH)
+                    ]
+                )
+            }
+        }
+    }
+}
+
+if (!params.SKIP_BASE_IMAGES) {
+    stage("base images") {
+        parallel(base_image_tasks)
+    }
+}
+
+if (!params.SKIP_PROFILE_IMAGES) {
+    // While it's possible to have the tasks in "base images" start
+    // their respective profile images_imagebuilder steps, it ends
+    // up creating a pipeline overview and log that is difficult to
+    // read in the Jenkins interface.
+    stage("profile images") {
+        parallel(profile_image_tasks)
+    }
+}
This page took 0.023159 seconds and 4 git commands to generate.