This is an automated email from the ASF dual-hosted git repository.

olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new e4f68f037d [MNG-7848] Add Jenkinsfile.s390x for Jenkins CI on s390x 
(#1266)
e4f68f037d is described below

commit e4f68f037d3db41ce71c054fea62f79aa371d45d
Author: Vivian Kong <[email protected]>
AuthorDate: Wed Oct 4 21:46:41 2023 -0400

    [MNG-7848] Add Jenkinsfile.s390x for Jenkins CI on s390x (#1266)
---
 Jenkinsfile.s390x | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 162 insertions(+)

diff --git a/Jenkinsfile.s390x b/Jenkinsfile.s390x
new file mode 100644
index 0000000000..2ffa7f5dee
--- /dev/null
+++ b/Jenkinsfile.s390x
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+properties([buildDiscarder(logRotator(artifactNumToKeepStr: '5', numToKeepStr: 
env.BRANCH_NAME=='master'?'5':'1'))])
+
+def buildOs = 'linux'
+def buildJdk = '8'
+def buildMvn = '3.8.x'
+def runITsOses = ['linux']
+def runITsJdks = ['11', '17']
+def runITsMvn = '3.8.x'
+def runITscommand = "mvn clean install -Prun-its,embedded -B -U -V" // 
-DmavenDistro=... -Dmaven.test.failure.ignore=true
+def tests
+
+try {
+
+def osNode = jenkinsEnv.labelForOS(buildOs)
+node('s390x') {
+    dir('build') {
+        stage('Checkout') {
+            checkout scm
+        }
+
+        def WORK_DIR=pwd()
+        def MAVEN_GOAL='verify'
+
+        stage('Build / Unit Test') {
+            String jdkName = jenkinsEnv.jdkFromVersion(buildOs, buildJdk)
+            jdkName = "ibm-semeru-8u362-b09"
+            String mvnName = jenkinsEnv.mvnFromVersion(buildOs, buildMvn)
+            try {
+                withEnv(["JAVA_HOME=${ tool "$jdkName" }",
+                         "PATH+MAVEN=${ tool "$jdkName" }/bin:${tool 
"$mvnName"}/bin",
+                         "MAVEN_OPTS=-Xms2g -Xmx4g -Djava.awt.headless=true"]) 
{                   
+                    sh "mvn clean ${MAVEN_GOAL} -B -U -e -fae -V 
-Dmaven.test.failure.ignore -PversionlessMavenDist 
-Dmaven.repo.local=${WORK_DIR}/.repository"
+                }
+            } finally {
+                junit testResults: 
'**/target/surefire-reports/*.xml,**/target/failsafe-reports/*.xml', 
allowEmptyResults: true
+            }    
+            dir ('apache-maven/target') {
+                stash includes: 'apache-maven-bin.zip', name: 
'maven-dist-s390x'
+            }
+        }
+    }
+}
+
+Map runITsTasks = [:]
+for (String os in runITsOses) {
+    for (def jdk in runITsJdks) {
+        String osLabel = jenkinsEnv.labelForOS(os);
+        String jdkName = jenkinsEnv.jdkFromVersion(os, "${jdk}")
+        String mvnName = jenkinsEnv.mvnFromVersion(os, "${runITsMvn}")
+        echo "OS: ${os} JDK: ${jdk} => Label: ${osLabel} JDK: ${jdkName} Arch: 
s390x"
+
+        String stageId = "${os}-jdk${jdk}-s390x"
+        String stageLabel = "Run ITs ${os.capitalize()} Java ${jdk} on s390x"
+        runITsTasks[stageId] = {
+            node('s390x') {
+                stage("${stageLabel}") {
+                    echo "NODE_NAME = ${env.NODE_NAME}"
+                    // on Windows, need a short path or we hit 256 character 
limit for paths
+                    // using EXECUTOR_NUMBER guarantees that concurrent builds 
on same agent
+                    // will not trample each other plus workaround for 
JENKINS-52657
+                    dir(isUnix() ? 'test' : 
"c:\\mvn-it-${EXECUTOR_NUMBER}.tmp") {
+                        def WORK_DIR=pwd()
+                        checkout([$class: 'GitSCM',
+                                branches: [[name: "*/master"]],
+                                extensions: [[$class: 'CloneOption', depth: 1, 
noTags: true, shallow: true]],
+                                userRemoteConfigs: [[url: 
'https://github.com/apache/maven-integration-testing.git']]])                   
     
+                        if (isUnix()) {
+                            sh "rm -rvf $WORK_DIR/dists 
$WORK_DIR/it-local-repo"
+                        } else {
+                            bat "if exist it-local-repo rmdir /s /q 
it-local-repo"
+                            bat "if exist dists         rmdir /s /q dists"
+                        }
+                        dir('dists') {
+                          unstash 'maven-dist-s390x'
+                        }
+                        try {
+                            withEnv(["JAVA_HOME=${ tool "$jdkName" }",
+                                        "PATH+MAVEN=${ tool "$jdkName" 
}/bin:${tool "$mvnName"}/bin",
+                                        "MAVEN_OPTS=-Xms2g -Xmx4g 
-Djava.awt.headless=true"]) {                                               
+                                String cmd = "${runITscommand} 
-Dmaven.repo.local=$WORK_DIR/it-local-repo 
-DmavenDistro=$WORK_DIR/dists/apache-maven-bin.zip -Dmaven.test.failure.ignore"
+
+                                if (isUnix()) {
+                                    sh 'df -hT'
+                                    sh "${cmd}"
+                                } else {
+                                    bat 'wmic logicaldisk get 
size,freespace,caption'
+                                    bat "${cmd}"
+                                }
+                            }
+                        } finally {
+                            // in ITs test we need only reports from test 
itself
+                            // test projects can contain reports with tested 
failed builds
+                            junit testResults: 
'**/core-it-suite/target/surefire-reports/*.xml,**/core-it-support/**/target/surefire-reports/*.xml',
 allowEmptyResults: true
+                            archiveDirs(stageId, 
['core-it-suite-logs':'core-it-suite/target/test-classes',
+                                                  
'core-it-suite-reports':'core-it-suite/target/surefire-reports'])
+                            deleteDir() // clean up after ourselves to reduce 
disk space
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+// run the parallel ITs
+parallel(runITsTasks)
+
+// JENKINS-34376 seems to make it hard to detect the aborted builds
+} catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
+    echo "[FAILURE-002] FlowInterruptedException ${e}"
+    // this ambiguous condition means a user probably aborted
+    if (e.causes.size() == 0) {
+        currentBuild.result = "ABORTED"
+    } else {
+        currentBuild.result = "FAILURE"
+    }
+    throw e
+} catch (hudson.AbortException e) {
+    echo "[FAILURE-003] AbortException ${e}"
+    // this ambiguous condition means during a shell step, user probably 
aborted
+    if (e.getMessage().contains('script returned exit code 143')) {
+        currentBuild.result = "ABORTED"
+    } else {
+        currentBuild.result = "FAILURE"
+    }
+    throw e
+} catch (InterruptedException e) {
+    echo "[FAILURE-004] ${e}"
+    currentBuild.result = "ABORTED"
+    throw e
+} catch (Throwable e) {
+    echo "[FAILURE-001] ${e}"
+    currentBuild.result = "FAILURE"
+    throw e
+}
+
+def archiveDirs(stageId, archives) {
+    archives.each { archivePrefix, pathToContent ->
+        if (fileExists(pathToContent)) {
+            zip(zipFile: "${archivePrefix}-${stageId}.zip", dir: 
pathToContent, archive: true)
+        }
+    }
+}

Reply via email to