2018-09-21 16:55:31 +02:00
import static com . sap . piper . Prerequisites . checkScript
2018-08-09 11:35:33 +02:00
import com.sap.piper.Utils
2018-06-20 11:46:28 +02:00
import groovy.transform.Field
2019-03-28 11:10:01 +02:00
import com.sap.piper.GenerateDocumentation
2018-07-06 09:05:26 +02:00
import com.sap.piper.ConfigurationHelper
2018-06-20 11:46:28 +02:00
import com.sap.piper.cm.ChangeManagement
2018-09-24 14:06:48 +02:00
import com.sap.piper.cm.BackendType
2018-06-20 11:46:28 +02:00
import com.sap.piper.cm.ChangeManagementException
import hudson.AbortException
2018-09-28 15:32:58 +02:00
import static com . sap . piper . cm . StepHelpers . getTransportRequestId
2018-09-28 15:54:20 +02:00
import static com . sap . piper . cm . StepHelpers . getChangeDocumentId
2018-09-28 14:43:51 +02:00
import static com . sap . piper . cm . StepHelpers . getBackendTypeAndLogInfoIfCMIntegrationDisabled
2018-06-20 11:46:28 +02:00
2018-11-29 10:54:05 +02:00
@Field def STEP_NAME = getClass ( ) . getName ( )
2018-06-20 11:46:28 +02:00
2018-10-25 14:22:04 +02:00
@Field Set GENERAL_CONFIG_KEYS = [
2019-03-28 11:10:01 +02:00
'changeManagement' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'changeDocumentLabel' ,
/ * *
* Defines where the transport request is created , e . g . SAP Solution Manager , ABAP System .
* @parentConfigKey changeManagement
* @possibleValues ` SOLMAN ` , ` CTS ` , ` RFC `
* /
'type' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'clientOpts' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'credentialsId' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'endpoint' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'git/from' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'git/to' ,
/ * *
* @see checkChangeInDevelopment
* @parentConfigKey changeManagement
* /
'git/format' ,
/ * *
* @see transportRequestCreate
* @parentConfigKey changeManagement
* /
'rfc/developmentInstance' ,
/ * *
* @see transportRequestCreate
* @parentConfigKey changeManagement
* /
'rfc/developmentClient' ,
/ * *
* A pattern used for identifying lines holding the transport request id .
* @parentConfigKey changeManagement
* /
'changeManagement/transportRequestLabel'
2018-06-20 11:46:28 +02:00
]
2018-10-25 14:22:04 +02:00
@Field Set STEP_CONFIG_KEYS = GENERAL_CONFIG_KEYS . plus ( [
2019-02-11 11:52:47 +02:00
'applicationName' , // RFC
2019-03-28 11:10:01 +02:00
/** The id of the application. Only for `SOLMAN`.*/
2019-02-11 11:52:47 +02:00
'applicationId' , // SOLMAN
'applicationDescription' ,
2019-03-28 11:10:01 +02:00
/** The path of the file to upload.*/
2019-02-19 10:53:11 +02:00
'filePath' , // SOLMAN, CTS
2019-03-28 11:10:01 +02:00
/** The URL where to find the UI5 package to upload to the transport request. Only for `RFC`. */
2019-02-19 10:53:11 +02:00
'applicationUrl' , // RFC
2019-03-28 11:10:01 +02:00
/** The ABAP package name of your application. */
2019-02-11 11:52:47 +02:00
'abapPackage' ,
2019-03-28 11:10:01 +02:00
/** The code page of your ABAP system. E.g. UTF-8. */
2019-02-14 10:36:51 +02:00
'codePage' , //RFC
2019-02-14 14:51:24 +02:00
'acceptUnixStyleLineEndings' , // RFC
2019-03-28 11:10:01 +02:00
/** @see transportRequestCreate */
2019-02-15 13:52:44 +02:00
'verbose' , // RFC
2018-08-03 12:41:50 +02:00
] )
2018-10-25 14:22:04 +02:00
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS . plus ( [
2019-03-28 11:10:01 +02:00
/** @see transportRequestCreate */
2018-07-12 09:49:18 +02:00
'changeDocumentId' ,
2019-03-28 11:10:01 +02:00
/** The id of the transport request to upload the file.*/
2018-07-12 09:49:18 +02:00
'transportRequestId' ] )
2019-03-28 11:10:01 +02:00
/** Uploads a file to a Transport Request. */
@GenerateDocumentation
2018-08-30 16:33:07 +02:00
void call ( parameters = [ : ] ) {
2018-06-20 11:46:28 +02:00
handlePipelineStepErrors ( stepName: STEP_NAME , stepParameters: parameters ) {
2018-10-31 09:40:12 +02:00
def script = checkScript ( this , parameters ) ? : this
2018-06-20 11:46:28 +02:00
2018-06-29 10:11:46 +02:00
ChangeManagement cm = parameters . cmUtils ? : new ChangeManagement ( script )
2018-06-20 11:46:28 +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-10-25 14:22:04 +02:00
. mixinGeneralConfig ( script . commonPipelineEnvironment , GENERAL_CONFIG_KEYS )
. mixinStepConfig ( script . commonPipelineEnvironment , STEP_CONFIG_KEYS )
. mixinStageConfig ( script . commonPipelineEnvironment , parameters . stageName ? : env . STAGE_NAME , STEP_CONFIG_KEYS )
. mixin ( parameters , PARAMETER_KEYS )
2018-08-15 10:37:34 +02:00
. addIfEmpty ( 'filePath' , script . commonPipelineEnvironment . getMtarFilePath ( ) )
2018-07-13 09:28:41 +02:00
Map configuration = configHelper . use ( )
2018-06-20 11:46:28 +02:00
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-12-14 16:24:03 +02:00
. collectValidationFailures ( )
2018-08-15 10:37:34 +02:00
. withMandatoryProperty ( 'changeManagement/changeDocumentLabel' )
. withMandatoryProperty ( 'changeManagement/clientOpts' )
. withMandatoryProperty ( 'changeManagement/credentialsId' )
. withMandatoryProperty ( 'changeManagement/endpoint' )
2018-09-28 13:45:26 +02:00
. withMandatoryProperty ( 'changeManagement/type' )
2018-08-15 10:37:34 +02:00
. withMandatoryProperty ( 'changeManagement/git/from' )
. withMandatoryProperty ( 'changeManagement/git/to' )
. withMandatoryProperty ( 'changeManagement/git/format' )
2019-01-30 11:16:38 +02:00
. withMandatoryProperty ( 'filePath' , null , { backendType in [ BackendType . SOLMAN , BackendType . CTS ] } )
. withMandatoryProperty ( 'applicationUrl' , null , { backendType = = BackendType . RFC } )
2019-02-14 10:36:51 +02:00
. withMandatoryProperty ( 'codePage' , null , { backendType = = BackendType . RFC } )
2019-02-14 14:51:24 +02:00
. withMandatoryProperty ( 'acceptUnixStyleLineEndings' , null , { backendType = = BackendType . RFC } )
2019-02-07 12:46:45 +02:00
. withMandatoryProperty ( 'changeManagement/rfc/developmentInstance' , null , { backendType = = BackendType . RFC } )
2019-02-07 11:11:22 +02:00
. withMandatoryProperty ( 'changeManagement/rfc/developmentClient' , null , { backendType = = BackendType . RFC } )
2019-02-12 14:44:09 +02:00
. withMandatoryProperty ( 'changeManagement/rfc/docker/image' , null , { backendType = = BackendType . RFC } )
. withMandatoryProperty ( 'changeManagement/rfc/docker/options' , null , { backendType = = BackendType . RFC } )
. withMandatoryProperty ( 'changeManagement/rfc/docker/envVars' , null , { backendType = = BackendType . RFC } )
2019-02-18 17:59:44 +02:00
. withMandatoryProperty ( 'changeManagement/rfc/docker/pullImage' , null , { backendType = = BackendType . RFC } )
2018-12-14 16:24:03 +02:00
. withMandatoryProperty ( 'applicationDescription' , null , { backendType = = BackendType . RFC } )
. withMandatoryProperty ( 'abapPackage' , null , { backendType = = BackendType . RFC } )
2019-02-07 09:26:31 +02:00
. withMandatoryProperty ( 'applicationId' , null , { backendType = = BackendType . SOLMAN } )
. withMandatoryProperty ( 'applicationName' , null , { backendType = = BackendType . RFC } )
2019-02-15 12:05:21 +02:00
. withMandatoryProperty ( 'failOnWarning' , null , { backendType = = BackendType . RFC } )
2019-02-15 13:52:44 +02:00
. withMandatoryProperty ( 'verbose' , null , { backendType = = BackendType . RFC } )
2018-07-13 09:28:41 +02:00
2019-01-21 09:47:34 +02:00
new Utils ( ) . pushToSWA ( [
step: STEP_NAME ,
stepParamKey1: 'changeManagementType' ,
stepParam1: configuration . changeManagement . type ,
stepParamKey2: 'scriptMissing' ,
stepParam2: parameters ? . script = = null
] , configuration )
2018-09-28 13:45:26 +02:00
2018-09-18 14:49:06 +02:00
def changeDocumentId = null
2018-06-20 11:46:28 +02:00
2018-09-24 14:06:48 +02:00
if ( backendType = = BackendType . SOLMAN ) {
2018-11-08 17:16:42 +02:00
changeDocumentId = getChangeDocumentId ( cm , script , configuration )
2018-07-10 15:15:54 +02:00
}
2018-08-09 11:35:33 +02:00
2018-11-08 17:16:42 +02:00
def transportRequestId = getTransportRequestId ( cm , script , configuration )
2018-07-12 13:55:01 +02:00
2018-09-18 14:49:06 +02:00
configHelper
. mixin ( [ changeDocumentId: changeDocumentId ? . trim ( ) ? : null ,
transportRequestId: transportRequestId ? . trim ( ) ? : null ] , [ 'changeDocumentId' , 'transportRequestId' ] as Set )
2018-09-24 14:06:48 +02:00
if ( backendType = = BackendType . SOLMAN ) {
2018-09-18 14:49:06 +02:00
configHelper
. withMandatoryProperty ( 'changeDocumentId' ,
"Change document id not provided (parameter: \'changeDocumentId\' or via commit history)." )
}
2018-07-13 09:28:41 +02:00
configuration = configHelper
2019-05-17 13:20:13 +02:00
. withMandatoryProperty ( 'transportRequestId' ,
"Transport request id not provided (parameter: \'transportRequestId\' or via commit history)." )
. use ( )
2018-06-20 11:46:28 +02:00
2019-01-31 18:06:22 +02:00
def uploadingMessage = [ '[INFO] Uploading file ' +
"'${backendType == BackendType.RFC ? configuration.applicationUrl : configuration.filePath}' " +
"to transport request '${configuration.transportRequestId}'" ]
2018-09-24 14:06:48 +02:00
if ( backendType = = BackendType . SOLMAN )
2018-09-18 14:49:06 +02:00
uploadingMessage < < " of change document '${configuration.changeDocumentId}'"
uploadingMessage < < '.'
echo uploadingMessage . join ( )
2018-06-20 11:46:28 +02:00
try {
2018-07-16 15:41:46 +02:00
2018-12-14 16:24:03 +02:00
switch ( backendType ) {
case BackendType . SOLMAN :
cm . uploadFileToTransportRequestSOLMAN (
2019-02-28 11:31:52 +02:00
configuration . changeManagement . solman ? . docker ? : [ : ] ,
2018-12-14 16:24:03 +02:00
configuration . changeDocumentId ,
configuration . transportRequestId ,
configuration . applicationId ,
configuration . filePath ,
configuration . changeManagement . endpoint ,
configuration . changeManagement . credentialsId ,
configuration . changeManagement . clientOpts )
break
case BackendType . CTS :
cm . uploadFileToTransportRequestCTS (
2019-02-28 10:47:30 +02:00
configuration . changeManagement . cts ? . docker ? : [ : ] ,
2018-12-14 16:24:03 +02:00
configuration . transportRequestId ,
configuration . filePath ,
configuration . changeManagement . endpoint ,
configuration . changeManagement . credentialsId ,
configuration . changeManagement . clientOpts )
break
case BackendType . RFC :
2019-02-07 11:11:22 +02:00
2018-12-14 16:24:03 +02:00
cm . uploadFileToTransportRequestRFC (
2019-02-28 10:23:06 +02:00
configuration . changeManagement . rfc . docker ? : [ : ] ,
2018-12-14 16:24:03 +02:00
configuration . transportRequestId ,
2019-02-07 09:26:31 +02:00
configuration . applicationName ,
2019-01-30 11:16:38 +02:00
configuration . applicationUrl ,
2018-12-14 16:24:03 +02:00
configuration . changeManagement . endpoint ,
configuration . changeManagement . credentialsId ,
2019-02-07 12:46:45 +02:00
configuration . changeManagement . rfc . developmentInstance ,
2019-02-07 11:11:22 +02:00
configuration . changeManagement . rfc . developmentClient ,
2018-12-14 16:24:03 +02:00
configuration . applicationDescription ,
2019-02-14 10:36:51 +02:00
configuration . abapPackage ,
2019-02-14 14:51:24 +02:00
configuration . codePage ,
2019-02-15 12:05:21 +02:00
configuration . acceptUnixStyleLineEndings ,
configuration . failOnWarning ,
2019-02-15 13:52:44 +02:00
configuration . verbose
2019-02-15 12:05:21 +02:00
)
2018-12-14 16:24:03 +02:00
break
}
2018-07-16 15:41:46 +02:00
2018-06-20 11:46:28 +02:00
} catch ( ChangeManagementException ex ) {
throw new AbortException ( ex . getMessage ( ) )
}
2018-07-16 15:41:46 +02:00
2018-06-20 11:46:28 +02:00
2019-02-08 13:09:32 +02:00
def uploadedMessage = [ "[INFO] File '${backendType == BackendType.RFC ? configuration.applicationUrl : configuration.filePath}' has been successfully uploaded to transport request '${configuration.transportRequestId}'" ]
2018-09-24 14:06:48 +02:00
if ( backendType = = BackendType . SOLMAN )
2018-09-18 14:49:06 +02:00
uploadedMessage < < " of change document '${configuration.changeDocumentId}'"
uploadedMessage < < '.'
echo uploadedMessage . join ( )
2018-06-20 11:46:28 +02:00
}
}