From e8f206b1a1aa671d4f6f98c302039025503a1849 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Thu, 2 May 2019 12:26:28 +0200 Subject: [PATCH] piperPipeline: add extensible post stage (#661) * add post stage * use post stage in template * adjust test cases * add docs skeleton * add documentation * Update piperPipelineStagePost.md --- .../docs/steps/piperPipelineStagePost.md | 7 +++ .../groovy/templates/PiperPipelineTest.groovy | 6 ++- vars/piperPipeline.groovy | 3 +- vars/piperPipelineStagePost.groovy | 45 +++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 documentation/docs/steps/piperPipelineStagePost.md create mode 100644 vars/piperPipelineStagePost.groovy diff --git a/documentation/docs/steps/piperPipelineStagePost.md b/documentation/docs/steps/piperPipelineStagePost.md new file mode 100644 index 000000000..63991c134 --- /dev/null +++ b/documentation/docs/steps/piperPipelineStagePost.md @@ -0,0 +1,7 @@ +# ${docGenStepName} + +## ${docGenDescription} + +## ${docGenParameters} + +## ${docGenConfiguration} diff --git a/test/groovy/templates/PiperPipelineTest.groovy b/test/groovy/templates/PiperPipelineTest.groovy index 90d157e7b..f7439fa47 100644 --- a/test/groovy/templates/PiperPipelineTest.groovy +++ b/test/groovy/templates/PiperPipelineTest.groovy @@ -160,6 +160,9 @@ class PiperPipelineTest extends BasePiperTest { helper.registerAllowedMethod('piperPipelineStageRelease', [Map.class], {m -> stepsCalled.add('piperPipelineStageRelease') }) + helper.registerAllowedMethod('piperPipelineStagePost', [Map.class], {m -> + stepsCalled.add('piperPipelineStagePost') + }) nullScript.prepareDefaultValues(script: nullScript) @@ -231,7 +234,8 @@ class PiperPipelineTest extends BasePiperTest { 'piperPipelineStageCompliance', 'input', 'piperPipelineStagePromote', - 'piperPipelineStageRelease' + 'piperPipelineStageRelease', + 'piperPipelineStagePost' )) } } diff --git a/vars/piperPipeline.groovy b/vars/piperPipeline.groovy index 2048cde02..4bad91770 100644 --- a/vars/piperPipeline.groovy +++ b/vars/piperPipeline.groovy @@ -87,8 +87,7 @@ void call(parameters) { failure {buildSetResult(currentBuild, 'FAILURE')} unstable {buildSetResult(currentBuild, 'UNSTABLE')} cleanup { - influxWriteData script: parameters.script, wrapInNode: true - mailSendNotification script: parameters.script, wrapInNode: true + piperPipelineStagePost script: parameters.script } } } diff --git a/vars/piperPipelineStagePost.groovy b/vars/piperPipelineStagePost.groovy new file mode 100644 index 000000000..3bd1be082 --- /dev/null +++ b/vars/piperPipelineStagePost.groovy @@ -0,0 +1,45 @@ +import com.sap.piper.ConfigurationHelper +import com.sap.piper.GenerateDocumentation +import com.sap.piper.Utils +import groovy.transform.Field + +import static com.sap.piper.Prerequisites.checkScript + +@Field String STEP_NAME = getClass().getName() + +@Field Set GENERAL_CONFIG_KEYS = [] +@Field Set STEP_CONFIG_KEYS = GENERAL_CONFIG_KEYS +@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS + +/** + * In this stage reporting actions like mail notification or telemetry reporting are executed. + * + * This stage contains following steps: + * - [influxWriteData](./influxWriteData.md) + * - [mailSendNotification](./mailSendNotification.md) + * + * !!! note + * This stage is meant to be used in a [post](https://jenkins.io/doc/book/pipeline/syntax/#post) section of a pipeline. + */ +@GenerateDocumentation +void call(Map parameters = [:]) { + def script = checkScript(this, parameters) ?: this + def utils = parameters.juStabUtils ?: new Utils() + def stageName = parameters.stageName?:env.STAGE_NAME + // ease handling extension + stageName = stageName.replace('Declarative: ', '') + Map config = ConfigurationHelper.newInstance(this) + .loadStepDefaults() + .mixinGeneralConfig(script.commonPipelineEnvironment, GENERAL_CONFIG_KEYS) + .mixinStageConfig(script.commonPipelineEnvironment, stageName, STEP_CONFIG_KEYS) + .mixin(parameters, PARAMETER_KEYS) + .use() + + piperStageWrapper (script: script, stageName: stageName, stageLocking: false) { + // telemetry reporting + utils.pushToSWA([step: STEP_NAME], config) + + influxWriteData script: script + mailSendNotification script: script + } +}