mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
b7468a7ae4
Having the step name always the same like the file name, which is in turn the class name is redundant.
163 lines
5.2 KiB
Groovy
163 lines
5.2 KiB
Groovy
import static com.sap.piper.Prerequisites.checkScript
|
|
|
|
import com.cloudbees.groovy.cps.NonCPS
|
|
|
|
import com.sap.piper.ConfigurationHelper
|
|
import com.sap.piper.MapUtils
|
|
import com.sap.piper.Utils
|
|
|
|
import groovy.transform.Field
|
|
|
|
@Field def STEP_NAME = getClass().getName()
|
|
|
|
@Field Set TOOLS = [
|
|
'aggregation', 'tasks', 'pmd', 'cpd', 'findbugs', 'checkstyle', 'eslint', 'pylint'
|
|
]
|
|
|
|
@Field Set GENERAL_CONFIG_KEYS = []
|
|
@Field Set STEP_CONFIG_KEYS = TOOLS.plus(['archive'])
|
|
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS
|
|
|
|
/**
|
|
* checksPublishResults
|
|
*
|
|
* @param others document all parameters
|
|
*/
|
|
void call(Map parameters = [:]) {
|
|
handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters) {
|
|
|
|
def script = checkScript(this, parameters)
|
|
if (script == null)
|
|
script = this
|
|
|
|
prepare(parameters)
|
|
|
|
// load default & individual configuration
|
|
Map configuration = ConfigurationHelper.newInstance(this)
|
|
.loadStepDefaults()
|
|
.mixinGeneralConfig(script.commonPipelineEnvironment, GENERAL_CONFIG_KEYS)
|
|
.mixinStepConfig(script.commonPipelineEnvironment, STEP_CONFIG_KEYS)
|
|
.mixinStageConfig(script.commonPipelineEnvironment, parameters.stageName?:env.STAGE_NAME, STEP_CONFIG_KEYS)
|
|
.mixin(parameters, PARAMETER_KEYS)
|
|
.use()
|
|
|
|
new Utils().pushToSWA([step: STEP_NAME,
|
|
stepParam1: parameters?.script == null], configuration)
|
|
|
|
// JAVA
|
|
report('PmdPublisher', configuration.pmd, configuration.archive)
|
|
report('DryPublisher', configuration.cpd, configuration.archive)
|
|
report('FindBugsPublisher', configuration.findbugs, configuration.archive)
|
|
report('CheckStylePublisher', configuration.checkstyle, configuration.archive)
|
|
// JAVA SCRIPT
|
|
reportWarnings('JSLint', configuration.eslint, configuration.archive)
|
|
// PYTHON
|
|
reportWarnings('PyLint', configuration.pylint, configuration.archive)
|
|
// GENERAL
|
|
reportTasks(configuration.tasks)
|
|
aggregateReports(configuration.aggregation)
|
|
}
|
|
}
|
|
|
|
def aggregateReports(settings){
|
|
if (settings.active) {
|
|
def options = createCommonOptionsMap('AnalysisPublisher', settings)
|
|
// publish
|
|
step(options)
|
|
}
|
|
}
|
|
|
|
def reportTasks(settings){
|
|
if (settings.active) {
|
|
def options = createCommonOptionsMap('TasksPublisher', settings)
|
|
options.put('pattern', settings.get('pattern'))
|
|
options.put('high', settings.get('high'))
|
|
options.put('normal', settings.get('normal'))
|
|
options.put('low', settings.get('low'))
|
|
// publish
|
|
step(options)
|
|
}
|
|
}
|
|
|
|
def report(publisherName, settings, doArchive){
|
|
if (settings.active) {
|
|
def pattern = settings.get('pattern')
|
|
def options = createCommonOptionsMap(publisherName, settings)
|
|
options.put('pattern', pattern)
|
|
// publish
|
|
step(options)
|
|
// archive check results
|
|
archiveResults(doArchive && settings.get('archive'), pattern, true)
|
|
}
|
|
}
|
|
|
|
def reportWarnings(parserName, settings, doArchive){
|
|
if (settings.active) {
|
|
def pattern = settings.get('pattern')
|
|
def options = createCommonOptionsMap('WarningsPublisher', settings)
|
|
options.put('parserConfigurations', [[
|
|
parserName: parserName,
|
|
pattern: pattern
|
|
]])
|
|
// publish
|
|
step(options)
|
|
// archive check results
|
|
archiveResults(doArchive && settings.get('archive'), pattern, true)
|
|
}
|
|
}
|
|
|
|
def archiveResults(archive, pattern, allowEmpty){
|
|
if(archive){
|
|
echo "[${STEP_NAME}] archive ${pattern}"
|
|
archiveArtifacts artifacts: pattern, allowEmptyArchive: allowEmpty
|
|
}
|
|
}
|
|
|
|
@NonCPS
|
|
def createCommonOptionsMap(publisherName, settings){
|
|
Map result = [:]
|
|
def thresholds = settings.get('thresholds', [:])
|
|
def fail = thresholds.get('fail', [:])
|
|
def unstable = thresholds.get('unstable', [:])
|
|
|
|
result.put('$class', publisherName)
|
|
result.put('healthy', settings.get('healthy'))
|
|
result.put('unHealthy', settings.get('unHealthy'))
|
|
result.put('canRunOnFailed', true)
|
|
result.put('failedTotalAll', fail.get('all'))
|
|
result.put('failedTotalHigh', fail.get('high'))
|
|
result.put('failedTotalNormal', fail.get('normal'))
|
|
result.put('failedTotalLow', fail.get('low'))
|
|
result.put('unstableTotalAll', unstable.get('all'))
|
|
result.put('unstableTotalHigh', unstable.get('high'))
|
|
result.put('unstableTotalNormal', unstable.get('normal'))
|
|
result.put('unstableTotalLow', unstable.get('low'))
|
|
// filter empty values
|
|
result = result.findAll {
|
|
return it.value != null && it.value != ''
|
|
}
|
|
return result
|
|
}
|
|
|
|
@NonCPS
|
|
def prepare(parameters){
|
|
// ensure tool maps are initialized correctly
|
|
for(String tool : TOOLS){
|
|
parameters[tool] = toMap(parameters[tool])
|
|
}
|
|
return parameters
|
|
}
|
|
|
|
@NonCPS
|
|
def toMap(parameter){
|
|
if(MapUtils.isMap(parameter))
|
|
parameter.put('active', parameter.active == null?true:parameter.active)
|
|
else if(Boolean.TRUE.equals(parameter))
|
|
parameter = [active: true]
|
|
else if(Boolean.FALSE.equals(parameter))
|
|
parameter = [active: false]
|
|
else
|
|
parameter = [:]
|
|
return parameter
|
|
}
|