From dcb74ed6ed9150226828a14155a0c8149859fd8f Mon Sep 17 00:00:00 2001
From: Piotr Fus <piotr.fus@snowflake.com>
Date: Thu, 30 Nov 2023 10:59:46 +0100
Subject: [PATCH] SNOW-937199 Use JDK 11 and 17 in Jenkins (#1564)

---
 Jenkinsfile | 79 ++++++++++++++++++++++++++++++++---------------------
 1 file changed, 48 insertions(+), 31 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index a18d9ebdb..5c62291a8 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,5 +1,12 @@
 import groovy.json.JsonOutput
 
+class JdbcJobDefinition {
+  String jdk
+  List params
+  String jobToRun
+  String runName
+}
+
 pipeline {
   // TODO Please migrate this to C7 as sfc-dev2 servers do not support c6 nodes
   agent { label 'regular-memory-node' }
@@ -23,7 +30,6 @@ pipeline {
 }
 
 timestamps {
-  // TODO Please migrate this to C7 as sfc-dev2 servers do not support c6 nodes
   node('regular-memory-node') {
     stage('checkout') {
       scmInfo = checkout scm
@@ -40,39 +46,50 @@ timestamps {
       '''.stripMargin()
     }
 
-    params = [
-      string(name: 'client_git_branch', value: scmInfo.GIT_BRANCH),
-      string(name: 'client_git_commit', value: scmInfo.GIT_COMMIT),
-      string(name: 'branch', value: 'main'),
-      string(name: 'TARGET_DOCKER_TEST_IMAGE', value: 'jdbc-centos6-default'),
-      string(name: 'parent_job', value: env.JOB_NAME),
-      string(name: 'parent_build_number', value: env.BUILD_NUMBER),
-      string(name: 'timeout_value', value: '420'),
-      string(name: 'PR_Key', value: scmInfo.GIT_BRANCH.substring(3))
-    ]
-    stage('Test') {
-      try {
-        def commit_hash = "main" // default which we want to override
-        def bptp_tag = "bptp-built"
+    def commit_hash = "main" // default which we want to override
+    def bptp_tag = "bptp-built"
+    try {
         def response = authenticatedGithubCall("https://api.github.com/repos/snowflakedb/snowflake/git/ref/tags/${bptp_tag}")
         commit_hash = response.object.sha
-        // Append the bptp-built commit sha to params
-        params += [string(name: 'svn_revision', value: commit_hash)]
-      } catch(Exception e) {
-        println("Exception computing commit hash from: ${response}")
+    } catch (Exception e) {
+      println("error when calling Github API: ${e.message}")
+      e.printStackTrace()
+    }
+
+    jdkToParams = ['openjdk8': 'jdbc-centos7-openjdk8', 'openjdk11': 'jdbc-centos7-openjdk11', 'openjdk17': 'jdbc-centos7-openjdk17'].collectEntries { jdk, image ->
+      return [(jdk): [
+        string(name: 'client_git_branch', value: scmInfo.GIT_BRANCH),
+        string(name: 'client_git_commit', value: scmInfo.GIT_COMMIT),
+        string(name: 'branch', value: 'main'),
+        string(name: 'TARGET_DOCKER_TEST_IMAGE', value: image),
+        string(name: 'parent_job', value: env.JOB_NAME),
+        string(name: 'parent_build_number', value: env.BUILD_NUMBER),
+        string(name: 'timeout_value', value: '420'),
+        string(name: 'PR_Key', value: scmInfo.GIT_BRANCH.substring(3)),
+        string(name: 'svn_revision', value: commit_hash)
+      ]]
+    }
+
+    jobDefinitions = jdkToParams.collectMany { jdk, params ->
+      return [
+        'RT-LanguageJDBC1-PC' : "Test JDBC 1 - $jdk",
+        'RT-LanguageJDBC2-PC' : "Test JDBC 2 - $jdk",
+        'RT-LanguageJDBC3-PC' : "Test JDBC 3 - $jdk",
+        'RT-LanguageJDBC4-PC' : "Test JDBC 4 - $jdk",
+        'RT-LanguageJDBC-CodeCoverage-PC' : "CodeCoverage JDBC - $jdk"
+      ].collect { jobToRun, runName ->
+        return new JdbcJobDefinition(
+          jdk: jdk,
+          params: params,
+          jobToRun: jobToRun,
+          runName: runName
+        )
       }
-      parallel (
-        'Test JDBC 1': { build job: 'RT-LanguageJDBC1-PC',parameters: params
-            },
-        'Test JDBC 2': { build job: 'RT-LanguageJDBC2-PC',parameters: params
-            },
-        'Test JDBC 3': { build job: 'RT-LanguageJDBC3-PC',parameters: params
-            },
-        'Test JDBC 4': { build job: 'RT-LanguageJDBC4-PC',parameters: params
-            },
-        'CodeCoverage JDBC': { build job: 'RT-LanguageJDBC-CodeCoverage-PC',parameters: params
-            }
-      )
+    }.collectEntries { jobDefinition ->
+      return [(jobDefinition.runName): { build job: jobDefinition.jobToRun, parameters: jobDefinition.params }]
+    }
+    stage('Test') {
+      parallel (jobDefinitions)
     }
   }
 }