1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-01-30 05:59:39 +02:00

Merge pull request #627 from alejandraferreirovidal/pipelineRestartSteps

pipelineRestartSteps: generate docu
This commit is contained in:
Alejandra Ferreiro Vidal 2019-04-09 13:50:52 +02:00 committed by GitHub
commit d239329f8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 42 deletions

View File

@ -1,25 +1,15 @@
# pipelineRestartSteps
# ${docGenStepName}
## Description
Support of restarting failed stages or steps in a pipeline is limited in Jenkins.
This has been documented in the [Jenkins Jira issue JENKINS-33846](https://issues.jenkins-ci.org/browse/JENKINS-33846).
For declarative pipelines there is a solution available which partially addresses this topic:
https://jenkins.io/doc/book/pipeline/running-pipelines/#restart-from-a-stage.
Nonetheless, still features are missing, so it can't be used in all cases.
The more complex Piper pipelines which share a state via [`commonPipelineEnvironment`](commonPipelineEnvironment.md) will for example not work with the standard _restart-from-stage_.
The step `pipelineRestartSteps` aims to address this gap and allows individual parts of a pipeline (e.g. a failed deployment) to be restarted.
This is done in a way that the pipeline waits for user input to restart the pipeline in case of a failure. In case this user input is not provided the pipeline stops after a timeout which can be configured.
## ${docGenDescription}
## Prerequisites
none
## ${docGenParameters}
## ${docGenConfiguration}
## Example
Usage of pipeline step:
@ -37,32 +27,6 @@ pipelineRestartSteps (script: this) {
In case you cannot use `node` inside this step, please choose the parameter `timeoutInSeconds` carefully!
## Parameters
| parameter | mandatory | default | possible values |
| ----------|-----------|---------|-----------------|
|script|yes|||
|sendMail|no|`true`||
|timeoutInSeconds|no|`900`||
### 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.
* If `sendMail: true` the step `mailSendNotification` will be triggered in case of an error
* `timeoutInSeconds` defines the time period where the job waits for input. Default is 15 minutes. Once this time is passed the job enters state FAILED.
## 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||||
|sendMail|X|X|X|
|timeoutInSeconds|X|X|X|
## Side effects
none

View File

@ -1,16 +1,43 @@
import static com.sap.piper.Prerequisites.checkScript
import com.sap.piper.GenerateDocumentation
import com.sap.piper.JenkinsUtils
import com.sap.piper.ConfigurationHelper
import groovy.transform.Field
@Field String STEP_NAME = getClass().getName()
@Field Set GENERAL_CONFIG_KEYS = []
@Field Set STEP_CONFIG_KEYS = [
/**
* If it is set to true` the step `mailSendNotification` will be triggered in case of an error.
*/
'sendMail',
/**
* Defines the time period where the job waits for input. Default is 15 minutes. Once this time is passed the job enters state FAILED.
*/
'timeoutInSeconds'
]
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS
/**
* Support of restarting failed stages or steps in a pipeline is limited in Jenkins.
*
* This has been documented in the [Jenkins Jira issue JENKINS-33846](https://issues.jenkins-ci.org/browse/JENKINS-33846).
*
* For declarative pipelines there is a solution available which partially addresses this topic:
* https://jenkins.io/doc/book/pipeline/running-pipelines/#restart-from-a-stage.
*
* Nonetheless, still features are missing, so it can't be used in all cases.
* The more complex Piper pipelines which share a state via [`commonPipelineEnvironment`](commonPipelineEnvironment.md) will for example not work with the standard _restart-from-stage_.
*
* The step `pipelineRestartSteps` aims to address this gap and allows individual parts of a pipeline (e.g. a failed deployment) to be restarted.
*
* This is done in a way that the pipeline waits for user input to restart the pipeline in case of a failure. In case this user input is not provided the pipeline stops after a timeout which can be configured.
*/
@GenerateDocumentation
void call(Map parameters = [:], body) {
handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters, failOnError: true) {
def script = checkScript(this, parameters) ?: this