1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/vars/commonPipelineEnvironment.groovy

255 lines
8.8 KiB
Groovy

import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger
import com.sap.piper.DefaultValueCache
import com.sap.piper.analytics.InfluxData
import groovy.json.JsonOutput
class commonPipelineEnvironment implements Serializable {
//Project identifier which might be used to distinguish resources which are available globally, e.g. for locking
def projectName
//stores version of the artifact which is build during pipeline run
def artifactVersion
def originalArtifactVersion
// stores additional artifact coordinates
def artifactId
def groupId
def packaging
//stores the build tools if it inferred automatically, e.g. in the SAP Cloud SDK pipeline
String buildTool
//Stores the current buildResult
String buildResult = 'SUCCESS'
//stores the gitCommitId as well as additional git information for the build during pipeline run
String gitCommitId
String gitCommitMessage
String gitSshUrl
String gitHttpsUrl
String gitBranch
String xsDeploymentId
//GitHub specific information
String githubOrg
String githubRepo
//stores properties for a pipeline which build an artifact and then bundles it into a container
private Map appContainerProperties = [:]
Map configuration = [:]
Map containerProperties = [:]
Map defaultConfiguration = [:]
// Location of the file from where the configuration was parsed. See setupCommonPipelineEnvironment.groovy
// Useful for making sure that the piper binary uses the same file when called from Jenkins.
String configurationFile = ''
String mtarFilePath = null
String abapAddonDescriptor
private Map valueMap = [:]
void setValue(String property, value) {
valueMap[property] = value
}
def getValue(String property) {
return valueMap.get(property)
}
String changeDocumentId
def reset() {
projectName = null
abapAddonDescriptor = null
appContainerProperties = [:]
artifactVersion = null
originalArtifactVersion = null
artifactId = null
groupId = null
packaging = null
buildTool = null
configuration = [:]
containerProperties = [:]
gitCommitId = null
gitCommitMessage = null
gitSshUrl = null
gitHttpsUrl = null
gitBranch = null
githubOrg = null
githubRepo = null
mtarFilePath = null
valueMap = [:]
changeDocumentId = null
InfluxData.reset()
}
def setAppContainerProperty(property, value) {
appContainerProperties[property] = value
}
def getAppContainerProperty(property) {
return appContainerProperties[property]
}
def setContainerProperty(property, value) {
containerProperties[property] = value
}
def getContainerProperty(property) {
return containerProperties[property]
}
// goes into measurement jenkins_custom_data
def setInfluxCustomDataEntry(key, value) {
InfluxData.addField('jenkins_custom_data', key, value)
}
// goes into measurement jenkins_custom_data
@Deprecated // not used in library
def getInfluxCustomData() {
return InfluxData.getInstance().getFields().jenkins_custom_data
}
// goes into measurement jenkins_custom_data
def setInfluxCustomDataTagsEntry(key, value) {
InfluxData.addTag('jenkins_custom_data', key, value)
}
// goes into measurement jenkins_custom_data
@Deprecated // not used in library
def getInfluxCustomDataTags() {
return InfluxData.getInstance().getTags().jenkins_custom_data
}
void setInfluxCustomDataMapEntry(measurement, field, value) {
InfluxData.addField(measurement, field, value)
}
@Deprecated // not used in library
def getInfluxCustomDataMap() {
return InfluxData.getInstance().getFields()
}
def setInfluxCustomDataMapTagsEntry(measurement, tag, value) {
InfluxData.addTag(measurement, tag, value)
}
@Deprecated // not used in library
def getInfluxCustomDataMapTags() {
return InfluxData.getInstance().getTags()
}
@Deprecated // not used in library
def setInfluxStepData(key, value) {
InfluxData.addField('step_data', key, value)
}
@Deprecated // not used in library
def getInfluxStepData(key) {
return InfluxData.getInstance().getFields()['step_data'][key]
}
@Deprecated // not used in library
def setInfluxPipelineData(key, value) {
InfluxData.addField('pipeline_data', key, value)
}
@Deprecated // not used in library
def setPipelineMeasurement(key, value){
setInfluxPipelineData(key, value)
}
@Deprecated // not used in library
def getPipelineMeasurement(key) {
return InfluxData.getInstance().getFields()['pipeline_data'][key]
}
Map getStepConfiguration(stepName, stageName = env.STAGE_NAME, includeDefaults = true) {
Map defaults = [:]
if (includeDefaults) {
defaults = ConfigurationLoader.defaultGeneralConfiguration()
defaults = ConfigurationMerger.merge(ConfigurationLoader.defaultStepConfiguration(null, stepName), null, defaults)
defaults = ConfigurationMerger.merge(ConfigurationLoader.defaultStageConfiguration(null, stageName), null, defaults)
}
Map config = ConfigurationMerger.merge(configuration.get('general') ?: [:] as Map, null, defaults)
config = ConfigurationMerger.merge(configuration.get('steps')?.get(stepName) ?: [:], null, config)
config = ConfigurationMerger.merge(configuration.get('stages')?.get(stageName) ?: [:], null, config)
return config
}
def files = [
[filename: '.pipeline/commonPipelineEnvironment/artifactVersion', property: 'artifactVersion'],
[filename: '.pipeline/commonPipelineEnvironment/artifactId', property: 'artifactId'],
[filename: '.pipeline/commonPipelineEnvironment/groupId', property: 'groupId'],
[filename: '.pipeline/commonPipelineEnvironment/packaging', property: 'packaging'],
[filename: '.pipeline/commonPipelineEnvironment/buildTool', property: 'buildTool'],
[filename: '.pipeline/commonPipelineEnvironment/originalArtifactVersion', property: 'originalArtifactVersion'],
[filename: '.pipeline/commonPipelineEnvironment/github/owner', property: 'githubOrg'],
[filename: '.pipeline/commonPipelineEnvironment/github/repository', property: 'githubRepo'],
[filename: '.pipeline/commonPipelineEnvironment/git/branch', property: 'gitBranch'],
[filename: '.pipeline/commonPipelineEnvironment/git/commitId', property: 'gitCommitId'],
[filename: '.pipeline/commonPipelineEnvironment/git/httpsUrl', property: 'gitHttpsUrl'],
[filename: '.pipeline/commonPipelineEnvironment/git/commitMessage', property: 'gitCommitMessage'],
[filename: '.pipeline/commonPipelineEnvironment/mtarFilePath', property: 'mtarFilePath'],
[filename: '.pipeline/commonPipelineEnvironment/abap/addonDescriptor', property: 'abapAddonDescriptor'],
]
Map getCPEMap(script) {
def cpeMap = [:]
files.each({f ->
createMapEntry(script, cpeMap, f.filename, this[f.property])
})
containerProperties.each({key, value ->
def filename = ".pipeline/commonPipelineEnvironment/container/${key}"
createMapEntry(script, cpeMap, filename, value)
})
valueMap.each({key, value ->
def filename = ".pipeline/commonPipelineEnvironment/custom/${key}"
createMapEntry(script, cpeMap, filename, value)
})
return cpeMap
}
void createMapEntry(script, Map resMap, String filename, value) {
// net.sf.json.JSONNull can come in through readPipelineEnv via readJSON()
// leaving them in will create a StackOverflowError further down in writePipelineEnv()
// thus removing them from the map for now
if (value != null && !(value instanceof net.sf.json.JSONNull)) {
// prefix is assumed by step if nothing else is specified
def prefix = ~/^.pipeline\/commonPipelineEnvironment\//
filename -= prefix
resMap[filename] = value
}
}
def setCPEMap(script, Map cpeMap) {
if (cpeMap == null) return
def prefix = ~/^.pipeline\/commonPipelineEnvironment\//
files.each({f ->
def key = f.filename - prefix
if (cpeMap.containsKey(key)) this[f.property] = cpeMap[key]
})
cpeMap.each {
if (it.key.startsWith("custom/")) valueMap[it.key - ~/^custom\//] = it.value
if (it.key.startsWith("container/")) containerProperties[it.key - ~/^container\//] = it.value
}
}
List getCustomDefaults() {
DefaultValueCache.getInstance().getCustomDefaults()
}
}