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 58477d2b2612779ab9c89d7c678bfe91f81deda2 Author: Otavio Rodolfo Piske <[email protected]> AuthorDate: Wed Mar 20 11:16:25 2024 +0100 CAMEL-20383: convert CI jobs to a Matrix job. CAMEL-20383: convert CI jobs to a Matrix job. CAMEL-20383: renamed the JDK 17 Jenkinsfile so we can create the matrix job Fixed license format on the Jenkinsfile Martix Jenkins pipeline for CI/CD. Updated the pipeline to consolidate all the CI automation in a single file. Fixed license format on the matrix Jenkinsfiles Fixed a few syntax errors on the Jenkinsfile Fixed few syntax errors. Fixed build on the CI Also temporarily disabled a few steps to prevent problems for the actual jobs Improve stage name for multi-arch builds Fixed few syntax errors. Used single quotes instead of double and removed java -version step. Removed some commented param which are not needed. Add another stage to send an email after every platform build. Fixed invalid stage label Added missing steps Disable warning about publisher checks Added a step to prevent a warning when sending email Improved details for ppc64 and s390x build requirements Updated matrix post build steps. Added echo statement for post build step. Removed unwanted jenkins pipelines. --- Jenkinsfile | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Jenkinsfile.jdk17 | 99 ------------------------------- Jenkinsfile.jdk21 | 100 ------------------------------- Jenkinsfile.ppc64le | 101 ------------------------------- Jenkinsfile.s390x | 101 ------------------------------- pom.xml | 3 + 6 files changed, 171 insertions(+), 401 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000000..5b3c4e2238c --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,168 @@ +/* + * 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 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" +def MAVEN_TEST_PARAMS_UBUNTU = env.MAVEN_TEST_PARAMS ?: "-Dci.env.name=apache.org" +/* +Below parameters are required for camel/core/camel-core module's test cases to pass on ppc64 and s390x +- 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_PARAMS_ALT_ARCHS = "-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') + booleanParam(name: 'VIRTUAL_THREAD', defaultValue: false, description: 'Perform the build using virtual threads') + choice(name: 'PLATFORM_FILTER', choices: ['all', 'ppc64le', 's390x', 'ubuntu'], description: 'Run on specific platform') + 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 "${PLATFORM}" + } + when { anyOf { + expression { params.PLATFORM_FILTER == 'all' } + expression { params.PLATFORM_FILTER == env.PLATFORM } + 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 'PLATFORM' + values 'ppc64le', 's390x', 'ubuntu' + } + } + excludes { + exclude { + axis { + name 'JDK_NAME' + values 'jdk_21_latest' + } + axis { + name 'PLATFORM' + values 'ppc64le' + } + } + exclude { + axis { + name 'JDK_NAME' + values 'jdk_21_latest' + } + axis { + name 'PLATFORM' + values 's390x' + } + } + } + tools { + jdk "${JDK_NAME}" + } + stages { + stage('Clean workspace') { + when { + expression { params.CLEAN } + } + steps { + sh 'git clean -fdx' + } + } + + stage('Build') { + steps { + echo "Do Build for ${PLATFORM}-${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 { + script { + if ("${PLATFORM}" == "ubuntu") { + 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" + */ + echo "Code quality review ENABLED for ${PLATFORM}" + } + } else { + echo "Code quality review disabled for ${PLATFORM}" + } + } + } + } + + stage('Test') { + steps { + echo "Do Test for ${PLATFORM}-${JDK_NAME}" + timeout(unit: 'HOURS', time: 7) { + script { + if ("${PLATFORM}" == "ubuntu") { + if ("${JDK_NAME}" == "jdk_21_latest") { + sh "./mvnw $MAVEN_PARAMS $MAVEN_TEST_PARAMS_UBUNTU -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify -Dcamel.threads.virtual.enabled=${params.VIRTUAL_THREAD}" + } else { + sh "./mvnw $MAVEN_PARAMS $MAVEN_TEST_PARAMS -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify" + } + } else { + // 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_PARAMS_ALT_ARCHS -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify -pl '!docs'" + } + } + } + } + post { + always { + junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true + junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/*.xml', skipPublishingChecks: true + } + } + } + } + post { + always { + echo "Sending report CI email for developers" + emailext( + subject: '${DEFAULT_SUBJECT}', + body: '${DEFAULT_CONTENT}', + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + } + } + } + } +} diff --git a/Jenkinsfile.jdk17 b/Jenkinsfile.jdk17 deleted file mode 100644 index b2f33eaa06c..00000000000 --- a/Jenkinsfile.jdk17 +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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 - } - - tools { - jdk JDK_NAME - } - - 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') - } - - stages { - - stage('Clean workspace') { - when { - expression { params.CLEAN } - } - steps { - sh 'git clean -fdx' - } - } - - stage('Build & Install') { - steps { - 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 { - 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']] - ) - } - } -} - diff --git a/Jenkinsfile.jdk21 b/Jenkinsfile.jdk21 deleted file mode 100644 index 48a6227ba27..00000000000 --- a/Jenkinsfile.jdk21 +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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_21_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 - } - - tools { - jdk JDK_NAME - } - - 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') - booleanParam(name: 'VIRTUAL_THREAD', defaultValue: false, description: 'Perform the build using virtual threads') - } - - stages { - - stage('Clean workspace') { - when { - expression { params.CLEAN } - } - steps { - sh 'git clean -fdx' - } - } - - stage('Build & Install') { - steps { - 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 { - timeout(unit: 'HOURS', time: 7) { - sh "./mvnw $MAVEN_PARAMS $MAVEN_TEST_PARAMS -Darchetype.test.skip -Dmaven.test.failure.ignore=true -Dcheckstyle.skip=true verify -Dcamel.threads.virtual.enabled=${params.VIRTUAL_THREAD}" - } - } - 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']] - ) - } - } -} - diff --git a/Jenkinsfile.ppc64le b/Jenkinsfile.ppc64le deleted file mode 100644 index 00206b7dac1..00000000000 --- a/Jenkinsfile.ppc64le +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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 { - - agent { - label AGENT_LABEL - } - - tools { - jdk JDK_NAME - } - - 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') - } - - stages { - - stage('Clean workspace') { - when { - expression { params.CLEAN } - } - steps { - sh 'git clean -fdx' - } - } - - stage('Build & Install') { - when { - branch 'main' - } - steps { - sh "./mvnw -U $MAVEN_PARAMS -Dskip.camel.maven.plugin.tests -Dquickly clean install" - } - } - - stage('Test') { - steps { - 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']] - ) - } - } -} - diff --git a/Jenkinsfile.s390x b/Jenkinsfile.s390x deleted file mode 100644 index ce61cfba203..00000000000 --- a/Jenkinsfile.s390x +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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 = 's390x' -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 { - - agent { - label AGENT_LABEL - } - - tools { - jdk JDK_NAME - } - - 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') - } - - stages { - - stage('Clean workspace') { - when { - expression { params.CLEAN } - } - steps { - sh 'git clean -fdx' - } - } - - stage('Build & Install') { - when { - branch 'main' - } - steps { - sh "./mvnw -U $MAVEN_PARAMS -Dskip.camel.maven.plugin.tests -Dquickly clean install" - } - } - - stage('Test') { - steps { - timeout(unit: 'HOURS', time: 7) { - // Skip the test case execution of modules which are either not supported on s390x or vendor images are not available for s390x. - 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']] - ) - } - } -} - diff --git a/pom.xml b/pom.xml index 6c1ded35405..fa8908cfa71 100644 --- a/pom.xml +++ b/pom.xml @@ -338,6 +338,9 @@ <Dockerfile.native-micro>SCRIPT_STYLE</Dockerfile.native-micro> <Dockerfile.native>SCRIPT_STYLE</Dockerfile.native> <Dockerfile>SCRIPT_STYLE</Dockerfile> + <Jenkinsfile>SLASHSTAR_STYLE</Jenkinsfile> + <Jenkinsfile.matrix.platform>SLASHSTAR_STYLE</Jenkinsfile.matrix.platform> + <Jenkinsfile.matrix.jdk>SLASHSTAR_STYLE</Jenkinsfile.matrix.jdk> <Jenkinsfile.deploy>SLASHSTAR_STYLE</Jenkinsfile.deploy> <Jenkinsfile.dryrun>SLASHSTAR_STYLE</Jenkinsfile.dryrun> <Jenkinsfile.jdk17>SLASHSTAR_STYLE</Jenkinsfile.jdk17>
