in vars/slingOsgiBundleBuild.groovy [165:242]
def defineStage(def globalConfig, def jobConfig, def jdkVersion, def operatingSystem, boolean isReferenceStage, boolean shouldDeploy) {
def goal = jobConfig.mavenGoal ? jobConfig.mavenGoal : ( isReferenceStage ? "deploy" : "verify" )
def additionalMavenParams = additionalMavenParams(jobConfig)
def jenkinsJdkLabel = jenkinsJdkLabel(jdkVersion, globalConfig)
// do not deploy artifacts built from PRs or feature branches
// also do not deploy non-SNAPSHOT versions
if ( goal == "deploy" && !shouldDeploy ) {
goal = "verify"
echo "Maven goal set to ${goal} since branch is not master ( ${env.BRANCH_NAME} ) or version is not snapshot"
}
def invocation = {
if ( isReferenceStage ) {
if ( goal == "deploy" && shouldDeploy ) {
// this must be an absolute path to always refer to the same directory (for each Maven module in a reactor)
String localRepoPath = "${pwd()}/.local-snapshots-dir" // must also be outside target, as target is cleaned too late
// Make sure the directory is wiped.
dir(localRepoPath) {
deleteDir()
}
// deploy to local directory (all artifacts from a reactor)
additionalMavenParams = "${additionalMavenParams} -DaltDeploymentRepository=snapshot-repo::default::file:${localRepoPath}"
}
// calculate coverage with jacoco (for subsequent evaluation by SonarQube)
additionalMavenParams = "${additionalMavenParams} -Pjacoco-report"
}
checkout scm
withMaven(maven: globalConfig.mvnVersion, jdk: jenkinsJdkLabel,
mavenLocalRepo: '.repository', // use dedicated Maven repository as long as proper locking is not supported, https://lists.apache.org/thread/yovswz70v3f4d2b5ofyoqymvg9lbmzrg
options: [
artifactsPublisher(disabled: !isReferenceStage),
junitPublisher(disabled: !isReferenceStage),
openTasksPublisher(disabled: !isReferenceStage),
dependenciesFingerprintPublisher(disabled: !isReferenceStage)
] ) {
String mvnCommand = "mvn -U -B -e clean ${goal} ${additionalMavenParams} -Dci"
if (isUnix()) {
sh mvnCommand
} else {
bat mvnCommand
}
}
if ( isReferenceStage && jobConfig.archivePatterns ) {
archiveArtifacts(artifacts: SlingJenkinsHelper.jsonArrayToCsv(jobConfig.archivePatterns), allowEmptyArchive: true)
}
if ( isReferenceStage && goal == 'deploy' && shouldDeploy ) {
// Stash the build results from the local deployment directory so we can deploy them on another node
stash name: 'local-snapshots-dir', includes: '.local-snapshots-dir/**'
}
}
def jenkinsNodeLabel = jenkinsNodeLabel(operatingSystem, jobConfig, globalConfig)
return {
node(jenkinsNodeLabel) {
dir(jenkinsJdkLabel) { // isolate parallel builds on same node
timeout(time: 30, unit: 'MINUTES') {
checkout scm
stage("Maven Build (Java ${jdkVersion}, ${goal})") {
echo "Running on node ${env.NODE_NAME}"
invocation.call()
}
}
if ( isReferenceStage ) {
// SonarQube must be executed on the same node in order to reuse artifact from the Maven build
if ( jobConfig.sonarQubeEnabled ) {
stage('Analyse with SonarCloud') {
timeout(time: 30, unit: 'MINUTES') {
analyseWithSonarCloud(globalConfig, jobConfig)
}
}
}
}
}
}
}
}