diff options
author | Martin Stockhammer <martin_s@apache.org> | 2018-05-06 16:15:42 +0200 |
---|---|---|
committer | Martin Stockhammer <martin_s@apache.org> | 2018-05-06 16:15:42 +0200 |
commit | 6b7b4450248a22a3a05d6094f79bc00999ed8da6 (patch) | |
tree | ae1b22291445ea64bb2af2ad68284be50545a078 /Jenkinsfile | |
parent | 5bcbc3f16178a867b7165171797a785ac2604a86 (diff) | |
download | archiva-6b7b4450248a22a3a05d6094f79bc00999ed8da6.tar.gz archiva-6b7b4450248a22a3a05d6094f79bc00999ed8da6.zip |
Adding Jenkinsfile for pipeline build
Diffstat (limited to 'Jenkinsfile')
-rw-r--r-- | Jenkinsfile | 181 |
1 files changed, 129 insertions, 52 deletions
diff --git a/Jenkinsfile b/Jenkinsfile index a585b5141..c13ad50d8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,58 +1,134 @@ -node { - // System Dependent Locations - def mvntool = tool name: 'maven3', type: 'hudson.tasks.Maven$MavenInstallation' - def jdktool = tool name: 'jdk8', type: 'hudson.model.JDK' +/* + * 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. + */ - // 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") +/** + * Main build file for Jenkins Multibranch pipeline. + * + * The pipeline builds, runs the test and deploys to the archiva snapshot repository. + * + * Uses one stage for build and deploy to avoid running it multiple times. + * The settings for deployment with the credentials must be provided by a MavenSettingsProvider. + * + * Only the war and zip artifacts are archived in the jenkins build archive. + */ +LABEL = 'ubuntu' +buildJdk = 'JDK 1.8 (latest)' +buildMvn = 'Maven 3.5.2' +deploySettings = 'DefaultMavenSettingsProvider.1331204114925' +INTEGRATION_PIPELINE = "Archiva-IntegrationTests-Gitbox" - try - { - stage 'Checkout' - checkout scm - } catch (Exception e) { - //notifyBuild("Checkout Failure") - throw e - } +pipeline { + agent { + label "${LABEL}" + } + + stages { + + + stage('Checkout') { + steps { + script { + echo "Info: Job-Name=${JOB_NAME}, Branch=${BRANCH_NAME}, Workspace=${PWD}" + } + checkout scm + } + post { + failure { + notifyBuild("Checkout failure (${currentBuild.currentResult})") + } + } + } - try - { - stage 'Build' - withEnv(mvnEnv) { - timeout(60) { - // Run test phase / ignore test failures - sh "mvn -B clean install -Dmaven.test.failure.ignore=true" - // Report failures in the jenkins UI - step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml']) - } - if(isUnstable()) - { - //notifyBuild("Unstable / Test Errors") - } + stage('BuildAndDeploy') { + steps { + timeout(120) { + withMaven(maven: buildMvn, jdk: buildJdk, + mavenSettingsConfig: deploySettings, + mavenLocalRepo: ".repository", + options: [concordionPublisher(disabled: true), dependenciesFingerprintPublisher(disabled: true), + findbugsPublisher(disabled: true), artifactsPublisher(disabled: true), + invokerPublisher(disabled: true), jgivenPublisher(disabled: true), + junitPublisher(disabled: true, ignoreAttachments: false), + openTasksPublisher(disabled: true), pipelineGraphPublisher(disabled: true)] + ) + { + sh "chmod 755 ./src/ci/scripts/prepareWorkspace.sh" + sh "./src/ci/scripts/prepareWorkspace.sh" + // Needs a lot of time to reload the repository files, try without cleanup + // Not sure, but maybe + // sh "rm -rf .repository" + + // Run test phase / ignore test failures + // -B: Batch mode + // -U: Force snapshot update + // -e: Produce execution error messages + // -fae: Fail at the end + // -Dmaven.compiler.fork=false: Do not compile in a separate forked process + // -Dmaven.test.failure.ignore=true: Do not stop, if some tests fail + // -Pci-build: Profile for CI-Server + sh "mvn clean deploy -B -U -e -fae -Dmaven.test.failure.ignore=true -T2 -Dmaven.compiler.fork=false -Pci-build" + } + } + } + post { + always { + junit testResults: '**/target/surefire-reports/TEST-*.xml' + } + success { + archiveArtifacts '**/target/*.war,**/target/*-bin.zip' + script { + def previousResult = currentBuild.previousBuild?.result + if (previousResult && !currentBuild.resultIsWorseOrEqualTo(previousResult)) { + notifyBuild("Fixed: ${currentBuild.currentResult}") + } + } + } + failure { + notifyBuild("Build / Test failure (${currentBuild.currentResult})") + } + } + } + stage('IntegrationTest') { + steps { + build(job: "${INTEGRATION_PIPELINE}/archiva/${env.BRANCH_NAME}", propagate: false, quietPeriod: 10) + } + } } - } catch(Exception e) { - notifyBuild("Test Failure") - throw e - } -} -// Test if the Jenkins Pipeline or Step has marked the -// current build as unstable -def isUnstable() -{ - return currentBuild.result == "UNSTABLE" + post { + unstable { + notifyBuild("Unstable Build (${currentBuild.currentResult})") + } + always { + cleanWs deleteDirs: true, notFailBuild: true, patterns: [[pattern: '.repository', type: 'EXCLUDE']] + } + } } // Send a notification about the build status -def notifyBuild(String buildStatus) -{ - // default the value - buildStatus = buildStatus ?: "UNKNOWN" +def notifyBuild(String buildStatus) { + // default the value + buildStatus = buildStatus ?: "UNKNOWN" - def email = "${env.EMAILADDRESS}" - def summary = "${env.JOB_NAME}#${env.BUILD_NUMBER} - ${buildStatus}" - def detail = """<h4>Job: <a href='${env.JOB_URL}'>${env.JOB_NAME}</a> [#${env.BUILD_NUMBER}]</h4> + def email = "notifications@archiva.apache.org" + def summary = "${env.JOB_NAME}#${env.BUILD_NUMBER} - ${buildStatus} - ${currentBuild?.currentResult}" + def detail = """<h4>Job: <a href='${env.JOB_URL}'>${env.JOB_NAME}</a> [#${env.BUILD_NUMBER}]</h4> <p><b>${buildStatus}</b></p> <table> <tr><td>Build</td><td><a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></td><tr> @@ -61,11 +137,12 @@ def notifyBuild(String buildStatus) </table> """ - emailext ( - to: email, - subject: summary, - body: detail - ) + emailext( + to: email, + subject: summary, + body: detail, + mimeType: 'text/html' + ) } -// vim: et:ts=2:sw=2:ft=groovy +// vim: et:ts=4:sw=4:ft=groovy |