-
Notifications
You must be signed in to change notification settings - Fork 102
/
Jenkinsfile
103 lines (95 loc) · 3.67 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
* 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.
*/
buildRepo = 'https://github.com/apache/jspwiki'
buildJdk11 = 'jdk_11_latest'
buildJdk17 = 'jdk_17_latest'
buildJdk21 = 'jdk_21_latest'
buildMvn = 'maven_3_latest'
errMsg = ''
try {
stage( 'build source' ) {
parallel jdk11Build: {
buildSonarAndDeployIfSnapshotWith( buildJdk11 )
},
jdk17Build: {
buildWith( buildJdk17 )
},
jdk21Build: {
// don't fail build if jdk-21 build doesn't succeed
catchError( buildResult: 'SUCCESS', stageResult: 'FAILURE' ) {
buildWith( buildJdk21 )
}
}
}
if( env.BRANCH_NAME == 'master' ) {
build wait: false, job: 'JSPWiki/site', parameters: [ text( name: 'version', value: 'master' ) ]
}
currentBuild.result = 'SUCCESS'
} catch( Exception err ) {
currentBuild.result = 'FAILURE'
echo err.message
errMsg = '- ' + err.message
} finally {
node( 'ubuntu' ) {
if( currentBuild.result == null ) {
currentBuild.result = 'ABORTED'
}
if( env.BRANCH_NAME == 'master' ) {
emailext body: "See ${env.BUILD_URL} $errMsg",
replyTo: '[email protected]',
to: '[email protected]',
subject: "[${env.JOB_NAME}] build ${env.BUILD_DISPLAY_NAME} - ${currentBuild.result}"
}
}
}
def buildSonarAndDeployIfSnapshotWith( jdk ) {
node( 'ubuntu' ) {
stage( jdk ) {
cleanWs()
git url: buildRepo, poll: true
withMaven( jdk: jdk, maven: buildMvn, publisherStrategy: 'EXPLICIT', options: [ jacocoPublisher(), junitPublisher() ] ) {
sh "mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package org.jacoco:jacoco-maven-plugin:report -T 1C"
}
withMaven( jdk: buildJdk17, maven: buildMvn ) {
withCredentials( [ string( credentialsId: 'sonarcloud-jspwiki', variable: 'SONAR_TOKEN' ) ] ) {
def sonarOptions = "-Dsonar.projectKey=jspwiki-builder -Dsonar.organization=apache -Dsonar.branch.name=${env.BRANCH_NAME} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN"
echo 'Will use SonarQube instance at https://sonarcloud.io'
sh "mvn sonar:sonar $sonarOptions"
}
}
def pom = readMavenPom( file: 'pom.xml' )
if( pom.version.endsWith( '-SNAPSHOT' ) ) {
withMaven( jdk: jdk, maven: buildMvn ) {
sh 'mvn deploy -Dmaven.test.skip=true'
}
}
}
}
}
def buildWith( jdk ) {
node( 'ubuntu' ) {
stage( jdk ) {
cleanWs()
git url: buildRepo, poll: true
withMaven( jdk: jdk, maven: buildMvn, publisherStrategy: 'EXPLICIT' ) {
sh 'mvn clean package -T 1C'
}
}
}
}