def call()

in vars/asfStandardUtilitiesBuild.groovy [23:100]


def call(Map params = [:]) {
    // Faster build and reduces IO needs
    properties([
            disableConcurrentBuilds(),
            durabilityHint('PERFORMANCE_OPTIMIZED'),
            buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
        ])

    // now determine params 
    // jdk 8 is baseline for maven be sure to maintain
    def jdk = params.containsKey('jdk') ? params.jdk : 'jdk_1.8_latest'
    // use the cmdLine parameter otherwise default depending on current branch
    def cmdline = params.containsKey('cmdline') ? params.cmdline : (env.BRANCH_NAME == 'master'?"clean deploy site:site site:stage":"clean install")
    def mvnName = params.containsKey('mvnName') ? params.mvnName : 'maven_3_latest'
    def xvfb = params.containsKey('xvfb') ? true : false

    def defaultPublishers = [artifactsPublisher(disabled: false), junitPublisher(ignoreAttachments: false, disabled: false),
        findbugsPublisher(disabled: true), openTasksPublisher(disabled: true),
        dependenciesFingerprintPublisher(disabled: false), invokerPublisher(disabled: true),
        pipelineGraphPublisher(disabled: false), mavenLinkerPublisher(disabled: false)]

    def publishers = params.containsKey('publishers') ? params.publishers : defaultPublishers


    pipeline {
        agent any
	triggers {
            pollSCM('H/5 * * * * ')
	}
        stages{
            stage("Build with default jdk (jdk8 if no parameters) ") {
                agent { node { label 'ubuntu && !nocredentials' } }
                options { timeout(time: 120, unit: 'MINUTES') }                
                steps{
                    mavenBuild( jdk, cmdline, mvnName, publishers,true)        
                }
            }
            stage("Build on recent jdk") {
                agent { node { label 'ubuntu && !nocredentials' } }
                options { timeout(time: 120, unit: 'MINUTES') }               
                steps{
	            script {	
		        def jdklist = ['jdk_11_latest','jdk_17_latest','jdk_21_latest'] // lts and after last lts if available
		        for (ajdk in jdklist) {
			    stage("build on $ajdk") {
				// do not deploy for recent jdk
			    	mavenBuild( ajdk, 'clean install site:site site:stage', mvnName, publishers,false)
			    }
		        }
		    }
                }
            }
        }
        post {
            always {
                cleanWs() // deleteDirs: true, notFailBuild: true, patterns: [[pattern: '**/.repository/**', type: 'INCLUDE']]
            }
            unstable {
                script{
                    notifyBuild( "Unstable Build ")
                }
            }
            failure {
                script{
                    notifyBuild( "Error in build ")
                }
            }
            success {
                script {
                    def previousResult = currentBuild.previousBuild?.result
                    if (previousResult && !currentBuild.resultIsWorseOrEqualTo( previousResult ) ) {
                        notifyBuild( "Fixed" )
                    }
                }
            }
        }
    }
}