From f138ae1499f3e9de0e6a27ff7099de0261985bc8 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 25 Mar 2019 14:34:48 +0100 Subject: [PATCH 1/5] mailSendNotification: generate documentation (#584) --- .../docs/steps/mailSendNotification.md | 67 +--------------- vars/mailSendNotification.groovy | 78 ++++++++++++++++--- 2 files changed, 70 insertions(+), 75 deletions(-) diff --git a/documentation/docs/steps/mailSendNotification.md b/documentation/docs/steps/mailSendNotification.md index 394bae5a6..5db620256 100644 --- a/documentation/docs/steps/mailSendNotification.md +++ b/documentation/docs/steps/mailSendNotification.md @@ -1,14 +1,6 @@ -# mailSendNotification +# ${docGenStepName} -## Description - -Sends notifications to all potential culprits of a current or previous build failure plus to fixed list of recipients. -It will attach the current build log to the email. - -Notifications are sent in following cases: - -* current build failed or is unstable -* current build is successful and previous build failed or was unstable +## ${docGenDescription} ## Prerequsites @@ -22,60 +14,9 @@ Usage of pipeline step: mailSendNotification script: this ``` -## Parameters +## ${docGenParameters} -| parameter | mandatory | default | possible values | -| ----------|-----------|---------|-----------------| -|script|yes||| -|buildResult|no||| -|gitCommitId|no|`script.commonPipelineEnvironment.getGitCommitId()`|| -|gitSshKeyCredentialsId|no|``|| -|gitUrl|no||| -|notificationAttachment|no|`true`|| -|notificationRecipients|no||| -|notifyCulprits|no|`true`|| -|numLogLinesInBody|no|`100`|| -|projectName|no||| -|wrapInNode|no|`false`|| - -### Details - -* `script` defines the global script environment of the Jenkinsfile run. Typically `this` is passed to this parameter. This allows the function to access the [`commonPipelineEnvironment`](commonPipelineEnvironment.md) for storing the measured duration. -* `buildResult` may be used to overrule the build result coming from `currentBuild.result`. This is for example used in the step `pipelineRestartSteps` -* `gitCommitId` defines a dedicated git commitId for culprit retrieval. -* `gitUrl` and `gitCommitId` are used to retrieve culprit information. -* `gitSshKeyCredentialsId` only required if your git repository is protected. It defines the credentialsId for the git ssh credentials. -* `notificationAttachment` defines if the console log file should be attached to the notification mail. -* `notificationRecipients` defines the fixed list of recipient that always get the notification. In case you want to send the notification to the culprits only set it to an empty string `''`. - -!!! note - Multiple recipients need to be separated with the `space` character. - In case you do not want to have any fixed recipients of the notifications leave the property empty. - -* `notifyCulprits` defines if potential culprits should receive an email. -* `numLogLinesInBody` defines the number of log lines (=last lines of the log) which are included into the body of the notification email. -* `projectName` may be used to specify a different name in the email subject. -* `wrapInNode` needs to be set to `true` if step is used outside of a node context, e.g. post actions in a declarative pipeline script. - -## Step configuration - -We recommend to define values of step parameters via [config.yml file](../configuration.md). - -In following sections the configuration is possible: - -| parameter | general | step | stage | -| ----------|-----------|---------|-----------------| -|script|||| -|buildResult||X|X| -|gitCommitId||X|X| -|gitSshKeyCredentialsId|X|X|X| -|gitUrl||X|X| -|notificationAttachment||X|X| -|notificationRecipients||X|X| -|notifyCulprits||X|X| -|numLogLinesInBody||X|X| -|projectName||X|X| -|wrapInNode||X|X| +## ${docGenConfiguration} ## Side effects diff --git a/vars/mailSendNotification.groovy b/vars/mailSendNotification.groovy index 14fc3333c..d20c259f2 100644 --- a/vars/mailSendNotification.groovy +++ b/vars/mailSendNotification.groovy @@ -1,26 +1,80 @@ import static com.sap.piper.Prerequisites.checkScript import com.sap.piper.ConfigurationHelper +import com.sap.piper.GenerateDocumentation import com.sap.piper.Utils import groovy.text.SimpleTemplateEngine import groovy.transform.Field @Field String STEP_NAME = getClass().getName() -@Field Set GENERAL_CONFIG_KEYS = ['gitSshKeyCredentialsId'] -@Field Set STEP_CONFIG_KEYS = [ - 'projectName', - 'buildResult', - 'gitUrl', - 'gitCommitId', - 'gitSshKeyCredentialsId', - 'wrapInNode', - 'notifyCulprits', - 'notificationAttachment', - 'notificationRecipients', - 'numLogLinesInBody' +@Field Set GENERAL_CONFIG_KEYS = [ + /** + * Only if `notifyCulprits` is set: + * Credentials if the repository is protected. + * @possibleValues Jenkins credentials id + */ + 'gitSshKeyCredentialsId' ] +@Field Set STEP_CONFIG_KEYS = GENERAL_CONFIG_KEYS.plus([ + /** + * Set the build result used to determine the mail template. + * default `currentBuild.result` + */ + 'buildResult', + /** + * Only if `notifyCulprits` is set: + * Defines a dedicated git commitId for culprit retrieval. + * default `commonPipelineEnvironment.getGitCommitId()` + */ + 'gitCommitId', + /** + * Only if `notifyCulprits` is set: + * Repository url used to retrieve culprit information. + * default `commonPipelineEnvironment.getGitSshUrl()` + */ + 'gitUrl', + /** + * defines if the console log file should be attached to the notification mail. + * @possibleValues `true`, `false` + */ + 'notificationAttachment', + /** + * A space-separated list of recipients that always get the notification. + */ + 'notificationRecipients', + /** + * Notify all committers since the last successful build. + * @possibleValues `true`, `false` + */ + 'notifyCulprits', + /** + * Number of log line which are included in the email body. + */ + 'numLogLinesInBody', + /** + * The project name used in the email subject. + * default `currentBuild.fullProjectName` + */ + 'projectName', + /** + * Needs to be set to `true` if step is used outside of a node context, e.g. post actions in a declarative pipeline script. + * default `false` + * @possibleValues `true`, `false` + */ + 'wrapInNode' +]) @Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS +/** + * Sends notifications to all potential culprits of a current or previous build failure and to fixed list of recipients. + * It will attach the current build log to the email. + * + * Notifications are sent in following cases: + * + * * current build failed or is unstable + * * current build is successful and previous build failed or was unstable + */ +@GenerateDocumentation void call(Map parameters = [:]) { handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters, allowBuildFailure: true) { def script = checkScript(this, parameters) ?: this From a6c8a8d94d7a96258f3ba585a4dfd349f30eee24 Mon Sep 17 00:00:00 2001 From: Florian Wilhelm <2292245+fwilhe@users.noreply.github.com> Date: Tue, 26 Mar 2019 10:32:26 +0100 Subject: [PATCH 2/5] Fix typos and small IDE hints in IT controller (#588) --- consumer-test/integrationTestController.sh | 20 ++++++++++---------- consumer-test/runTest.sh | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/consumer-test/integrationTestController.sh b/consumer-test/integrationTestController.sh index 240368d44..144d9b1bd 100755 --- a/consumer-test/integrationTestController.sh +++ b/consumer-test/integrationTestController.sh @@ -25,7 +25,7 @@ function notify() { } function cleanup() { - [ -z "${notificationThreadPid}" ] || kill -PIPE "${notificationThreadPid}" &>/dev/null + [[ -z "${notificationThreadPid}" ]] || kill -PIPE "${notificationThreadPid}" &>/dev/null } trap cleanup EXIT @@ -33,7 +33,7 @@ trap cleanup EXIT # # In case the build is performed for a pull request TRAVIS_COMMIT is a merge # commit between the base branch and the PR branch HEAD. That commit is actually built. -# But for notifying about a build status we need the commit which is currenty +# But for notifying about a build status we need the commit which is currently # the HEAD of the PR branch. # # In case the build is performed for a simple branch (not associated with a PR) @@ -42,16 +42,16 @@ trap cleanup EXIT # TRAVIS_COMMIT itself. # COMMIT_HASH_FOR_STATUS_NOTIFICATIONS="${TRAVIS_PULL_REQUEST_SHA}" -[ -z "${COMMIT_HASH_FOR_STATUS_NOTIFICATIONS}" ] && COMMIT_HASH_FOR_STATUS_NOTIFICATIONS="${TRAVIS_COMMIT}" +[[ -z "${COMMIT_HASH_FOR_STATUS_NOTIFICATIONS}" ]] && COMMIT_HASH_FOR_STATUS_NOTIFICATIONS="${TRAVIS_COMMIT}" notify "pending" "Integration tests in progress." "${COMMIT_HASH_FOR_STATUS_NOTIFICATIONS}" WORKSPACES_ROOT=workspaces -[ -e "${WORKSPACES_ROOT}" ] && rm -rf ${WORKSPACES_ROOT} +[[ -e "${WORKSPACES_ROOT}" ]] && rm -rf ${WORKSPACES_ROOT} TEST_CASES=$(find testCases -name '*.yml') -# This auxiliar thread is needed in order to produce some output while the +# This auxiliary thread is needed in order to produce some output while the # test are running. Otherwise the job will be canceled after 10 minutes without # output. while true; do sleep 10; echo "[INFO] Integration tests still running."; done & @@ -65,7 +65,7 @@ do area=$(dirname "${f#*/}") echo "[INFO] Running test case \"${testCase}\" in area \"${area}\"." TEST_CASE_ROOT="${WORKSPACES_ROOT}/${area}/${testCase}" - [ -e "${TEST_CASE_ROOT}" ] && rm -rf "${TEST_CASE_ROOT}" + [[ -e "${TEST_CASE_ROOT}" ]] && rm -rf "${TEST_CASE_ROOT}" mkdir -p "${TEST_CASE_ROOT}" || fail "Cannot create test case root directory for test case \"${testCase}\"." 1 source ./runTest.sh "${testCase}" "${TEST_CASE_ROOT}" &> "${TEST_CASE_ROOT}/log.txt" & pid=$! @@ -74,7 +74,7 @@ do let i=i+1 done -[ "${i}" == 0 ] && fail "No tests has been executed." 1 +[[ "${i}" == 0 ]] && fail "No tests has been executed." 1 # # wait for the test cases and cat the log @@ -112,7 +112,7 @@ do area=$(dirname "${p%:*}") testCase=$(basename "${p%:*}") TEST_CASE_ROOT="${WORKSPACES_ROOT}/${area}/${testCase}" - if [ -f "${TEST_CASE_ROOT}/SUCCESS" ] + if [[ -f "${TEST_CASE_ROOT}/SUCCESS" ]] then status="SUCCESS" else @@ -125,7 +125,7 @@ done STATUS_DESCRIPTION="The integration tests failed." STATUS_STATE="failure" -if [ "${failure}" == "false" ] +if [[ "${failure}" == "false" ]] then STATUS_DESCRIPTION="The integration tests succeeded." STATUS_STATE="success" @@ -133,7 +133,7 @@ fi notify "${STATUS_STATE}" "${STATUS_DESCRIPTION}" "${COMMIT_HASH_FOR_STATUS_NOTIFICATIONS}" -[ "${failure}" != "false" ] && fail "Integration tests failed." 1 +[[ "${failure}" != "false" ]] && fail "Integration tests failed." 1 echo "[INFO] Integration tests succeeded." exit 0 diff --git a/consumer-test/runTest.sh b/consumer-test/runTest.sh index db93f2479..5f1944635 100755 --- a/consumer-test/runTest.sh +++ b/consumer-test/runTest.sh @@ -27,4 +27,4 @@ RC=$? cd - &> /dev/null || { echo "[ERROR] change directory back into integration test root folder failed."; exit 1; } -[ "${RC}" == 0 ] && touch "${TEST_CASE_ROOT}/SUCCESS" +[[ "${RC}" == 0 ]] && touch "${TEST_CASE_ROOT}/SUCCESS" From f8c8e819583f4d72a781db0dfa0fb571693c2bef Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 26 Mar 2019 12:14:29 +0100 Subject: [PATCH 3/5] generate docs for slackSendNotification step (#592) --- .../docs/steps/slackSendNotification.md | 80 +++++-------------- vars/slackSendNotification.groovy | 31 +++++++ 2 files changed, 51 insertions(+), 60 deletions(-) diff --git a/documentation/docs/steps/slackSendNotification.md b/documentation/docs/steps/slackSendNotification.md index 4357d0978..d8cffbedf 100644 --- a/documentation/docs/steps/slackSendNotification.md +++ b/documentation/docs/steps/slackSendNotification.md @@ -1,73 +1,33 @@ -# slackSendNotification +# ${docGenStepName} -## Description - -Sends notifications to the Slack channel about the build status. - -Notification contains: - -* Build status; -* Repo Owner; -* Repo Name; -* Branch Name; -* Jenkins Build Number; -* Jenkins Build URL. +## ${docGenDescription} ## Prerequisites -Installed and configured [Jenkins Slack plugin](https://github.com/jenkinsci/slack-plugin). +* Installed and configured [Jenkins Slack plugin](https://github.com/jenkinsci/slack-plugin). + +## ${docGenParameters} + +## ${docGenConfiguration} ## Example Usage of pipeline step: ```groovy -try { - stage('..') {..} - stage('..') {..} - stage('..') {..} - currentBuild.result = 'SUCCESS' -} catch (Throwable err) { - currentBuild.result = 'FAILURE' - throw err -} finally { - stage('report') { - slackSendNotification script: this +pipeline { + agent any + stages { + stage('Build') { + steps { + echo "do something" + } + } + } + post { + always { + slackSendNotification script: this + } } } ``` - -## Parameters - -| parameter | mandatory | default | possible values | -| ----------|-----------|---------|-----------------| -|script|yes||| -|baseUrl|no||| -|channel|no||| -|color|no|`${buildStatus == 'SUCCESS'?'#008000':'#E60000'}`|| -|credentialsId|no||| -|message|no||| - -### Details - -* `script` defines the global script environment of the Jenkinsfile run. Typically `this` is passed to this parameter. This allows the function to access the [`commonPipelineEnvironment`](commonPipelineEnvironment.md) for storing the measured duration. -* `baseUrl` allows overriding the Slack Plugin Integration Base Url specified in the global configuration. -* `color` defines the message color. -* If `channel` is defined another than the default channel will be used. -* `credentialsId` defines the Jenkins credentialId which holds the Slack token -* With parameter `message` a custom message can be defined which is sent into the Slack channel. - -## Step configuration - -We recommend to define values of step parameters via [config.yml file](../configuration.md). - -In following sections the configuration is possible: - -| parameter | general | step | stage | -| ----------|-----------|---------|-----------------| -|script|||| -|baseUrl||X|X| -|channel||X|X| -|color||X|X| -|credentialsId||X|X| -|message||X|X| diff --git a/vars/slackSendNotification.groovy b/vars/slackSendNotification.groovy index 33c1a0cee..5cce4b158 100644 --- a/vars/slackSendNotification.groovy +++ b/vars/slackSendNotification.groovy @@ -1,6 +1,7 @@ import static com.sap.piper.Prerequisites.checkScript import com.sap.piper.ConfigurationHelper +import com.sap.piper.GenerateDocumentation import com.sap.piper.Utils import groovy.transform.Field import groovy.text.SimpleTemplateEngine @@ -9,14 +10,44 @@ import groovy.text.SimpleTemplateEngine @Field Set GENERAL_CONFIG_KEYS = [] @Field Set STEP_CONFIG_KEYS = GENERAL_CONFIG_KEYS.plus([ + /** + * Allows overriding the Slack Plugin Integration Base Url specified in the global configuration. + */ 'baseUrl', + /** + * Allows overriding of the default massaging channel from the plugin configuration. + */ 'channel', + /** + * Defines the message color`color` defines the message color. + * @possibleValues one of `good`, `warning`, `danger`, or any hex color code (eg. `#439FE0`) + */ 'color', + /** + * The credentials id for the Slack token. + * @possibleValues Jenkins credentials id + */ 'credentialsId', + /** + * Send a custom message into the Slack channel. + */ 'message' ]) @Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS +/** + * Sends notifications to the Slack channel about the build status. + * + * Notification contains: + * + * * Build status; + * * Repo Owner; + * * Repo Name; + * * Branch Name; + * * Jenkins Build Number; + * * Jenkins Build URL. + */ +@GenerateDocumentation void call(Map parameters = [:]) { handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters) { def utils = parameters.juStabUtils ?: new Utils() From 0e7ef41fabce50fcb2c62a16e3bfb3e0c22bdcaa Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Tue, 26 Mar 2019 13:26:21 +0100 Subject: [PATCH 4/5] newmanExecute: generate documentation (#591) * generate docs for newmanExecute step * fix typo --- documentation/docs/steps/newmanExecute.md | 68 +++++------------------ vars/newmanExecute.groovy | 58 ++++++++++--------- 2 files changed, 46 insertions(+), 80 deletions(-) diff --git a/documentation/docs/steps/newmanExecute.md b/documentation/docs/steps/newmanExecute.md index b89b4d5c5..cb47c03f1 100644 --- a/documentation/docs/steps/newmanExecute.md +++ b/documentation/docs/steps/newmanExecute.md @@ -1,12 +1,22 @@ -# newmanExecute +# ${docGenStepName} -## Description +## ${docGenDescription} -This script executes your [Postman](https://www.getpostman.com) tests from a collection via the [Newman](https://www.getpostman.com/docs/v6/postman/collection_runs/command_line_integration_with_newman) command line collection. +## Prerequisites -## Prequisites +* prepared Postman with a test collection -- prepared Postman with a test collection +## ${docGenParameters} + +## ${docGenConfiguration} + +## Side effects + +Step uses `dockerExecute` inside. + +## Exceptions + +none ## Example @@ -22,51 +32,3 @@ This step should be used in combination with `testsPublishResults`: newmanExecute script: this, failOnError: false testsPublishResults script: this, junit: [pattern: '**/newman/TEST-*.xml'] ``` - -## Parameters - -| name | mandatory | default | possible values | -|------|-----------|---------|-----------------| -| `dockerImage` | no | | | -| `failOnError` | no | | `true`, `false` | -| `gitBranch` | no | | | -| `gitSshKeyCredentialsId` | no | | | -| `newmanCollection` | no | | | -| `newmanEnvironment` | no | | | -| `newmanGlobals` | no | | | -| `newmanRunCommand` | no | | | -| `script` | yes | | | -| `stashContent` | no | | | -| `testRepository` | no | | | - -- `dockerImage` - Docker image for code execution. -- `failOnError` - Defines the behavior, in case tests fail. -- `gitBranch` - see `testRepository` -- `gitSshKeyCredentialsId` - see `testRepository` -- `newmanCollection` - The test collection that should be executed. This could also be a file pattern. -- `newmanEnvironment` - Specify an environment file path or URL. Environments provide a set of variables that one can use within collections. see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) -- `newmanGlobals` - Specify the file path or URL for global variables. Global variables are similar to environment variables but have a lower precedence and can be overridden by environment variables having the same name. see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) -- `newmanRunCommand` - The newman command that will be executed inside the docker container. -- `script` - The common script environment of the Jenkinsfile running. Typically the reference to the script calling the pipeline step is provided with the this parameter, as in script: this. This allows the function to access the commonPipelineEnvironment for retrieving, for example, configuration parameters. -- `stashContent` - If specific stashes should be considered for the tests, you can pass this via this parameter. -- `testRepository` - In case the test implementation is stored in a different repository than the code itself, you can define the repository containing the tests using parameter `testRepository` and if required `gitBranch` (for a different branch than master) and `gitSshKeyCredentialsId` (for protected repositories). For protected repositories the `testRepository` needs to contain the ssh git url. - -## Step configuration - -We recommend to define values of step parameters via [config.yml file](../configuration.md). - -In following sections the configuration is possible: - -| parameter | general | step | stage | -|-----------|---------|------|-------| -| `dockerImage` |  | X | X | -| `failOnError` |  | X | X | -| `gitBranch` |  | X | X | -| `gitSshKeyCredentialsId` |  | X | X | -| `newmanCollection` |  | X | X | -| `newmanEnvironment` |  | X | X | -| `newmanGlobals` |  | X | X | -| `newmanRunCommand` |  | X | X | -| `script` | X | X | X | -| `stashContent` |  | X | X | -| `testRepository` |  | X | X | diff --git a/vars/newmanExecute.groovy b/vars/newmanExecute.groovy index d7291fcd3..f58a1eb53 100644 --- a/vars/newmanExecute.groovy +++ b/vars/newmanExecute.groovy @@ -1,6 +1,7 @@ import static com.sap.piper.Prerequisites.checkScript import com.sap.piper.ConfigurationHelper +import com.sap.piper.GenerateDocumentation import com.sap.piper.GitUtils import com.sap.piper.Utils import groovy.text.SimpleTemplateEngine @@ -11,58 +12,61 @@ import groovy.transform.Field @Field Set GENERAL_CONFIG_KEYS = STEP_CONFIG_KEYS @Field Set STEP_CONFIG_KEYS = [ - /** - * Docker image for code execution. - */ + /** @see dockerExecute */ 'dockerImage', /** - * Defines the behavior, in case tests fail. - * @possibleValues `true`, `false` - */ + * Defines the behavior, in case tests fail. + * @possibleValues `true`, `false` + */ 'failOnError', /** - * see `testRepository` - */ + * Only if `testRepository` is provided: Branch of testRepository, defaults to master. + */ 'gitBranch', /** - * see `testRepository` - */ + * Only if `testRepository` is provided: Credentials for a protected testRepository + * @possibleValues Jenkins credentials id + */ 'gitSshKeyCredentialsId', /** - * The test collection that should be executed. This could also be a file pattern. - */ + * The test collection that should be executed. This could also be a file pattern. + */ 'newmanCollection', /** - * Specify an environment file path or URL. Environments provide a set of variables that one can use within collections. - * see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) - */ + * Specify an environment file path or URL. Environments provide a set of variables that one can use within collections. + * see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) + */ 'newmanEnvironment', /** - * Specify the file path or URL for global variables. Global variables are similar to environment variables but have a lower precedence and can be overridden by environment variables having the same name. - * see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) - */ + * Specify the file path or URL for global variables. Global variables are similar to environment variables but have a lower precedence and can be overridden by environment variables having the same name. + * see also [Newman docs](https://github.com/postmanlabs/newman#newman-run-collection-file-source-options) + */ 'newmanGlobals', /** - * The shell command that will be executed inside the docker container to install Newman. - */ + * The shell command that will be executed inside the docker container to install Newman. + */ 'newmanInstallCommand', /** - * The newman command that will be executed inside the docker container. - */ + * The newman command that will be executed inside the docker container. + */ 'newmanRunCommand', /** - * If specific stashes should be considered for the tests, you can pass this via this parameter. - */ + * If specific stashes should be considered for the tests, you can pass this via this parameter. + */ 'stashContent', /** - * In case the test implementation is stored in a different repository than the code itself, you can define the repository containing the tests using parameter `testRepository` and if required `gitBranch` (for a different branch than master) and `gitSshKeyCredentialsId` (for protected repositories). - * For protected repositories the `testRepository` needs to contain the ssh git url. - */ + * Define an additional repository where the test implementation is located. + * For protected repositories the `testRepository` needs to contain the ssh git url. + */ 'testRepository' ] @Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS +/** + * This script executes [Postman](https://www.getpostman.com) tests from a collection via the [Newman](https://www.getpostman.com/docs/v6/postman/collection_runs/command_line_integration_with_newman) command line tool. + */ +@GenerateDocumentation void call(Map parameters = [:]) { handlePipelineStepErrors(stepName: STEP_NAME, stepParameters: parameters) { From e282c07dd47917b85ebf6a190d17ac53a00f69cf Mon Sep 17 00:00:00 2001 From: Alejandra Ferreiro Vidal Date: Tue, 26 Mar 2019 14:13:03 +0100 Subject: [PATCH 5/5] remove config.properties file --- .../SetupCommonPipelineEnvironmentTest.groovy | 38 ++----------------- vars/commonPipelineEnvironment.groovy | 13 ------- vars/setupCommonPipelineEnvironment.groovy | 23 +---------- 3 files changed, 6 insertions(+), 68 deletions(-) diff --git a/test/groovy/SetupCommonPipelineEnvironmentTest.groovy b/test/groovy/SetupCommonPipelineEnvironmentTest.groovy index 79969bf38..4e46435ad 100644 --- a/test/groovy/SetupCommonPipelineEnvironmentTest.groovy +++ b/test/groovy/SetupCommonPipelineEnvironmentTest.groovy @@ -16,8 +16,8 @@ import static org.junit.Assert.assertNotNull class SetupCommonPipelineEnvironmentTest extends BasePiperTest { + def usedConfigFile - def swaOldConfigUsed private JenkinsStepRule stepRule = new JenkinsStepRule(this) @@ -28,6 +28,7 @@ class SetupCommonPipelineEnvironmentTest extends BasePiperTest { @Before void init() { + def examplePipelineConfig = new File('test/resources/test_pipeline_config.yml').text helper.registerAllowedMethod("readYaml", [Map], { Map parameters -> @@ -38,14 +39,6 @@ class SetupCommonPipelineEnvironmentTest extends BasePiperTest { usedConfigFile = parameters.file return yamlParser.load(examplePipelineConfig) }) - helper.registerAllowedMethod("readProperties", [Map], { Map parameters -> - usedConfigFile = parameters.file - Properties props = new Properties() - props.setProperty('key', 'value') - return props - }) - - swaOldConfigUsed = null } @Test @@ -55,35 +48,12 @@ class SetupCommonPipelineEnvironmentTest extends BasePiperTest { return path.endsWith('.pipeline/config.yml') }) - stepRule.step.setupCommonPipelineEnvironment(script: nullScript, utils: getSWAMockedUtils()) + stepRule.step.setupCommonPipelineEnvironment(script: nullScript) - assertEquals(Boolean.FALSE.toString(), swaOldConfigUsed) assertEquals('.pipeline/config.yml', usedConfigFile) assertNotNull(nullScript.commonPipelineEnvironment.configuration) assertEquals('develop', nullScript.commonPipelineEnvironment.configuration.general.productiveBranch) assertEquals('my-maven-docker', nullScript.commonPipelineEnvironment.configuration.steps.mavenExecute.dockerImage) } - - @Test - void testIsPropertiesConfigurationAvailable() { - - helper.registerAllowedMethod("fileExists", [String], { String path -> - return path.endsWith('.pipeline/config.properties') - }) - - stepRule.step.setupCommonPipelineEnvironment(script: nullScript, utils: getSWAMockedUtils()) - - assertEquals(Boolean.TRUE.toString(), swaOldConfigUsed) - assertEquals('.pipeline/config.properties', usedConfigFile) - assertNotNull(nullScript.commonPipelineEnvironment.configProperties) - assertEquals('value', nullScript.commonPipelineEnvironment.configProperties['key']) - } - - private getSWAMockedUtils() { - new Utils() { - void pushToSWA(Map payload, Map config) { - SetupCommonPipelineEnvironmentTest.this.swaOldConfigUsed = payload.stepParam5 - } - } - } } + diff --git a/vars/commonPipelineEnvironment.groovy b/vars/commonPipelineEnvironment.groovy index 7bc083255..16b0b1286 100644 --- a/vars/commonPipelineEnvironment.groovy +++ b/vars/commonPipelineEnvironment.groovy @@ -2,7 +2,6 @@ import com.sap.piper.ConfigurationLoader import com.sap.piper.ConfigurationMerger class commonPipelineEnvironment implements Serializable { - Map configProperties = [:] //stores version of the artifact which is build during pipeline run def artifactVersion @@ -44,7 +43,6 @@ class commonPipelineEnvironment implements Serializable { appContainerProperties = [:] artifactVersion = null - configProperties = [:] configuration = [:] gitCommitId = null @@ -74,17 +72,6 @@ class commonPipelineEnvironment implements Serializable { return appContainerProperties[property] } - def setConfigProperty(property, value) { - configProperties[property] = value - } - - def getConfigProperty(property) { - if (configProperties[property] != null) - return configProperties[property].trim() - else - return configProperties[property] - } - // goes into measurement jenkins_data def setInfluxCustomDataEntry(field, value) { influxCustomData[field] = value diff --git a/vars/setupCommonPipelineEnvironment.groovy b/vars/setupCommonPipelineEnvironment.groovy index 737d1a104..f3ea7ac86 100644 --- a/vars/setupCommonPipelineEnvironment.groovy +++ b/vars/setupCommonPipelineEnvironment.groovy @@ -27,9 +27,7 @@ void call(Map parameters = [:]) { (parameters.utils ?: new Utils()).pushToSWA([ step: STEP_NAME, stepParamKey4: 'customDefaults', - stepParam4: parameters.customDefaults?'true':'false', - stepParamKey5: 'legacyConfig', - stepParam5: Boolean.toString( ! (script?.commonPipelineEnvironment?.getConfigProperties() ?: [:]).isEmpty()) + stepParam4: parameters.customDefaults?'true':'false' ], config) script.commonPipelineEnvironment.setInfluxStepData('build_url', env.BUILD_URL) @@ -37,28 +35,11 @@ void call(Map parameters = [:]) { } } -private boolean isYaml(String fileName) { - return fileName.endsWith(".yml") || fileName.endsWith(".yaml") -} - -private boolean isProperties(String fileName) { - return fileName.endsWith(".properties") -} - private loadConfigurationFromFile(script, String configFile) { - String defaultPropertiesConfigFile = '.pipeline/config.properties' String defaultYmlConfigFile = '.pipeline/config.yml' - if (configFile?.trim()?.length() > 0 && isProperties(configFile)) { - Map configMap = readProperties(file: configFile) - script.commonPipelineEnvironment.setConfigProperties(configMap) - } else if (fileExists(defaultPropertiesConfigFile)) { - Map configMap = readProperties(file: defaultPropertiesConfigFile) - script.commonPipelineEnvironment.setConfigProperties(configMap) - } - - if (configFile?.trim()?.length() > 0 && isYaml(configFile)) { + if (configFile) { script.commonPipelineEnvironment.configuration = readYaml(file: configFile) } else if (fileExists(defaultYmlConfigFile)) { script.commonPipelineEnvironment.configuration = readYaml(file: defaultYmlConfigFile)