You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by da...@apache.org on 2020/09/01 22:12:50 UTC
[kafka] branch trunk updated: KAFKA-10444: Configure PR builds via
Jenkinsfile (#9238)
This is an automated email from the ASF dual-hosted git repository.
davidarthur pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 241e144 KAFKA-10444: Configure PR builds via Jenkinsfile (#9238)
241e144 is described below
commit 241e1447fae8b85b3bb491f371357b8f92d2da72
Author: David Arthur <mu...@gmail.com>
AuthorDate: Tue Sep 1 18:12:10 2020 -0400
KAFKA-10444: Configure PR builds via Jenkinsfile (#9238)
---
Jenkinsfile | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
README.md | 1 +
build.gradle | 4 ++
3 files changed, 174 insertions(+)
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..c7df4c5
--- /dev/null
+++ b/Jenkinsfile
@@ -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'
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/README.md b/README.md
index 29c20d7..f9a6499 100644
--- a/README.md
+++ b/README.md
@@ -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`.
diff --git a/build.gradle b/build.gradle
index 5189fd5..3a61185 100644
--- a/build.gradle
+++ b/build.gradle
@@ -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
@@ -313,6 +314,7 @@ subprojects {
test {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
+ ignoreFailures = userIgnoreFailures
maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs
@@ -336,6 +338,7 @@ subprojects {
task integrationTest(type: Test, dependsOn: compileJava) {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
+ ignoreFailures = userIgnoreFailures
maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs
@@ -364,6 +367,7 @@ subprojects {
task unitTest(type: Test, dependsOn: compileJava) {
maxParallelForks = userMaxForks ?: Runtime.runtime.availableProcessors()
+ ignoreFailures = userIgnoreFailures
maxHeapSize = defaultMaxHeapSize
jvmArgs = defaultJvmArgs