2018-08-15 09:26:38 +02:00
import com.sap.piper.ConfigurationHelper
2017-07-11 15:12:03 +02:00
import com.sap.piper.Utils
2018-02-20 16:30:34 +02:00
2018-03-19 19:29:41 +02:00
import com.sap.piper.tools.ToolDescriptor
2017-11-24 16:59:34 +02:00
2018-08-15 09:26:38 +02:00
import groovy.transform.Field
@Field String STEP_NAME = 'neoDeploy'
@Field Set GENERAL_CONFIG_KEYS = [ ]
@Field Set STEP_CONFIG_KEYS = [
'account' ,
'dockerEnvVars' ,
'dockerImage' ,
'dockerOptions' ,
'host' ,
'neoCredentialsId' ,
'neoHome'
]
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS . plus ( [
'applicationName' ,
'archivePath' ,
'deployAccount' , //deprecated, replaced by parameter 'account'
'deployHost' , //deprecated, replaced by parameter 'host'
'deployMode' ,
'propertiesFile' ,
'runtime' ,
'runtimeVersion' ,
'vmSize' ,
'warAction'
] )
2018-02-20 16:30:34 +02:00
2017-07-11 15:12:03 +02:00
def call ( parameters = [ : ] ) {
2018-08-15 09:26:38 +02:00
handlePipelineStepErrors ( stepName: STEP_NAME , stepParameters: parameters ) {
2017-12-11 12:15:51 +02:00
def script = parameters ? . script ? : [ commonPipelineEnvironment: commonPipelineEnvironment ]
2017-07-11 15:12:03 +02:00
def utils = new Utils ( )
2017-12-11 14:55:07 +02:00
2017-12-11 12:15:51 +02:00
prepareDefaultValues script: script
2018-08-15 09:26:38 +02:00
final Map stepCompatibilityConfiguration = [ : ]
2017-12-11 12:15:51 +02:00
// Backward compatibility: ensure old configuration is taken into account
// The old configuration in not stage / step specific
def defaultDeployHost = script . commonPipelineEnvironment . getConfigProperty ( 'DEPLOY_HOST' )
if ( defaultDeployHost ) {
2018-08-15 09:26:38 +02:00
echo "[WARNING][${STEP_NAME}] A deprecated configuration framework is used for configuring parameter 'DEPLOY_HOST'. This configuration framework will be removed in future versions."
stepCompatibilityConfiguration . put ( 'host' , defaultDeployHost )
2017-12-11 12:15:51 +02:00
}
def defaultDeployAccount = script . commonPipelineEnvironment . getConfigProperty ( 'CI_DEPLOY_ACCOUNT' )
if ( defaultDeployAccount ) {
2018-08-15 09:26:38 +02:00
echo "[WARNING][${STEP_NAME}] A deprecated configuration framework is used for configuring parameter 'DEPLOY_ACCOUNT'. This configuration framekwork will be removed in future versions."
stepCompatibilityConfiguration . put ( 'account' , defaultDeployAccount )
2017-12-11 12:15:51 +02:00
}
2018-01-29 13:50:59 +02:00
if ( parameters . deployHost & & ! parameters . host ) {
2018-08-15 09:26:38 +02:00
echo "[WARNING][${STEP_NAME}] Deprecated parameter 'deployHost' is used. This will not work anymore in future versions. Use parameter 'host' instead."
2018-01-29 13:50:59 +02:00
parameters . put ( 'host' , parameters . deployHost )
2017-12-11 12:15:51 +02:00
}
2017-07-11 15:12:03 +02:00
2018-01-29 13:50:59 +02:00
if ( parameters . deployAccount & & ! parameters . account ) {
2018-08-15 09:26:38 +02:00
echo "[WARNING][${STEP_NAME}] Deprecated parameter 'deployAccount' is used. This will not work anymore in future versions. Use parameter 'account' instead."
2018-01-29 13:50:59 +02:00
parameters . put ( 'account' , parameters . deployAccount )
2017-07-11 15:12:03 +02:00
}
2018-01-30 18:09:17 +02:00
def credId = script . commonPipelineEnvironment . getConfigProperty ( 'neoCredentialsId' )
if ( credId & & ! parameters . neoCredentialsId ) {
2018-08-15 09:26:38 +02:00
echo "[WARNING][${STEP_NAME}] Deprecated parameter 'neoCredentialsId' from old configuration framework is used. This will not work anymore in future versions."
2018-01-30 18:09:17 +02:00
parameters . put ( 'neoCredentialsId' , credId )
}
2017-12-11 12:15:51 +02:00
// Backward compatibility end
2018-08-15 09:26:38 +02:00
// load default & individual configuration
Map configuration = ConfigurationHelper
. loadStepDefaults ( this )
. mixinGeneralConfig ( script . commonPipelineEnvironment , GENERAL_CONFIG_KEYS )
. mixin ( stepCompatibilityConfiguration )
. mixinStepConfig ( script . commonPipelineEnvironment , STEP_CONFIG_KEYS )
. mixinStageConfig ( script . commonPipelineEnvironment , parameters . stageName ? : env . STAGE_NAME , STEP_CONFIG_KEYS )
2018-08-17 12:52:01 +02:00
. addIfEmpty ( 'archivePath' , script . commonPipelineEnvironment . getMtarFilePath ( ) )
2018-08-15 09:26:38 +02:00
. mixin ( parameters , PARAMETER_KEYS )
. use ( )
2018-08-30 11:03:34 +02:00
utils . pushToSWA ( [
step: STEP_NAME ,
stepParam1: configuration . deployMode = = 'mta' ? 'mta' : 'war' , // ['mta', 'warParams', 'warPropertiesFile']
stepParam2: configuration . warAction = = 'rolling-update' ? 'blue-green' : 'standard' // ['deploy', 'deploy-mta', 'rolling-update']
] , configuration )
2017-12-11 12:15:51 +02:00
def archivePath = configuration . archivePath
if ( archivePath ? . trim ( ) ) {
if ( ! fileExists ( archivePath ) ) {
error "Archive cannot be found with parameter archivePath: '${archivePath}'."
}
} else {
error "Archive path not configured (parameter \"archivePath\")."
}
def deployHost
def deployAccount
2018-02-20 12:13:37 +02:00
def credentialsId = configuration . get ( 'neoCredentialsId' )
2017-12-11 12:15:51 +02:00
def deployMode = configuration . deployMode
def warAction
def propertiesFile
def applicationName
def runtime
def runtimeVersion
def vmSize
2017-12-28 14:10:11 +02:00
2018-04-20 12:23:26 +02:00
def deployModes = [ 'mta' , 'warParams' , 'warPropertiesFile' ]
if ( ! ( deployMode in deployModes ) ) {
throw new Exception ( "[neoDeploy] Invalid deployMode = '${deployMode}'. Valid 'deployMode' values are: ${deployModes}." )
2018-01-16 11:54:17 +02:00
}
2018-04-20 12:23:26 +02:00
if ( deployMode in [ 'warPropertiesFile' , 'warParams' ] ) {
2017-12-11 12:15:51 +02:00
warAction = utils . getMandatoryParameter ( configuration , 'warAction' )
2018-04-20 12:25:15 +02:00
def warActions = [ 'deploy' , 'rolling-update' ]
if ( ! ( warAction in warActions ) ) {
throw new Exception ( "[neoDeploy] Invalid warAction = '${warAction}'. Valid 'warAction' values are: ${warActions}." )
2018-01-16 11:54:17 +02:00
}
2018-04-20 15:00:21 +02:00
} else if ( deployMode = = 'mta' ) {
warAction = 'deploy-mta'
2018-01-16 11:54:17 +02:00
}
2017-12-11 12:15:51 +02:00
2018-01-17 12:17:24 +02:00
if ( deployMode = = 'warPropertiesFile' ) {
2017-12-11 12:15:51 +02:00
propertiesFile = utils . getMandatoryParameter ( configuration , 'propertiesFile' )
2018-01-12 14:02:48 +02:00
if ( ! fileExists ( propertiesFile ) ) {
2018-01-11 16:25:58 +02:00
error "Properties file cannot be found with parameter propertiesFile: '${propertiesFile}'."
}
2017-12-28 14:10:11 +02:00
}
2018-01-17 12:17:24 +02:00
if ( deployMode = = 'warParams' ) {
2017-12-11 12:15:51 +02:00
applicationName = utils . getMandatoryParameter ( configuration , 'applicationName' )
runtime = utils . getMandatoryParameter ( configuration , 'runtime' )
runtimeVersion = utils . getMandatoryParameter ( configuration , 'runtimeVersion' )
2018-04-20 12:24:37 +02:00
def vmSizes = [ 'lite' , 'pro' , 'prem' , 'prem-plus' ]
2017-12-11 12:15:51 +02:00
vmSize = configuration . vmSize
2018-04-20 12:24:37 +02:00
if ( ! ( vmSize in vmSizes ) ) {
throw new Exception ( "[neoDeploy] Invalid vmSize = '${vmSize}'. Valid 'vmSize' values are: ${vmSizes}." )
2018-01-11 16:25:58 +02:00
}
2017-12-28 14:10:11 +02:00
}
2018-04-20 12:23:26 +02:00
if ( deployMode in [ 'mta' , 'warParams' ] ) {
2017-12-11 12:15:51 +02:00
deployHost = utils . getMandatoryParameter ( configuration , 'host' )
deployAccount = utils . getMandatoryParameter ( configuration , 'account' )
2017-12-28 14:10:11 +02:00
}
2018-07-27 14:09:08 +02:00
def neo = new ToolDescriptor ( 'SAP Cloud Platform Console Client' , 'NEO_HOME' , 'neoHome' , '/tools/' , 'neo.sh' , null , 'version' )
def neoExecutable = neo . getToolExecutable ( this , configuration )
def neoDeployScript = "" " # ! /bin/ bash
"${neoExecutable}" $ { warAction } \
2018-04-20 15:42:58 +02:00
- - source "${archivePath}" \
2018-07-27 14:09:08 +02:00
"" "
2018-04-20 15:20:50 +02:00
if ( deployMode in [ 'mta' , 'warParams' ] ) {
2018-07-27 14:09:08 +02:00
neoDeployScript + =
2018-04-20 15:11:54 +02:00
"" " - - host '${deployHost}' \
2017-12-13 11:05:19 +02:00
- - account '${deployAccount}' \
2018-04-20 15:20:50 +02:00
"" "
}
if ( deployMode = = 'mta' ) {
2018-07-27 14:09:08 +02:00
neoDeployScript + = "--synchronous"
2017-12-13 11:05:19 +02:00
}
if ( deployMode = = 'warParams' ) {
2018-07-27 14:09:08 +02:00
neoDeployScript + =
2018-04-20 15:20:50 +02:00
"" " - - application '${applicationName}' \
2017-12-13 11:05:19 +02:00
- - runtime '${runtime}' \
- - runtime - version '${runtimeVersion}' \
- - size '${vmSize}' "" "
}
if ( deployMode = = 'warPropertiesFile' ) {
2018-07-27 14:09:08 +02:00
neoDeployScript + =
2018-04-20 15:11:54 +02:00
"""${propertiesFile}"""
2017-12-13 11:05:19 +02:00
}
2018-01-10 14:22:36 +02:00
withCredentials ( [ usernamePassword (
credentialsId: credentialsId ,
passwordVariable: 'password' ,
usernameVariable: 'username' ) ] ) {
2018-04-20 15:44:39 +02:00
def credentials =
2018-01-10 14:22:36 +02:00
"" " - - user '${username}' \
- - password '${password}' \
"" "
2017-12-13 11:05:19 +02:00
dockerExecute ( dockerImage: configuration . get ( 'dockerImage' ) ,
dockerEnvVars: configuration . get ( 'dockerEnvVars' ) ,
dockerOptions: configuration . get ( 'dockerOptions' ) ) {
2018-01-10 14:22:36 +02:00
2018-07-27 14:09:08 +02:00
neo . verify ( this , configuration )
2018-03-19 19:29:41 +02:00
def java = new ToolDescriptor ( 'Java' , 'JAVA_HOME' , '' , '/bin/' , 'java' , '1.8.0' , '-version 2>&1' )
java . verify ( this , configuration )
2018-03-06 17:09:03 +02:00
2018-07-27 14:09:08 +02:00
sh "" " $ { neoDeployScript } \
2018-04-20 15:44:39 +02:00
$ { credentials }
2017-12-28 14:10:11 +02:00
"" "
}
2017-07-11 15:12:03 +02:00
}
}
}