2018-09-21 16:55:31 +02:00
import static com . sap . piper . Prerequisites . checkScript
2018-06-26 13:00:48 +02:00
import com.sap.piper.GitUtils
2018-08-09 11:35:33 +02:00
import com.sap.piper.Utils
2018-06-26 13:00:48 +02:00
import groovy.transform.Field
import hudson.AbortException
2018-07-06 09:05:26 +02:00
import com.sap.piper.ConfigurationHelper
2018-06-26 13:00:48 +02:00
import com.sap.piper.ConfigurationMerger
2018-09-28 13:45:26 +02:00
import com.sap.piper.cm.BackendType
2018-06-26 13:00:48 +02:00
import com.sap.piper.cm.ChangeManagement
import com.sap.piper.cm.ChangeManagementException
2018-09-28 14:43:51 +02:00
import static com . sap . piper . cm . StepHelpers . getBackendTypeAndLogInfoIfCMIntegrationDisabled
2018-06-26 13:00:48 +02:00
@Field def STEP_NAME = 'checkChangeInDevelopment'
@Field Set stepConfigurationKeys = [
2018-07-17 09:21:56 +02:00
'changeManagement' ,
'failIfStatusIsNotInDevelopment'
2018-06-26 13:00:48 +02:00
]
2018-07-12 09:49:18 +02:00
@Field Set parameterKeys = stepConfigurationKeys . plus ( 'changeDocumentId' )
2018-07-06 09:05:26 +02:00
@Field Set generalConfigurationKeys = stepConfigurationKeys
2018-08-30 16:33:07 +02:00
void call ( parameters = [ : ] ) {
2018-06-26 13:00:48 +02:00
handlePipelineStepErrors ( stepName: STEP_NAME , stepParameters: parameters ) {
2018-10-31 09:40:12 +02:00
def script = checkScript ( this , parameters ) ? : this
2018-07-06 09:04:04 +02:00
2018-06-26 13:00:48 +02:00
GitUtils gitUtils = parameters ? . gitUtils ? : new GitUtils ( )
2018-07-06 09:04:04 +02:00
ChangeManagement cm = parameters ? . cmUtils ? : new ChangeManagement ( script , gitUtils )
2018-06-26 13:00:48 +02:00
2018-10-17 11:05:20 +02:00
ConfigurationHelper configHelper = ConfigurationHelper . newInstance ( this )
2018-09-07 10:08:16 +02:00
. loadStepDefaults ( )
2018-08-15 10:37:34 +02:00
. mixinGeneralConfig ( script . commonPipelineEnvironment , generalConfigurationKeys )
. mixinStepConfig ( script . commonPipelineEnvironment , stepConfigurationKeys )
. mixinStageConfig ( script . commonPipelineEnvironment , parameters . stageName ? : env . STAGE_NAME , stepConfigurationKeys )
. mixin ( parameters , parameterKeys )
2018-09-28 13:45:26 +02:00
Map configuration = configHelper . use ( )
2018-09-28 14:43:51 +02:00
BackendType backendType = getBackendTypeAndLogInfoIfCMIntegrationDisabled ( this , configuration )
if ( backendType = = BackendType . NONE ) return
2018-09-28 13:45:26 +02:00
configHelper
2018-08-15 10:37:34 +02:00
// for the following parameters we expect defaults
. withMandatoryProperty ( 'changeManagement/changeDocumentLabel' )
. withMandatoryProperty ( 'changeManagement/clientOpts' )
. withMandatoryProperty ( 'changeManagement/credentialsId' )
. withMandatoryProperty ( 'changeManagement/git/from' )
. withMandatoryProperty ( 'changeManagement/git/to' )
. withMandatoryProperty ( 'changeManagement/git/format' )
. withMandatoryProperty ( 'failIfStatusIsNotInDevelopment' )
// for the following parameters we expect a value provided from outside
. withMandatoryProperty ( 'changeManagement/endpoint' )
2018-07-17 09:21:56 +02:00
2018-07-12 08:54:04 +02:00
2018-10-30 17:49:53 +02:00
configuration = configHelper . use ( )
2018-06-26 13:00:48 +02:00
2018-10-30 17:22:42 +02:00
new Utils ( ) . pushToSWA ( [ step: STEP_NAME ,
stepParam1: parameters ? . script = = null ] , configuration )
2018-08-09 11:35:33 +02:00
2018-07-10 11:09:20 +02:00
def changeId = configuration . changeDocumentId
if ( changeId ? . trim ( ) ) {
2018-07-16 15:41:46 +02:00
echo "[INFO] ChangeDocumentId retrieved from parameters."
2018-07-10 11:09:20 +02:00
} else {
2018-07-17 09:21:56 +02:00
echo "[INFO] Retrieving ChangeDocumentId from commit history [from: ${configuration.changeManagement.git.from}, to: ${configuration.changeManagement.git.to}]." +
"Searching for pattern '${configuration.changeManagement.changeDocumentLabel}'. Searching with format '${configuration.changeManagement.git.format}'."
2018-07-10 11:09:20 +02:00
try {
changeId = cm . getChangeDocumentId (
2018-07-17 09:21:56 +02:00
configuration . changeManagement . git . from ,
configuration . changeManagement . git . to ,
configuration . changeManagement . changeDocumentLabel ,
configuration . changeManagement . git . format
2018-07-10 11:09:20 +02:00
)
if ( changeId ? . trim ( ) ) {
echo "[INFO] ChangeDocumentId '${changeId}' retrieved from commit history"
}
} catch ( ChangeManagementException ex ) {
2018-07-19 10:26:34 +02:00
echo "[WARN] Cannot retrieve changeDocumentId from commit history: ${ex.getMessage()}."
2018-06-26 13:00:48 +02:00
}
}
2018-07-12 08:54:04 +02:00
configuration = configHelper . mixin ( [ changeDocumentId: changeId ? . trim ( ) ? : null ] , [ 'changeDocumentId' ] as Set )
. withMandatoryProperty ( 'changeDocumentId' ,
"No changeDocumentId provided. Neither via parameter 'changeDocumentId' " +
2018-07-17 09:21:56 +02:00
"nor via label '${configuration.changeManagement.changeDocumentLabel}' in commit range " +
"[from: ${configuration.changeManagement.git.from}, to: ${configuration.changeManagement.git.to}]." )
2018-07-12 08:54:04 +02:00
. use ( )
2018-06-26 13:00:48 +02:00
boolean isInDevelopment
2018-07-12 08:54:04 +02:00
echo "[INFO] Checking if change document '${configuration.changeDocumentId}' is in development."
2018-06-26 13:00:48 +02:00
2018-07-16 15:41:46 +02:00
try {
2018-06-26 13:00:48 +02:00
2018-07-16 15:41:46 +02:00
isInDevelopment = cm . isChangeInDevelopment ( configuration . changeDocumentId ,
configuration . changeManagement . endpoint ,
configuration . changeManagement . credentialsId ,
configuration . changeManagement . clientOpts )
} catch ( ChangeManagementException ex ) {
throw new AbortException ( ex . getMessage ( ) )
2018-06-26 13:00:48 +02:00
}
2018-07-16 15:41:46 +02:00
2018-06-26 13:00:48 +02:00
if ( isInDevelopment ) {
echo "[INFO] Change '${changeId}' is in status 'in development'."
} else {
if ( configuration . failIfStatusIsNotInDevelopment . toBoolean ( ) ) {
throw new AbortException ( "Change '${changeId}' is not in status 'in development'." )
} else {
echo "[WARNING] Change '${changeId}' is not in status 'in development'. Failing the pipeline has been explicitly disabled."
}
}
}
}