diff --git a/Jenkinsfile b/Jenkinsfile index 6d98a5333cc..1eb73441ed8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,165 +1,92 @@ #!groovy -node { - // System Dependent Locations - def mvntool = tool name: 'maven3', type: 'hudson.tasks.Maven$MavenInstallation' - def jdktool = tool name: 'jdk8', type: 'hudson.model.JDK' +pipeline { + agent any + // save some io during the build + options { durabilityHint('PERFORMANCE_OPTIMIZED') } + stages { + stage("Parallel Stage") { + parallel { + stage("Build / Test - JDK8") { + agent { node { label 'linux' } } + options { timeout(time: 120, unit: 'MINUTES') } + steps { + mavenBuild("jdk8", "-Pmongodb install", "maven3", false) + // Collect up the jacoco execution results (only on main build) + jacoco inclusionPattern: '**/org/eclipse/jetty/**/*.class', + exclusionPattern: '' + + // build tools + '**/org/eclipse/jetty/ant/**' + + ',**/org/eclipse/jetty/maven/**' + + ',**/org/eclipse/jetty/jspc/**' + + // example code / documentation + ',**/org/eclipse/jetty/embedded/**' + + ',**/org/eclipse/jetty/asyncrest/**' + + ',**/org/eclipse/jetty/demo/**' + + // special environments / late integrations + ',**/org/eclipse/jetty/gcloud/**' + + ',**/org/eclipse/jetty/infinispan/**' + + ',**/org/eclipse/jetty/osgi/**' + + ',**/org/eclipse/jetty/spring/**' + + ',**/org/eclipse/jetty/http/spi/**' + + // test classes + ',**/org/eclipse/jetty/tests/**' + + ',**/org/eclipse/jetty/test/**', + execPattern: '**/target/jacoco.exec', + classPattern: '**/target/classes', + sourcePattern: '**/src/main/java' + warnings consoleParsers: [[parserName: 'Maven'], [parserName: 'Java']] + maven_invoker reportsFilenamePattern: "**/target/invoker-reports/BUILD*.xml", invokerBuildDir: "**/target/it" + } + } - // Environment - List mvnEnv = ["PATH+MVN=${mvntool}/bin", "PATH+JDK=${jdktool}/bin", "JAVA_HOME=${jdktool}/", "MAVEN_HOME=${mvntool}"] - mvnEnv.add("MAVEN_OPTS=-Xms256m -Xmx1024m -Djava.awt.headless=true") + stage("Build Javadoc") { + agent { node { label 'linux' } } + options { timeout(time: 30, unit: 'MINUTES') } + steps { + mavenBuild("jdk8", "install javadoc:javadoc -DskipTests", "maven3", true) + warnings consoleParsers: [[parserName: 'Maven'], [parserName: 'JavaDoc'], [parserName: 'Java']] + } + } - try - { - stage('Checkout') { - checkout scm - } - } catch (Exception e) { - notifyBuild("Checkout Failure") - throw e - } - - try - { - stage('Compile') { - withEnv(mvnEnv) { - timeout(time: 15, unit: 'MINUTES') { - sh "mvn -B clean install -Dtest=None" + stage("Build Compact3") { + agent { node { label 'linux' } } + options { timeout(time: 120, unit: 'MINUTES') } + steps { + mavenBuild("jdk8", "-Pcompact3 install -DskipTests", "maven3", true) + warnings consoleParsers: [[parserName: 'Maven'], [parserName: 'Java']] + } } } } - } catch(Exception e) { - notifyBuild("Compile Failure") - throw e - } - - try - { - stage('Javadoc') { - withEnv(mvnEnv) { - timeout(time: 20, unit: 'MINUTES') { - sh "mvn -B javadoc:javadoc" - } - } - } - } catch(Exception e) { - notifyBuild("Javadoc Failure") - throw e - } - - try - { - stage('Test') { - withEnv(mvnEnv) { - timeout(time: 90, unit: 'MINUTES') { - // Run test phase / ignore test failures - sh "mvn -B install -Dmaven.test.failure.ignore=true" - // Report failures in the jenkins UI - step([$class: 'JUnitResultArchiver', - testResults: '**/target/surefire-reports/TEST-*.xml']) - // Collect up the jacoco execution results - def jacocoExcludes = - // build tools - "**/org/eclipse/jetty/ant/**" + - ",**/org/eclipse/jetty/maven/**" + - ",**/org/eclipse/jetty/jspc/**" + - // example code / documentation - ",**/org/eclipse/jetty/embedded/**" + - ",**/org/eclipse/jetty/asyncrest/**" + - ",**/org/eclipse/jetty/demo/**" + - // special environments / late integrations - ",**/org/eclipse/jetty/gcloud/**" + - ",**/org/eclipse/jetty/infinispan/**" + - ",**/org/eclipse/jetty/osgi/**" + - ",**/org/eclipse/jetty/spring/**" + - ",**/org/eclipse/jetty/http/spi/**" + - // test classes - ",**/org/eclipse/jetty/tests/**" + - ",**/org/eclipse/jetty/test/**"; - step([$class: 'JacocoPublisher', - inclusionPattern: '**/org/eclipse/jetty/**/*.class', - exclusionPattern: jacocoExcludes, - execPattern: '**/target/jacoco.exec', - classPattern: '**/target/classes', - sourcePattern: '**/src/main/java']) - // Report on Maven and Javadoc warnings - step([$class: 'WarningsPublisher', - consoleParsers: [ - [parserName: 'Maven'], - [parserName: 'JavaDoc'], - [parserName: 'JavaC'] - ]]) - } - if(isUnstable()) - { - notifyBuild("Unstable / Test Errors") - } - } - } - } catch(Exception e) { - notifyBuild("Test Failure") - throw e - } - - try - { - stage 'Compact3' - - dir("aggregates/jetty-all-compact3") { - withEnv(mvnEnv) { - sh "mvn -B -Pcompact3 clean install" - } - } - } catch(Exception e) { - notifyBuild("Compact3 Failure") - throw e } } -// True if this build is part of the "active" branches -// for Jetty. -def isActiveBranch() -{ - def branchName = "${env.BRANCH_NAME}" - return ( branchName == "master" || - branchName.startsWith("jetty-") ); -} +/** + * To other developers, if you are using this method above, please use the following syntax. + * + * mavenBuild("", " " + * + * @param jdk the jdk tool name (in jenkins) to use for this build + * @param cmdline the command line in " "`format. + * @return the Jenkinsfile step representing a maven build + */ +def mavenBuild(jdk, cmdline, mvnName, junitPublishDisabled) { + def localRepo = "${env.JENKINS_HOME}/${env.EXECUTOR_NUMBER}" // ".repository" // + def settingsName = 'oss-settings.xml' + def mavenOpts = '-Xms1g -Xmx4g -Djava.awt.headless=true' -// Test if the Jenkins Pipeline or Step has marked the -// current build as unstable -def isUnstable() -{ - return currentBuild.result == "UNSTABLE" -} - -// Send a notification about the build status -def notifyBuild(String buildStatus) -{ - if ( !isActiveBranch() ) - { - // don't send notifications on transient branches - return + withMaven( + maven: mvnName, + jdk: "$jdk", + publisherStrategy: 'EXPLICIT', + globalMavenSettingsConfig: settingsName, + options: [junitPublisher(disabled: junitPublishDisabled),mavenLinkerPublisher(disabled: false),pipelineGraphPublisher(disabled: false)], + mavenOpts: mavenOpts, + mavenLocalRepo: localRepo) { + // Some common Maven command line + provided command line + sh "mvn -V -B -T3 -e -Dmaven.test.failure.ignore=true -Djetty.testtracker.log=true $cmdline -Dunix.socket.tmp=" + env.JENKINS_HOME } - - // default the value - buildStatus = buildStatus ?: "UNKNOWN" - - def email = "${env.EMAILADDRESS}" - def summary = "${env.JOB_NAME}#${env.BUILD_NUMBER} - ${buildStatus}" - def detail = """

Job: ${env.JOB_NAME} [#${env.BUILD_NUMBER}]

-

${buildStatus}

- - - - -
Build${env.BUILD_URL}
Console${env.BUILD_URL}console
Test Report${env.BUILD_URL}testReport/
- """ - - emailext ( - to: email, - subject: summary, - body: detail - ) } // vim: et:ts=2:sw=2:ft=groovy