1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/vars/checksPublishResults.groovy
2018-11-05 12:26:48 +01:00

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 = 'checksPublishResults'
@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
}