Skip to content

Commit

Permalink
KAFKA-10444: Configure PR builds via Jenkinsfile (apache#9238)
Browse files Browse the repository at this point in the history
  • Loading branch information
mumrah authored Sep 1, 2020
1 parent d0111d3 commit 241e144
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 0 deletions.
169 changes: 169 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
/*
*
* 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 setupGradle() {
// Delete gradle cache to workaround cache corruption bugs, see KAFKA-3167
dir('.gradle') {
deleteDir()
}
sh './gradlew -version'
}

def doValidation() {
sh '''
./gradlew -PscalaVersion=$SCALA_VERSION clean compileJava compileScala compileTestJava compileTestScala \
spotlessScalaCheck checkstyleMain checkstyleTest spotbugsMain rat \
--profile --no-daemon --continue -PxmlSpotBugsReport=true
'''
}

def doTest() {
sh '''
./gradlew -PscalaVersion=$SCALA_VERSION unitTest integrationTest \
--profile --no-daemon --continue -PtestLoggingEvents=started,passed,skipped,failed \
-PignoreFailures=true -PmaxParallelForks=2 -PmaxTestRetries=1 -PmaxTestRetryFailures=5
'''
junit '**/build/test-results/**/TEST-*.xml'
}

def doStreamsArchetype() {
echo 'Verify that Kafka Streams archetype compiles'

sh '''
./gradlew streams:install clients:install connect:json:install connect:api:install \
|| { echo 'Could not install kafka-streams.jar (and dependencies) locally`'; exit 1; }
'''

sh '''
version=`grep "^version=" gradle.properties | cut -d= -f 2` \
|| { echo 'Could not get version from `gradle.properties`'; exit 1; }
'''

dir('streams/quickstart') {
sh '''
mvn clean install -Dgpg.skip \
|| { echo 'Could not `mvn install` streams quickstart archetype'; exit 1; }
'''

sh '''
mkdir test-streams-archetype && cd test-streams-archetype \
|| { echo 'Could not create test directory for stream quickstart archetype'; exit 1; }
'''

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
stages {
stage('Build') {
parallel {
stage('JDK 8') {
agent { label 'ubuntu' }
tools {
jdk 'JDK 1.8 (latest)'
maven 'Maven 3.6.3'
}
options {
timeout(time: 8, unit: 'HOURS')
timestamps()
}
environment {
SCALA_VERSION=2.12
}
steps {
setupGradle()
doValidation()
doTest()
tryStreamsArchetype()
}
}

stage('JDK 11') {
agent { label 'ubuntu' }
tools {
jdk 'JDK 11 (latest)'
}
options {
timeout(time: 8, unit: 'HOURS')
timestamps()
}
environment {
SCALA_VERSION=2.13
}
steps {
setupGradle()
doValidation()
doTest()
echo 'Skipping Kafka Streams archetype test for Java 11'
}
}

stage('JDK 15') {
agent { label 'ubuntu' }
tools {
jdk 'JDK 15 (latest)'
}
options {
timeout(time: 8, unit: 'HOURS')
timestamps()
}
environment {
SCALA_VERSION=2.13
}
steps {
setupGradle()
doValidation()
doTest()
echo 'Skipping Kafka Streams archetype test for Java 15'
}
}
}
}
}
}
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ The following options should be set with a `-P` switch, for example `./gradlew -
* `commitId`: sets the build commit ID as .git/HEAD might not be correct if there are local commits added for build purposes.
* `mavenUrl`: sets the URL of the maven deployment repository (`file://path/to/repo` can be used to point to a local repository).
* `maxParallelForks`: limits the maximum number of processes for each task.
* `ignoreFailures`: ignore test failures from junit
* `showStandardStreams`: shows standard out and standard error of the test JVM(s) on the console.
* `skipSigning`: skips signing of artifacts.
* `testLoggingEvents`: unit test events to be logged, separated by comma. For example `./gradlew -PtestLoggingEvents=started,passed,skipped,failed test`.
Expand Down
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ ext {
defaultJvmArgs = ["-Xss4m", "-XX:+UseParallelGC"]

userMaxForks = project.hasProperty('maxParallelForks') ? maxParallelForks.toInteger() : null
userIgnoreFailures = project.hasProperty('ignoreFailures') ? ignoreFailures : false

userMaxTestRetries = project.hasProperty('maxTestRetries') ? maxTestRetries.toInteger() : 0
userMaxTestRetryFailures = project.hasProperty('maxTestRetryFailures') ? maxTestRetryFailures.toInteger() : 0
Expand Down Expand Up @@ -313,6 +314,7 @@ subprojects {

test {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
ignoreFailures = userIgnoreFailures

maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs
Expand All @@ -336,6 +338,7 @@ subprojects {

task integrationTest(type: Test, dependsOn: compileJava) {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
ignoreFailures = userIgnoreFailures

maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs
Expand Down Expand Up @@ -364,6 +367,7 @@ subprojects {

task unitTest(type: Test, dependsOn: compileJava) {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
ignoreFailures = userIgnoreFailures

maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs
Expand Down

0 comments on commit 241e144

Please sign in to comment.