2018-06-20 11:52:11 +02:00
import com.sap.piper.GitUtils
2018-08-09 11:35:33 +02:00
import com.sap.piper.Utils
2018-06-20 11:52:11 +02:00
import groovy.transform.Field
2018-07-06 09:05:26 +02:00
import com.sap.piper.ConfigurationHelper
2018-06-20 11:52:11 +02:00
import com.sap.piper.ConfigurationMerger
2018-09-25 10:44:53 +02:00
import com.sap.piper.cm.BackendType
2018-06-20 11:52:11 +02:00
import com.sap.piper.cm.ChangeManagement
import com.sap.piper.cm.ChangeManagementException
import hudson.AbortException
@Field def STEP_NAME = 'transportRequestRelease'
@Field Set stepConfigurationKeys = [
2018-07-17 09:21:56 +02:00
'changeManagement'
2018-06-20 11:52:11 +02:00
]
2018-07-12 09:49:18 +02:00
@Field Set parameterKeys = stepConfigurationKeys . plus ( [
'changeDocumentId' ,
'transportRequestId' ,
] )
2018-07-06 09:05:26 +02:00
@Field Set generalConfigurationKeys = stepConfigurationKeys
2018-06-20 11:52:11 +02:00
def call ( parameters = [ : ] ) {
handlePipelineStepErrors ( stepName: STEP_NAME , stepParameters: parameters ) {
def script = parameters ? . script ? : [ commonPipelineEnvironment: commonPipelineEnvironment ]
2018-07-12 15:58:45 +02:00
ChangeManagement cm = parameters . cmUtils ? : new ChangeManagement ( script )
2018-06-20 11:52:11 +02:00
2018-07-16 12:09:49 +02:00
ConfigurationHelper configHelper = ConfigurationHelper
2018-08-15 10:37:34 +02:00
. loadStepDefaults ( this )
. mixinGeneralConfig ( script . commonPipelineEnvironment , generalConfigurationKeys )
. mixinStepConfig ( script . commonPipelineEnvironment , stepConfigurationKeys )
. mixinStageConfig ( script . commonPipelineEnvironment , parameters . stageName ? : env . STAGE_NAME , stepConfigurationKeys )
. mixin ( parameters , parameterKeys )
. withMandatoryProperty ( 'changeManagement/clientOpts' )
. withMandatoryProperty ( 'changeManagement/credentialsId' )
. withMandatoryProperty ( 'changeManagement/endpoint' )
. withMandatoryProperty ( 'changeManagement/git/to' )
. withMandatoryProperty ( 'changeManagement/git/from' )
. withMandatoryProperty ( 'changeManagement/git/format' )
2018-07-16 12:09:49 +02:00
Map configuration = configHelper . use ( )
2018-06-20 11:52:11 +02:00
2018-08-09 11:35:33 +02:00
new Utils ( ) . pushToSWA ( [ step: STEP_NAME ] , configuration )
2018-09-25 11:12:04 +02:00
BackendType backendType
try {
backendType = configuration . changeManagement . type as BackendType
} catch ( IllegalArgumentException e ) {
error "Invalid backend type: '${configuration.changeManagement.type}'. " +
"Valid values: [${BackendType.values().join(', ')}]. " +
"Configuration: 'changeManagement/type'."
}
2018-06-20 11:52:11 +02:00
def transportRequestId = configuration . transportRequestId
2018-07-12 15:23:12 +02:00
if ( transportRequestId ? . trim ( ) ) {
echo "[INFO] Transport request id '${transportRequestId}' retrieved from parameters."
} else {
2018-07-25 12:26:20 +02:00
echo "[INFO] Retrieving transport request id from commit history [from: ${configuration.changeManagement.git.from}, to: ${configuration.changeManagement.git.to}]." +
" Searching for pattern '${configuration.gitTransportRequestLabel}'. Searching with format '${configuration.changeManagement.git.format}'."
2018-07-12 15:23:12 +02:00
try {
transportRequestId = cm . getTransportRequestId (
2018-07-25 12:26:20 +02:00
configuration . changeManagement . git . from ,
configuration . changeManagement . git . to ,
configuration . changeManagement . transportRequestLabel ,
configuration . changeManagement . git . format
2018-07-12 15:23:12 +02:00
)
echo "[INFO] Transport request id '${transportRequestId}' retrieved from commit history"
} catch ( ChangeManagementException ex ) {
echo "[WARN] Cannot retrieve transportRequestId from commit history: ${ex.getMessage()}."
}
}
2018-09-25 11:12:04 +02:00
def changeDocumentId = null
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
if ( backendType = = BackendType . SOLMAN ) {
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
changeDocumentId = configuration . changeDocumentId
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
if ( changeDocumentId ? . trim ( ) ) {
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
echo "[INFO] ChangeDocumentId '${changeDocumentId}' retrieved from parameters."
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
} else {
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
echo "[INFO] Retrieving ChangeDocumentId from commit history [from: ${configuration.changeManagement.git.from}, to: ${configuration.changeManagement.git.to}]." +
"Searching for pattern '${configuration.changeDocumentLabel}'. Searching with format '${configuration.changeManagement.git.format}'."
2018-07-10 16:33:23 +02:00
2018-09-25 11:12:04 +02:00
try {
changeDocumentId = cm . getChangeDocumentId (
configuration . changeManagement . git . from ,
configuration . changeManagement . git . to ,
configuration . changeManagement . changeDocumentLabel ,
configuration . changeManagement . gitformat
)
echo "[INFO] ChangeDocumentId '${changeDocumentId}' retrieved from commit history"
} catch ( ChangeManagementException ex ) {
echo "[WARN] Cannot retrieve changeDocumentId from commit history: ${ex.getMessage()}."
}
2018-07-10 16:33:23 +02:00
}
2018-09-25 11:12:04 +02:00
configHelper . mixin ( [ changeDocumentId: changeDocumentId ? . trim ( ) ? : null ] , [ 'changeDocumentId' ] as Set )
. withMandatoryProperty ( 'changeDocumentId' ,
"Change document id not provided (parameter: \'changeDocumentId\' or via commit history)." )
2018-07-10 16:33:23 +02:00
}
2018-07-16 12:09:49 +02:00
configuration = configHelper
2018-09-25 11:12:04 +02:00
. mixin ( [ transportRequestId: transportRequestId ? . trim ( ) ? : null ] , [ 'transportRequestId' ] as Set )
2018-07-16 12:09:49 +02:00
. withMandatoryProperty ( 'transportRequestId' ,
"Transport request id not provided (parameter: \'transportRequestId\' or via commit history)." )
2018-07-06 09:05:26 +02:00
. use ( )
2018-06-20 11:52:11 +02:00
2018-09-25 11:12:04 +02:00
def closingMessage = [ "[INFO] Closing transport request '${configuration.transportRequestId}'" ]
if ( backendType = = BackendType . SOLMAN ) closingMessage < < " for change document '${configuration.changeDocumentId}'"
closingMessage < < '.'
echo closingMessage . join ( )
2018-06-20 11:52:11 +02:00
try {
2018-09-25 11:12:04 +02:00
cm . releaseTransportRequest ( backendType ,
2018-09-25 10:44:53 +02:00
configuration . changeDocumentId ,
2018-07-12 08:54:04 +02:00
configuration . transportRequestId ,
2018-07-17 09:21:56 +02:00
configuration . changeManagement . endpoint ,
2018-07-16 15:41:46 +02:00
configuration . changeManagement . credentialsId ,
2018-07-17 09:21:56 +02:00
configuration . changeManagement . clientOpts )
2018-07-16 15:41:46 +02:00
2018-06-20 11:52:11 +02:00
} catch ( ChangeManagementException ex ) {
throw new AbortException ( ex . getMessage ( ) )
}
2018-07-16 15:41:46 +02:00
2018-06-20 11:52:11 +02:00
2018-07-12 08:54:04 +02:00
echo "[INFO] Transport Request '${configuration.transportRequestId}' has been successfully closed."
2018-06-20 11:52:11 +02:00
}
}