blob: 697e6eb3f4dfa1827c0945f5ce19045fe6e1d0d1 [file] [log] [blame]
/*
* 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.
*/
properties([buildDiscarder(logRotator(artifactNumToKeepStr: '5', numToKeepStr: env.BRANCH_NAME=='master'?'10':'5'))])
def buildOs = 'linux'
def buildJdk = '7'
def buildMvn = '3.5.0'
def tests
def CORE_IT_PROFILES='run-its,embedded'
try {
node(jenkinsEnv.labelForOS(buildOs)) {
dir('build') {
stage('Checkout') {
checkout scm
}
def WORK_DIR=pwd()
stage('Build / Unit Test') {
String jdkName = jenkinsEnv.jdkFromVersion(buildOs, buildJdk)
String mvnName = jenkinsEnv.mvnFromVersion(buildOs, buildMvn)
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/.repository", options:[
artifactsPublisher(disabled: false),
junitPublisher(ignoreAttachments: false),
findbugsPublisher(disabled: false),
openTasksPublisher(disabled: false),
dependenciesFingerprintPublisher(),
invokerPublisher(),
pipelineGraphPublisher()
]) {
sh "mvn clean verify -B -U -e -fae -V -Dmaven.test.failure.ignore=true"
}
dir ('apache-maven/target') {
sh "mv apache-maven-*-bin.zip apache-maven-dist.zip"
stash includes: 'apache-maven-dist.zip', name: 'dist'
}
}
tests = resolveScm source: [$class: 'GitSCMSource', credentialsId: '', id: '_', remote: 'https://git-wip-us.apache.org/repos/asf/maven-integration-testing.git', traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait'], [$class: 'GitToolSCMSourceTrait', gitTool: 'Default']]], targets: [BRANCH_NAME, 'master']
}
}
parallel linuxJava7:{
node(jenkinsEnv.labelForOS('linux')) {
stage ('Linux Java 7') {
String jdkName = jenkinsEnv.jdkFromVersion('linux', '7')
String mvnName = jenkinsEnv.mvnFromVersion('linux', buildMvn)
dir('test') {
def WORK_DIR=pwd()
checkout tests
sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo"
unstash 'dist'
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
junitPublisher(ignoreAttachments: false)
]) {
sh "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
}
deleteDir() // clean up after ourselves to reduce disk space
}
}
}
},linuxJava8: {
node(jenkinsEnv.labelForOS('linux')) {
stage ('Linux Java 8') {
String jdkName = jenkinsEnv.jdkFromVersion('linux', '8')
String mvnName = jenkinsEnv.mvnFromVersion('linux', buildMvn)
dir('test') {
def WORK_DIR=pwd()
checkout tests
sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo"
unstash 'dist'
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
junitPublisher(ignoreAttachments: false)
]) {
sh "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
}
deleteDir() // clean up after ourselves to reduce disk space
}
}
}
}, winJava7: {
node(jenkinsEnv.labelForOS('windows')) {
stage ('Windows Java 7') {
String jdkName = jenkinsEnv.jdkFromVersion('windows', '7')
String mvnName = jenkinsEnv.mvnFromVersion('windows', buildMvn)
// need a short path or we hit 256 character limit for paths
// using EXECUTOR_NUMBER guarantees that concurrent builds on same agent
// will not trample each other
dir("/mvn-it-${EXECUTOR_NUMBER}.tmp") {
def WORK_DIR=pwd()
checkout tests
bat "if exist it-local-repo rmdir /s /q it-local-repo"
bat "if exist apache-maven-dist.zip del /q apache-maven-dist.zip"
unstash 'dist'
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
junitPublisher(ignoreAttachments: false)
]) {
bat "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
}
deleteDir() // clean up after ourselves to reduce disk space
}
}
}
}, winJava8: {
node(jenkinsEnv.labelForOS('windows')) {
stage ('Windows Java 8') {
String jdkName = jenkinsEnv.jdkFromVersion('windows', '8')
String mvnName = jenkinsEnv.mvnFromVersion('windows', buildMvn)
// need a short path or we hit 256 character limit for paths
// using EXECUTOR_NUMBER guarantees that concurrent builds on same agent
// will not trample each other
dir("/mvn-it-${EXECUTOR_NUMBER}.tmp") {
def WORK_DIR=pwd()
checkout tests
bat "if exist it-local-repo rmdir /s /q it-local-repo"
bat "if exist apache-maven-dist.zip del /q apache-maven-dist.zip"
unstash 'dist'
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
junitPublisher(ignoreAttachments: false)
]) {
bat "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
}
deleteDir() // clean up after ourselves to reduce disk space
}
}
}
}
// JENKINS-34376 seems to make it hard to detect the aborted builds
} catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
// this ambiguous condition means a user probably aborted
if (e.causes.size() == 0) {
currentBuild.result = "ABORTED"
} else {
currentBuild.result = "FAILURE"
}
throw e
} catch (hudson.AbortException e) {
// this ambiguous condition means during a shell step, user probably aborted
if (e.getMessage().contains('script returned exit code 143')) {
currentBuild.result = "ABORTED"
} else {
currentBuild.result = "FAILURE"
}
throw e
} catch (InterruptedException e) {
currentBuild.result = "ABORTED"
throw e
} catch (Throwable e) {
currentBuild.result = "FAILURE"
throw e
} finally {
// notify completion
stage("Notifications") {
jenkinsNotify()
}
}