From 61da9faf9800ea52c38af4c85ed70b3df4b6b985 Mon Sep 17 00:00:00 2001 From: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com> Date: Thu, 6 Feb 2020 11:27:31 +0100 Subject: [PATCH] Support InfluxDB plugin in version 2.0 (#1130) * Support InfluxDB plugin in version 2.0 closes #932 superseeds #933 --- src/com/sap/piper/JenkinsUtils.groovy | 20 ++++++++++++ test/groovy/InfluxWriteDataTest.groovy | 45 ++++++++++++++++++++++++-- vars/influxWriteData.groovy | 25 ++++++++++---- 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/src/com/sap/piper/JenkinsUtils.groovy b/src/com/sap/piper/JenkinsUtils.groovy index 2cb482961..b29a3b98e 100644 --- a/src/com/sap/piper/JenkinsUtils.groovy +++ b/src/com/sap/piper/JenkinsUtils.groovy @@ -10,6 +10,11 @@ import org.apache.commons.io.IOUtils import org.jenkinsci.plugins.workflow.libs.LibrariesAction import org.jenkinsci.plugins.workflow.steps.MissingContextVariableException +@NonCPS +def getActiveJenkinsInstance() { + return Jenkins.getActiveInstance() +} + @API @NonCPS static def isPluginActive(pluginId) { @@ -144,6 +149,21 @@ void addRunSideBarLink(String relativeUrl, String displayName, String relativeIc } } +@NonCPS +def getPlugin(name){ + for (plugin in getActiveJenkinsInstance().pluginManager.plugins) { + if (name == plugin.getShortName()) { + return plugin + } + } + return null +} + +@NonCPS +String getPluginVersion(name) { + return getPlugin(name)?.getVersion() +} + void handleStepResults(String stepName, boolean failOnMissingReports, boolean failOnMissingLinks) { def reportsFileName = "${stepName}_reports.json" def reportsFileExists = fileExists(file: reportsFileName) diff --git a/test/groovy/InfluxWriteDataTest.groovy b/test/groovy/InfluxWriteDataTest.groovy index 7a82b4b52..75367e4cd 100644 --- a/test/groovy/InfluxWriteDataTest.groovy +++ b/test/groovy/InfluxWriteDataTest.groovy @@ -1,4 +1,5 @@ import com.sap.piper.DefaultValueCache +import com.sap.piper.JenkinsUtils import com.sap.piper.analytics.InfluxData import org.junit.Before @@ -35,6 +36,13 @@ class InfluxWriteDataTest extends BasePiperTest { Map fileMap = [:] Map stepMap = [:] String echoLog = '' + String influxVersion + + class JenkinsUtilsMock extends JenkinsUtils { + String getPluginVersion(name) { + return influxVersion + } + } @Before void init() throws Exception { @@ -47,6 +55,7 @@ class InfluxWriteDataTest extends BasePiperTest { stepMap = [:] //reset fileMap fileMap = [:] + influxVersion = '1.15' helper.registerAllowedMethod('readYaml', [Map.class], { map -> return [ @@ -56,6 +65,8 @@ class InfluxWriteDataTest extends BasePiperTest { }) helper.registerAllowedMethod('writeFile', [Map.class],{m -> fileMap[m.file] = m.text}) helper.registerAllowedMethod('step', [Map.class],{m -> stepMap = m}) + + helper.registerAllowedMethod('influxDbPublisher', [Map.class],{m -> stepMap = m}) } @@ -63,7 +74,10 @@ class InfluxWriteDataTest extends BasePiperTest { void testInfluxWriteDataWithDefault() throws Exception { nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3') - stepRule.step.influxWriteData(script: nullScript) + stepRule.step.influxWriteData( + script: nullScript, + jenkinsUtilsStub: new JenkinsUtilsMock(), + ) assertThat(loggingRule.log, containsString('Artifact version: 1.2.3')) @@ -78,6 +92,8 @@ class InfluxWriteDataTest extends BasePiperTest { assertThat(fileMap, hasKey('jenkins_data_tags.json')) assertThat(fileMap, hasKey('influx_data_tags.json')) + assertThat(stepMap['$class'], is('InfluxDbPublisher')) + assertJobStatusSuccess() } @@ -120,7 +136,11 @@ class InfluxWriteDataTest extends BasePiperTest { helper.registerAllowedMethod("deleteDir", [], null) nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3') - stepRule.step.influxWriteData(script: nullScript, wrapInNode: true) + stepRule.step.influxWriteData( + script: nullScript, + jenkinsUtilsStub: new JenkinsUtilsMock(), + wrapInNode: true + ) assertThat(nodeCalled, is(true)) @@ -132,6 +152,7 @@ class InfluxWriteDataTest extends BasePiperTest { stepRule.step.influxWriteData( //juStabUtils: utils, script: nullScript, + jenkinsUtilsStub: new JenkinsUtilsMock(), influxServer: 'myInstance', customData: [key1: 'test1'], customDataTags: [tag1: 'testTag1'], @@ -152,7 +173,7 @@ class InfluxWriteDataTest extends BasePiperTest { InfluxData.addField('test_data', 'key1', 'keyValue1') InfluxData.addTag('test_data', 'tag1', 'tagValue1') stepRule.step.influxWriteData( - //juStabUtils: utils, + jenkinsUtilsStub: new JenkinsUtilsMock(), script: nullScript, influxServer: 'myInstance' ) @@ -162,4 +183,22 @@ class InfluxWriteDataTest extends BasePiperTest { assertThat(stepMap.customDataMapTags, hasKey('test_data')) } + @Test + void testInfluxWriteDataPluginVersion2() { + + nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3') + influxVersion = '2.0' + stepRule.step.influxWriteData( + script: nullScript, + jenkinsUtilsStub: new JenkinsUtilsMock(), + ) + + assertThat(loggingRule.log, containsString('Artifact version: 1.2.3')) + + assertThat(stepMap.selectedTarget, is('testInflux')) + assertThat(stepMap.customPrefix, isEmptyOrNullString()) + + assertThat(stepMap['$class'], isEmptyOrNullString()) + } + } diff --git a/vars/influxWriteData.groovy b/vars/influxWriteData.groovy index 929e80210..7372baafd 100644 --- a/vars/influxWriteData.groovy +++ b/vars/influxWriteData.groovy @@ -1,3 +1,5 @@ +import com.sap.piper.JenkinsUtils + import static com.sap.piper.Prerequisites.checkScript import com.sap.piper.GenerateDocumentation @@ -71,6 +73,7 @@ void call(Map parameters = [:]) { handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters, allowBuildFailure: true) { def script = checkScript(this, parameters) + def jenkinsUtils = parameters.jenkinsUtilsStub ?: new JenkinsUtils() if (script == null) script = this @@ -118,29 +121,39 @@ InfluxDB data map tags: ${config.customDataMapTags} if(config.wrapInNode){ node(''){ try{ - writeToInflux(config, script) + writeToInflux(config, jenkinsUtils, script) }finally{ deleteDir() } } } else { - writeToInflux(config, script) + writeToInflux(config, jenkinsUtils, script) } } } -private void writeToInflux(config, script){ +private void writeToInflux(config, JenkinsUtils jenkinsUtils, script){ if (config.influxServer) { + + def influxPluginVersion = jenkinsUtils.getPluginVersion('influxdb') + try { - step([ - $class: 'InfluxDbPublisher', + def influxParams = [ selectedTarget: config.influxServer, customPrefix: config.influxPrefix, customData: config.customData.size()>0 ? config.customData : null, customDataTags: config.customDataTags.size()>0 ? config.customDataTags : null, customDataMap: config.customDataMap.size()>0 ? config.customDataMap : null, customDataMapTags: config.customDataMapTags.size()>0 ? config.customDataMapTags : null - ]) + ] + + if (!influxPluginVersion || influxPluginVersion.startsWith('1.')) { + influxParams['$class'] = 'InfluxDbPublisher' + step(influxParams) + } else { + influxDbPublisher(influxParams) + } + } catch (NullPointerException e){ if(!e.getMessage()){ //TODO: catch NPEs as long as https://issues.jenkins-ci.org/browse/JENKINS-55594 is not fixed & released