| /* |
| * |
| * 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 doValidation() { |
| sh """ |
| ./retry_zinc ./gradlew -PscalaVersion=$SCALA_VERSION clean compileJava compileScala compileTestJava compileTestScala \ |
| spotlessScalaCheck checkstyleMain checkstyleTest spotbugsMain rat \ |
| --profile --no-daemon --continue -PxmlSpotBugsReport=true |
| """ |
| } |
| |
| def isChangeRequest(env) { |
| env.CHANGE_ID != null && !env.CHANGE_ID.isEmpty() |
| } |
| |
| def doTest(env, target = "unitTest integrationTest") { |
| sh """./gradlew -PscalaVersion=$SCALA_VERSION ${target} \ |
| --profile --no-daemon --continue -PtestLoggingEvents=started,passed,skipped,failed \ |
| -PignoreFailures=true -PmaxParallelForks=2 -PmaxTestRetries=1 -PmaxTestRetryFailures=10""" |
| junit '**/build/test-results/**/TEST-*.xml' |
| } |
| |
| def doStreamsArchetype() { |
| echo 'Verify that Kafka Streams archetype compiles' |
| |
| sh ''' |
| ./gradlew streams:publishToMavenLocal clients:publishToMavenLocal connect:json:publishToMavenLocal connect:api:publishToMavenLocal \ |
| || { echo 'Could not publish kafka-streams.jar (and dependencies) locally to Maven'; exit 1; } |
| ''' |
| |
| VERSION = sh(script: 'grep "^version=" gradle.properties | cut -d= -f 2', returnStdout: true).trim() |
| |
| dir('streams/quickstart') { |
| sh ''' |
| mvn clean install -Dgpg.skip \ |
| || { echo 'Could not `mvn install` streams quickstart archetype'; exit 1; } |
| ''' |
| |
| dir('test-streams-archetype') { |
| // Note the double quotes for variable interpolation |
| sh """ |
| echo "Y" | mvn archetype:generate \ |
| -DarchetypeCatalog=local \ |
| -DarchetypeGroupId=org.apache.kafka \ |
| -DarchetypeArtifactId=streams-quickstart-java \ |
| -DarchetypeVersion=${VERSION} \ |
| -DgroupId=streams.examples \ |
| -DartifactId=streams.examples \ |
| -Dversion=0.1 \ |
| -Dpackage=myapps \ |
| || { echo 'Could not create new project using streams quickstart archetype'; exit 1; } |
| """ |
| |
| dir('streams.examples') { |
| sh ''' |
| mvn compile \ |
| || { echo 'Could not compile streams quickstart archetype project'; exit 1; } |
| ''' |
| } |
| } |
| } |
| } |
| |
| def tryStreamsArchetype() { |
| try { |
| doStreamsArchetype() |
| } catch(err) { |
| echo 'Failed to build Kafka Streams archetype, marking this build UNSTABLE' |
| currentBuild.result = 'UNSTABLE' |
| } |
| } |
| |
| |
| pipeline { |
| agent none |
| |
| options { |
| disableConcurrentBuilds(abortPrevious: isChangeRequest(env)) |
| } |
| |
| stages { |
| stage('Build') { |
| parallel { |
| |
| stage('JDK 8 and Scala 2.12') { |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_1.8_latest' |
| maven 'maven_3_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.12 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| tryStreamsArchetype() |
| } |
| } |
| |
| stage('JDK 11 and Scala 2.13') { |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_11_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.13 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| echo 'Skipping Kafka Streams archetype test for Java 11' |
| } |
| } |
| |
| stage('JDK 17 and Scala 2.13') { |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_17_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.13 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| echo 'Skipping Kafka Streams archetype test for Java 17' |
| } |
| } |
| |
| // To avoid excessive Jenkins resource usage, we only run the stages |
| // above at the PR stage. The ones below are executed after changes |
| // are pushed to trunk and/or release branches. We achieve this via |
| // the `when` clause. |
| |
| stage('JDK 8 and Scala 2.13') { |
| when { |
| not { changeRequest() } |
| beforeAgent true |
| } |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_1.8_latest' |
| maven 'maven_3_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.13 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| tryStreamsArchetype() |
| } |
| } |
| |
| stage('JDK 11 and Scala 2.12') { |
| when { |
| not { changeRequest() } |
| beforeAgent true |
| } |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_11_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.12 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| echo 'Skipping Kafka Streams archetype test for Java 11' |
| } |
| } |
| |
| stage('JDK 17 and Scala 2.12') { |
| when { |
| not { changeRequest() } |
| beforeAgent true |
| } |
| agent { label 'ubuntu' } |
| tools { |
| jdk 'jdk_17_latest' |
| } |
| options { |
| timeout(time: 8, unit: 'HOURS') |
| timestamps() |
| } |
| environment { |
| SCALA_VERSION=2.12 |
| } |
| steps { |
| doValidation() |
| doTest(env) |
| echo 'Skipping Kafka Streams archetype test for Java 17' |
| } |
| } |
| } |
| } |
| } |
| |
| post { |
| always { |
| node('ubuntu') { |
| script { |
| if (!isChangeRequest(env)) { |
| step([$class: 'Mailer', |
| notifyEveryUnstableBuild: true, |
| recipients: "dev@kafka.apache.org", |
| sendToIndividuals: false]) |
| } |
| } |
| } |
| } |
| } |
| } |