You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2024/04/08 11:33:13 UTC
(camel) 03/14: Martix Jenkins pipeline for CI/CD.
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch devel-camel-20383
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8e3656385a3ce231b163545424d12aa9cba2a662
Author: Vaishnavi R <va...@var-thinkpadp1gen4i.remote.csb>
AuthorDate: Thu Mar 28 14:42:37 2024 +0530
Martix Jenkins pipeline for CI/CD.
---
Jenkinsfile.matrix.jdk | 115 +++++++++++++++++++++++++++++++++++++
Jenkinsfile.matrix.node | 147 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 262 insertions(+)
diff --git a/Jenkinsfile.matrix.jdk b/Jenkinsfile.matrix.jdk
new file mode 100644
index 00000000000..c68d0073a6a
--- /dev/null
+++ b/Jenkinsfile.matrix.jdk
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ */
+def AGENT_LABEL = env.AGENT_LABEL ?: 'ubuntu'
+//def JDK_NAME = env.JDK_NAME ?: 'jdk_17_latest'
+
+def MAVEN_PARAMS = "-B -e -fae -V -Dnoassembly -Dmaven.compiler.fork=true -Dsurefire.rerunFailingTestsCount=2 -Dfailsafe.rerunFailingTestsCount=1"
+def MAVEN_TEST_PARAMS = env.MAVEN_TEST_PARAMS ?: "-Dci.env.name=apache.org"
+
+pipeline {
+
+ agent {
+ label AGENT_LABEL
+ }
+
+ environment {
+ MAVEN_SKIP_RC = true
+ }
+
+ options {
+ buildDiscarder(
+ logRotator(artifactNumToKeepStr: '5', numToKeepStr: '10')
+ )
+ disableConcurrentBuilds()
+ }
+
+ parameters {
+ booleanParam(name: 'CLEAN', defaultValue: true, description: 'Perform the build in clean workspace'),
+ choice(name: 'JDK_FILTER', choices: ['all', 'jdk_17_latest', 'jdk_21_latest'], description: 'Run on specific jdk')
+ }
+ stages {
+ stage('BuildAndTest') {
+ matrix {
+ when { anyOf {
+ expression { params.JDK_FILTER == 'all' }
+ expression { params.JDK_FILTER == env.JDK_NAME }
+ } }
+ axes {
+ axis {
+ name 'JDK_NAME'
+ values 'jdk_17_latest', 'jdk_21_latest'
+ }
+ }
+ tools {
+ jdk ${JDK_NAME}
+ }
+ stages {
+ stage('Clean workspace') {
+ when {
+ expression { params.CLEAN }
+ }
+ steps {
+ sh 'git clean -fdx'
+ }
+ }
+
+ stage('Build & Install') {
+ steps {
+ echo "Do Build for ${JDK_NAME}"
+ sh 'java -version'
+ sh "./mvnw -U $MAVEN_PARAMS -Dskip.camel.maven.plugin.tests -Darchetype.test.skip -Dmaven.test.skip.exec=true clean install"
+ }
+ }
+
+ stage('Code Quality Review') {
+ steps {
+ withCredentials([string(credentialsId: 'apache-camel-core', variable: 'SONAR_TOKEN')]) {
+ sh "./mvnw $MAVEN_PARAMS -Dsonar.host.url=https://sonarcloud.io -Dsonar.java.experimental.batchModeSizeInKB=2048 -Dsonar.organization=apache -Dsonar.projectKey=apache_camel -Dsonar.branch.name=$BRANCH_NAME org.sonarsource.scanner.maven:sonar-maven-plugin:sonar"
+ }
+ }
+ }
+
+ stage('Test') {
+ steps {
+ echo "Do Test for ${JDK_NAME}"
+ sh 'java -version'
+ timeout(unit: 'HOURS', time: 7) {
+ sh "./mvnw $MAVEN_PARAMS $MAVEN_TEST_PARAMS -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify"
+ }
+ }
+ post {
+ always {
+ junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
+ junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/*.xml'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ post {
+ always {
+ emailext(
+ subject: '${DEFAULT_SUBJECT}',
+ body: '${DEFAULT_CONTENT}',
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/Jenkinsfile.matrix.node b/Jenkinsfile.matrix.node
new file mode 100644
index 00000000000..f7fea84d4fb
--- /dev/null
+++ b/Jenkinsfile.matrix.node
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ */
+//def AGENT_LABEL = 'ppc64le'
+//def JDK_NAME = env.JDK_NAME ?: 'jdk_17_latest'
+
+def MAVEN_PARAMS = "-B -e -fae -V -Dnoassembly -Dmaven.compiler.fork=true -Dsurefire.rerunFailingTestsCount=2 -Dfailsafe.rerunFailingTestsCount=1"
+def MAVEN_TEST_PARAMS = env.MAVEN_TEST_PARAMS ?: "-Dkafka.instance.type=local-strimzi-container -Dci.env.name=apache.org"
+/*
+Below parameters are required for camel/core/camel-core module's test cases to pass
+- xpathExprGrpLimit: limits the number of groups an Xpath expression can contain
+- xpathExprOpLimit: limits the number of operators an Xpath expression can contain
+*/
+def MAVEN_TEST_LIMIT_PARAMS = "-Djdk.xml.xpathExprGrpLimit=100 -Djdk.xml.xpathExprOpLimit=2000"
+
+pipeline {
+
+ environment {
+ MAVEN_SKIP_RC = true
+ }
+
+ options {
+ buildDiscarder(
+ logRotator(artifactNumToKeepStr: '5', numToKeepStr: '10')
+ )
+ disableConcurrentBuilds()
+ }
+
+ parameters {
+ booleanParam(name: 'CLEAN', defaultValue: true, description: 'Perform the build in clean workspace'),
+ choice(name: 'AGENT_NODE_FILTER', choices: ['all', 'ppc64le', 's390x'], description: 'Run on specific node'),
+ choice(name: 'JDK_FILTER', choices: ['all', 'jdk_17_latest', 'jdk_21_latest'], description: 'Run on specific jdk')
+ }
+ agent none
+ stages {
+ stage('BuildAndTest') {
+ matrix {
+ agent {
+ label ${AGENT_LABEL}
+ }
+ when { anyOf {
+ expression { params.AGENT_NODE_FILTER == 'all' }
+ expression { params.AGENT_NODE_FILTER == env.AGENT_LABEL }
+ expression { params.JDK_FILTER == 'all' }
+ expression { params.JDK_FILTER == env.JDK_NAME }
+ } }
+ axes {
+ axis {
+ name 'JDK_NAME'
+ values 'jdk_17_latest', 'jdk_21_latest'
+ }
+ axis {
+ name 'AGENT_LABEL'
+ values 'ppc64le', 's390x'
+ }
+ }
+ excludes {
+ exclude {
+ axis {
+ name 'JDK_NAME'
+ values 'jdk_21_latest'
+ }
+ axis {
+ name 'AGENT_LABEL'
+ values 'ppc64le'
+ }
+ }
+ exclude {
+ axis {
+ name 'JDK_NAME'
+ values 'jdk_21_latest'
+ }
+ axis {
+ name 'AGENT_LABEL'
+ values 's390x'
+ }
+ }
+ }
+ tools {
+ jdk ${JDK_NAME}
+ }
+ stages {
+ stage('Clean workspace') {
+ when {
+ expression { params.CLEAN }
+ }
+ steps {
+ sh 'git clean -fdx'
+ }
+ }
+
+ stage('Build & Install') {
+ /*when {
+ branch 'main'
+ }*/
+ steps {
+ echo "Do Build for ${AGENT_LABEL}-${JDK_NAME}"
+ sh 'java -version'
+ sh "./mvnw -U $MAVEN_PARAMS -Dskip.camel.maven.plugin.tests -Dquickly clean install"
+ }
+ }
+
+ stage('Test') {
+ steps {
+ echo "Do Test for ${AGENT_LABEL}-${JDK_NAME}"
+ sh 'java -version'
+ timeout(unit: 'HOURS', time: 7) {
+ // Skip the test case execution of modules which are either not supported on ppc64le or vendor images are not available for ppc64le.
+ sh "./mvnw $MAVEN_PARAMS $MAVEN_TEST_PARAMS $MAVEN_TEST_LIMIT_PARAMS -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify -pl '!docs'"
+ }
+ }
+ post {
+ always {
+ junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
+ junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/*.xml'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ post {
+ always {
+ emailext(
+ subject: '${DEFAULT_SUBJECT}',
+ body: '${DEFAULT_CONTENT}',
+ recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+ )
+ }
+ }
+}
+