This is an automated email from the ASF dual-hosted git repository. fpapon pushed a commit to branch JENKINS in repository https://gitbox.apache.org/repos/asf/shiro.git
commit 44803a6779bb9b968d626a9fc26e67f89fc0006b Author: Francois Papon <[email protected]> AuthorDate: Sat Aug 15 19:36:51 2020 +0200 Add Jenkins file --- Jenkinsfile | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..6a33906 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,200 @@ +#!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 + * + * 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. + * + */ + +pipeline { + + agent { + node { + label 'ubuntu' + } + } + + environment { + // ... setup any environment variables ... + MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository' + MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true' + } + + tools { + // ... tell Jenkins what java version, maven version or other tools are required ... + maven 'Maven 3 (latest)' + jdk 'JDK 8 (latest)' + } + + options { + // Configure an overall timeout for the build of one hour. + timeout(time: 1, unit: 'HOURS') + // When we have test-fails e.g. we don't need to run the remaining steps + skipStagesAfterUnstable() + buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5')) + } + + stages { + stage('Initialization') { + steps { + echo 'Building Branch: ' + env.BRANCH_NAME + echo 'Using PATH = ' + env.PATH + } + } + + stage('Cleanup') { + steps { + echo 'Cleaning up the workspace' + deleteDir() + } + } + + stage('Checkout') { + steps { + echo 'Checking out branch ' + env.BRANCH_NAME + checkout scm + } + } + + stage('Build 1.5.x / 1.6.x / master') { + when { + expression { + anyOf { branch '1.5.x'; branch '1.6.x'; branch 'master'} + } + } + steps { + echo 'Building' + // Clean up the snapshots directory. + dir("local-snapshots-dir/") { + deleteDir() + } + sh 'mvn -U -B -e clean install -Pdocs apache-rat:check' + // Stash the build results so we can deploy them on another node + stash name: 'shiro-build-snapshots', includes: 'local-snapshots-dir/**' + } + post { + always { + junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true) + junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true) + } + } + } + + stage('Code Quality') { + when { + branch 'master' + } + steps { + echo 'Checking Code Quality on SonarCloud' + withCredentials([string(credentialsId: 'shiro-sonarcloud-token', variable: 'SONAR_TOKEN')]) { + sh 'mvn sonar:sonar ${SONARCLOUD_PARAMS} -Dsonar.login=${SONAR_TOKEN}' + } + } + } + + stage('Deploy') { + when { + branch 'master' + } + // Only the official build nodes have the credentials to deploy setup. + agent { + node { + label 'nexus-deploy' + } + } + steps { + echo 'Deploying' + // Clean up the snapshots directory. + dir("local-snapshots-dir/") { + deleteDir() + } + + // Unstash the previously stashed build results. + unstash name: 'shiro-build-snapshots' + + // Deploy the artifacts using the wagon-maven-plugin. + sh 'mvn deploy' + + // Clean up the snapshots directory (freeing up more space after deploying). + dir("local-snapshots-dir/") { + deleteDir() + } + } + } + + } + + // Do any post build stuff ... such as sending emails depending on the overall build result. + post { + // If this build failed, send an email to the list. + failure { + script { + if(env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "1.6.x" || env.BRANCH_NAME == "master") { + emailext( + subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'", + body: """ +BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]': +Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>" +""", + to: "[email protected]", + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + } + } + + // If this build didn't fail, but there were failing tests, send an email to the list. + unstable { + script { + if(env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "1.6.x" || env.BRANCH_NAME == "master") { + emailext( + subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'", + body: """ +BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]': +Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>" +""", + to: "[email protected]", + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + } + } + + // Send an email, if the last build was not successful and this one is. + success { + // Cleanup the build directory if the build was successful + // (in this cae we probably don't have to do any post-build analysis) + deleteDir() + script { + if ((env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "1.6.x" || env.BRANCH_NAME == "master") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) { + emailext ( + subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'", + body: """ +BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]': +Is back to normal. +""", + to: "[email protected]", + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + } + } + + always { + } + } + +} \ No newline at end of file
