blob: 955cc4a9e4bc0b0332775f644fadd0cf7c10136d [file] [log] [blame]
#!groovy
/*
* 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
*
* https://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.
*/
// =================================================================
// https://cwiki.apache.org/confluence/display/LOGGING/Jenkins+Setup
// =================================================================
// general pipeline documentation: https://jenkins.io/doc/book/pipeline/syntax/
pipeline {
// https://jenkins.io/doc/book/pipeline/syntax/#options
options {
// support ANSI colors in stdout/stderr
ansiColor 'xterm'
// only keep the latest 10 builds
buildDiscarder logRotator(numToKeepStr: '10')
// cancel build if not complete within two hours of scheduling
timeout time: 2, unit: 'HOURS'
// fail parallel stages as soon as any of them fail
parallelsAlwaysFailFast()
}
triggers {
// TODO: this can be removed once gitbox webhooks are re-enabled
pollSCM 'H/5 * * * *'
}
// https://jenkins.io/doc/book/pipeline/syntax/#agent
agent {
// https://cwiki.apache.org/confluence/display/INFRA/Jenkins+node+labels
label 'ubuntu'
}
environment {
LANG = 'C.UTF-8'
}
stages {
stage('Build') {
steps {
// https://issues.jenkins-ci.org/browse/JENKINS-43353
script {
def buildNumber = BUILD_NUMBER as int
if (buildNumber > 1) milestone(buildNumber - 1)
milestone(buildNumber)
}
runMaven '-DskipTests clean install'
}
}
stage('Test') {
// https://jenkins.io/doc/book/pipeline/syntax/#parallel
parallel {
stage('Ubuntu') {
steps {
runMaven '-Dmaven.test.failure.ignore=true verify'
}
post {
always {
// record linux run of tests
junit '**/*-reports/*.xml'
// additional warnings generated during build
// TODO: would be nice to be able to include checkstyle, cpd, pmd, and spotbugs,
// but current site build takes too long
recordIssues enabledForFailure: true,
sourceCodeEncoding: 'UTF-8',
referenceJobName: 'log4j/master',
tools: [mavenConsole(), errorProne(), java(),
taskScanner(highTags: 'FIXME', normalTags: 'TODO', includePattern: '**/*.java', excludePattern: '*/target/**')]
}
}
}
stage('Windows') {
agent {
// https://cwiki.apache.org/confluence/display/INFRA/Jenkins+node+labels
label 'Windows'
}
steps {
// note that previous test runs of log4j-mongodb* may have left behind an embedded mongo folder
// also note that we don't need to use the jenkins system property here as it's ubuntu-specific
bat 'if exist %userprofile%\\.embedmongo\\ rd /s /q %userprofile%\\.embedmongo'
runMaven '-Dmaven.test.failure.ignore=true verify'
}
post {
always {
// record windows run of tests
junit '**/*-reports/*.xml'
}
}
}
}
}
stage('Deploy') {
// https://www.jenkins.io/doc/book/pipeline/syntax/#when
when {
anyOf {
branch 'master'
branch 'release-2.x'
}
}
steps {
runMaven 'deploy'
}
}
}
post {
fixed {
emailext to: 'notifications@logging.apache.org',
from: 'Mr. Jenkins <jenkins@ci-builds.apache.org>',
subject: "[CI][SUCCESS] ${env.JOB_NAME}#${env.BUILD_NUMBER} back to normal",
body: '${SCRIPT, template="groovy-text.template"}'
}
failure {
emailext to: 'notifications@logging.apache.org',
from: 'Mr. Jenkins <jenkins@ci-builds.apache.org>',
subject: "[CI][FAILURE] ${env.JOB_NAME}#${env.BUILD_NUMBER} has potential issues",
body: '${SCRIPT, template="groovy-text.template"}'
}
}
}
def runMaven(String args) {
if (isUnix()) {
configFileProvider([configFile(fileId: 'ubuntu', variable: 'TOOLCHAINS')]) {
// note that the jenkins system property is set here to activate certain pom properties in
// some log4j modules that compile against system jars (e.g., log4j-jmx-gui)
sh "./mvnw --toolchains \"\$TOOLCHAINS\" -Djenkins ${args}"
}
} else {
configFileProvider([configFile(fileId: 'windows', variable: 'TOOLCHAINS')]) {
bat ".\\mvnw.cmd --toolchains \"%TOOLCHAINS%\" ${args}"
}
}
}