Skip to content

Commit

Permalink
Merge pull request #69 from alejandraferreirovidal/mtaBuildNewConfig
Browse files Browse the repository at this point in the history
mtaBuild with new config framework
  • Loading branch information
alejandraferreirovidal committed Feb 9, 2018
2 parents 157c9ca + 9dafdd1 commit 68c666f
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 33 deletions.
3 changes: 3 additions & 0 deletions resources/default_pipeline_environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ steps:
dockerImage: 'maven:3.5-jdk-7'
influxWriteData:
influxServer: 'jenkins'
mtaBuild:
buildTarget: 'NEO'
neoDeploy:
deployMode: 'mta'
warAction: 'deploy'
vmSize: 'lite'
neoCredentialsId: 'CI_CREDENTIALS_ID'

15 changes: 15 additions & 0 deletions src/com/sap/piper/ConfigurationMerger.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,19 @@ class ConfigurationMerger {

return merged
}

@NonCPS
def static merge(
Map parameters, List parameterKeys,
Map generalConfigurationMap, List generalConfigurationKeys, Map generalConfigurationDefaults,
Map stepConfigurationMap, List stepConfigurationKeys, Map stepConfigurationDefaults=[:]
){
Map merged
Map mergedStepConfiguration = merge(stepConfigurationMap, stepConfigurationKeys, stepConfigurationDefaults)
Map mergedGeneralConfiguration = merge(generalConfigurationMap, generalConfigurationKeys, generalConfigurationDefaults)
merged = merge(mergedGeneralConfiguration, null, mergedStepConfiguration)
merged = merge(parameters, parameterKeys, merged)

return merged
}
}
62 changes: 46 additions & 16 deletions test/groovy/MTABuildTest.groovy
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import hudson.AbortException
import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.Yaml
import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.parser.ParserException
import org.yaml.snakeyaml.Yaml
import org.yaml.snakeyaml.parser.ParserException
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -42,10 +42,6 @@ public class MTABuildTest extends BasePipelineTest {
mtaYaml = new File("$currentDir/mta.yaml")
mtaYaml << defaultMtaYaml()

helper.registerAllowedMethod('readYaml', [Map], {
m ->
return new Yaml().load((m.file as File).text)
})
helper.registerAllowedMethod('pwd', [], { currentDir } )

binding.setVariable('PATH', '/usr/bin')
Expand Down Expand Up @@ -123,7 +119,7 @@ public class MTABuildTest extends BasePipelineTest {

assert jscr.shell[1].contains(' -jar /mylocation/mta/mta.jar --mtar ')

assert jlr.log.contains('[mtaBuild] MTA JAR "/mylocation/mta/mta.jar" retrieved from parameters.')
assert jlr.log.contains('[mtaBuild] MTA JAR "/mylocation/mta/mta.jar" retrieved from configuration.')
}


Expand Down Expand Up @@ -162,25 +158,59 @@ public class MTABuildTest extends BasePipelineTest {


@Test
void noBuildTargetTest() {
void mtaJarLocationFromEnvironmentTest() {

thrown.expect(Exception)
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR buildTarget')
binding.setVariable('env', [:])
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/env/mta'

mtaBuildScript.call(buildTarget: 'NEO')

mtaBuildScript.call()
assert jscr.shell[1].contains('-jar /env/mta/mta.jar --mtar')
assert jlr.log.contains('[mtaBuild] MTA JAR "/env/mta/mta.jar" retrieved from environment.')
}


@Test
void mtaJarLocationFromEnvironmentTest() {
void mtaJarLocationFromCustomStepConfigurationTest() {

binding.setVariable('env', [:])
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/env/mta'
cpe.configuration = [general:[mtaJarLocation: '/general/mta']]

mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')

assert jscr.shell[1].contains('-jar /general/mta/mta.jar --mtar')
assert jlr.log.contains('[mtaBuild] MTA JAR "/general/mta/mta.jar" retrieved from configuration.')
}


@Test
void buildTargetFromParametersTest() {

mtaBuildScript.call(buildTarget: 'NEO')

assert jscr.shell[1].contains('-jar /env/mta/mta.jar --mtar')
assert jlr.log.contains('[mtaBuild] MTA JAR "/env/mta/mta.jar" retrieved from environment.')
assert jscr.shell[1].contains('java -jar mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')
}


@Test
void buildTargetFromCustomStepConfigurationTest() {

cpe.configuration = [steps:[mtaBuild:[buildTarget: 'NEO']]]

mtaBuildScript.call(script: [commonPipelineEnvironment: cpe])

assert jscr.shell[1].contains('java -jar mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')
}


@Test
void buildTargetFromDefaultStepConfigurationTest() {

cpe.defaultConfiguration = [steps:[mtaBuild:[buildTarget: 'NEO']]]

mtaBuildScript.call(script: [commonPipelineEnvironment: cpe])

assert jscr.shell[1].contains('java -jar mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')
}


Expand Down
2 changes: 1 addition & 1 deletion test/groovy/util/JenkinsReadYamlRule.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class JenkinsReadYamlRule implements TestRule {
if(m.text) {
return new Yaml().load(m.text)
} else if(m.file) {
throw new UnsupportedOperationException()
return new Yaml().load((m.file as File).text)
} else {
throw new IllegalArgumentException("Key 'text' is missing in map ${m}.")
}
Expand Down
55 changes: 39 additions & 16 deletions vars/mtaBuild.groovy
Original file line number Diff line number Diff line change
@@ -1,16 +1,37 @@
import com.sap.piper.Utils
import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger


def call(Map parameters = [:]) {

handlePipelineStepErrors (stepName: 'mtaBuild', stepParameters: parameters) {
def stepName = 'mtaBuild'

def utils = new Utils()
def buildTarget = utils.getMandatoryParameter(parameters, 'buildTarget', null)
def script = parameters.script
if (script == null){
script = [commonPipelineEnvironment: commonPipelineEnvironment]
}
List parameterKeys = [
'buildTarget',
'mtaJarLocation'
]

List stepConfigurationKeys = [
'buildTarget'
]

List generalConfigurationKeys = [
'mtaJarLocation'
]

handlePipelineStepErrors (stepName: stepName, stepParameters: parameters) {

final script = parameters?.script ?: [commonPipelineEnvironment: commonPipelineEnvironment]

prepareDefaultValues script: script

final Map stepConfiguration = ConfigurationLoader.stepConfiguration(script, stepName)
final Map stepDefaults = ConfigurationLoader.defaultStepConfiguration(script, stepName)
final Map generalConfiguration = ConfigurationLoader.generalConfiguration(script)
final Map configuration = ConfigurationMerger.merge(
parameters, parameterKeys,
generalConfiguration, generalConfigurationKeys, [:],
stepConfiguration, stepConfigurationKeys, stepDefaults)

def mtaYaml = readYaml file: "${pwd()}/mta.yaml"

Expand All @@ -24,35 +45,37 @@ def call(Map parameters = [:]) {

def mtarFileName = "${id}.mtar"

def mtaJar = getMtaJar(parameters)
def mtaJar = getMtaJar(stepName, configuration)
def buildTarget = configuration.buildTarget

sh """#!/bin/bash
export PATH=./node_modules/.bin:${PATH}
java -jar ${mtaJar} --mtar ${mtarFileName} --build-target=${buildTarget} build
"""

def mtarFilePath = "${pwd()}/${mtarFileName}"
script.commonPipelineEnvironment.setMtarFilePath(mtarFilePath)
script?.commonPipelineEnvironment?.setMtarFilePath(mtarFilePath)

return mtarFilePath
}
}

private getMtaJar(parameters) {
private getMtaJar(stepName, configuration) {
def mtaJarLocation = 'mta.jar' //default, maybe it is in current working directory

if(parameters?.mtaJarLocation){
mtaJarLocation = "${parameters.mtaJarLocation}/mta.jar"
echo "[mtaBuild] MTA JAR \"${mtaJarLocation}\" retrieved from parameters."
if(configuration?.mtaJarLocation){
mtaJarLocation = "${configuration.mtaJarLocation}/mta.jar"
echo "[$stepName] MTA JAR \"${mtaJarLocation}\" retrieved from configuration."
return mtaJarLocation
}

if(env?.MTA_JAR_LOCATION){
mtaJarLocation = "${env.MTA_JAR_LOCATION}/mta.jar"
echo "[mtaBuild] MTA JAR \"${mtaJarLocation}\" retrieved from environment."
echo "[$stepName] MTA JAR \"${mtaJarLocation}\" retrieved from environment."
return mtaJarLocation
}

echo "[mtaBuild] Using MTA JAR from current working directory."
echo "[$stepName] Using MTA JAR from current working directory."
return mtaJarLocation
}

0 comments on commit 68c666f

Please sign in to comment.