Skip to content
This repository has been archived by the owner on Nov 2, 2023. It is now read-only.

Commit

Permalink
Merge branch 'master' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
s4sdkJenkinsBot committed Jun 5, 2020
2 parents ef6d6d2 + b374959 commit 747d089
Show file tree
Hide file tree
Showing 31 changed files with 111 additions and 205 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ out/
.vscode/
bin
vars/pipeline.gdsl
/libs/
13 changes: 12 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
buildscript { repositories { mavenCentral() } }

plugins {
id "de.undercouch.download" version "4.0.4"
}

apply plugin: 'groovy'

Expand All @@ -20,7 +23,7 @@ dependencies {
implementation group: 'org.jenkins-ci.plugins', name: 'junit', version: '1.26', ext: 'jar'
implementation group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-cps-global-lib', version: '2.12'
implementation group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-cps-global-lib', version: '2.12', ext: 'jar'
implementation files('libs/jenkins-library.jar') //FIXME Only for running the tests, find better option to do this
implementation files('libs/jenkins-library.jar')
ivy group:'org.apache.ivy', name:'ivy', version:'2.4.0'
implementation group:'org.apache.ivy', name:'ivy', version:'2.4.0'
testImplementation group:'junit', name:'junit', version:'4.12'
Expand All @@ -42,4 +45,12 @@ test {
forkEvery=1
}

task downloadPiper(type: Download) {
src 'https://github.com/SAP/jenkins-library/releases/download/v1.39.0/jenkins-library.jar'
dest 'libs/jenkins-library.jar'
onlyIfModified true
}

tasks.withType(GroovyCompile) { groovyClasspath += configurations.ivy }

compileGroovy.dependsOn 'downloadPiper'
Binary file removed libs/jenkins-library.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion resources/containers_map.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ containerMaps:
frontendUnitTests:
- executeNpm
fortifyScan:
- executeFortifyScan
- fortifyExecuteScan
npmAudit:
- executeNpm
endToEndTests:
Expand Down
16 changes: 7 additions & 9 deletions resources/default_s4_pipeline_environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ general:
defaultNode: ""
automaticVersioning: true
runStageInPod: true
maven:
m2Path: s4hana_pipeline/maven_local_repo
mandatoryStages:
- "initS4sdkPipeline"
- "build"
Expand Down Expand Up @@ -36,7 +38,6 @@ steps:
mavenExecute:
dockerImage: maven:3.6.3-jdk-8-slim
dockerOptions: ""
m2Path: s4hana_pipeline/maven_local_repo

executeNpm:
dockerImage: ppiper/node-browsers:v3
Expand All @@ -56,14 +57,6 @@ steps:
createHdiContainer:
dockerImage: ppiper/cf-cli:v2

executeFortifyScan:
verbose: false
sourceVersion: 1.8
use64BitVersion: true
maximumMemoryUsage: 3000M
exclude: "**/resources/**/*,**/target/**/*,**/unit-tests/**/*,**/integration-tests/**/*"
skipNgComponents: true

checkPmd:
scanModules:
- "application"
Expand Down Expand Up @@ -91,6 +84,11 @@ steps:
mtaBuild:
buildTarget: "CF"
mtaBuildTool: "cloudMbt"
#TODO Workarround to build containers map. Can be removed after init of containers map is fixed for go.
classic:
dockerImage: 'ppiper/mta-archive-builder:v1'
cloudMbt:
dockerImage: 'devxci/mbtci:1.0.14'

checkFrontendCodeCoverage:
codeCoverageFrontend:
Expand Down
3 changes: 3 additions & 0 deletions test/StageSonarQubeScanTest.groovy
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import com.sap.cloud.sdk.s4hana.pipeline.util.BaseCloudSdkTest
import com.sap.cloud.sdk.s4hana.pipeline.util.TestUtils
import org.junit.Before
import org.junit.Test

Expand All @@ -20,6 +21,8 @@ class StageSonarQubeScanTest extends BaseCloudSdkTest {
closure.call()
})

TestUtils.registerStep(this, 'loadEffectiveStageConfiguration')

helper.registerAllowedMethod('findFiles', [Map.class], { Map parameters ->
switch (parameters.glob){
case '**/target/**/*.exec':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class BaseCloudSdkTest extends BasePipelineTest {

BaseCloudSdkTest() {
scriptRoots += 'src/com/sap/cloud/sdk/s4hana/pipeline/'
scriptRoots += 'vars/'
dummyScript = new NullScript(this)
}

Expand Down
12 changes: 12 additions & 0 deletions test/com/sap/cloud/sdk/s4hana/pipeline/util/TestUtils.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.sap.cloud.sdk.s4hana.pipeline.util

import com.lesfurets.jenkins.unit.BasePipelineTest

class TestUtils {
static registerStep(BasePipelineTest test, String stepName){
Script step = test.helper.loadScript("${stepName}.groovy")
test.helper.registerAllowedMethod(stepName, [Map.class], { Map parameters ->
step.call(parameters)
})
}
}
4 changes: 2 additions & 2 deletions vars/checkDeploymentDescriptors.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ def call(Map parameters = [:]) {
Set keys = ['unsafeMode']
Map defaultGeneralConfiguration = ConfigurationLoader.defaultGeneralConfiguration(script)
Map projectGeneralConfiguration = ConfigurationLoader.generalConfiguration(script)
Map stageConfiguration = ConfigurationLoader.stageConfiguration(script, "productionDeployment")
Map stepConfiguration = ConfigurationLoader.stepConfiguration(script, "cloudFoundryDeploy")
Map stageConfiguration = loadEffectiveStageConfiguration(script: script, stageName: "productionDeployment")
Map stepConfiguration = loadEffectiveStepConfiguration(script: script, stepName: "cloudFoundryDeploy")
Map generalConfig = ConfigurationMerger.merge(projectGeneralConfiguration, keys, defaultGeneralConfiguration)
boolean unsafeMode = generalConfig.unsafeMode
boolean safeMode = !unsafeMode
Expand Down
22 changes: 16 additions & 6 deletions vars/checkLegacyConfiguration.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ def call(Map parameters) {
convertDebugReportConfig(script)
checkStaticCodeChecksConfig(script)
checkSharedConfig(script)
checkFortify(script)
}

void checkRenamedBackendIntegrationTests(Script script) {
Expand All @@ -24,7 +25,7 @@ void checkRenamedMavenStep(Script script) {
}

void checkMavenGlobalSettings(Script script) {
Map mavenConfiguration = ConfigurationLoader.stepConfiguration(script, 'mavenExecute')
Map mavenConfiguration = loadEffectiveStepConfiguration(script: script, stepName: 'mavenExecute')

// Maven globalSettings obsolete since introduction of DL-Cache
if (mavenConfiguration?.globalSettingsFile) {
Expand All @@ -36,7 +37,7 @@ void checkMavenGlobalSettings(Script script) {
}

void checkNotUsingWhiteSourceOrgToken(Script script) {
Map stageConfig = ConfigurationLoader.stageConfiguration(script, 'whitesourceScan')
Map stageConfig = loadEffectiveStageConfiguration(script: script, stageName:'whitesourceScan')
if (stageConfig?.orgToken) {
failWithConfigError("Your pipeline configuration may not use 'orgtoken' in whiteSourceScan stage. " +
"Store it as a 'Secret Text' in Jenkins and use the 'credentialsId' field instead.")
Expand All @@ -60,8 +61,8 @@ boolean convertDebugReportConfig(Script script) {
}

void checkStaticCodeChecksConfig(Script script) {
if (ConfigurationLoader.stageConfiguration(script, 'staticCodeChecks')) {
failWithConfigError("You pipeline configuration contains an entry for the stage staticCodeChecks. " +
if (loadEffectiveStageConfiguration(script: script, stageName: 'staticCodeChecks')) {
failWithConfigError("Your pipeline configuration contains an entry for the stage staticCodeChecks. " +
"This configuration option was removed in version v32. " +
"Please migrate the configuration into your pom.xml file or the configuration for the new step mavenExecuteStaticCodeChecks. " +
"Details can be found in the release notes as well as in the step documentation: https://sap.github.io/jenkins-library/steps/mavenExecuteStaticCodeChecks/.")
Expand All @@ -79,15 +80,24 @@ void checkSharedConfig(Script script) {
}
}

void checkFortify(Script script){
checkRenamedStep(script, 'executeFortifyScan', 'fortifyExecuteScan')
if (ConfigurationLoader.stageConfiguration(script, 'fortifyScan')) {
failWithConfigError("Your pipeline configuration contains an entry for the stage fortifyScan. " +
"This configuration option was removed. To configure fortify please use the step configuration for fortifyExecuteScan. " +
"Details can be found in the documentation: https://sap.github.io/jenkins-library/steps/fortifyExecuteScan/")
}
}

private checkRenamedStep(Script script, String oldName, String newName) {
if (ConfigurationLoader.stepConfiguration(script, oldName)) {
if (loadEffectiveStepConfiguration(script: script, stepName: oldName)) {
failWithConfigError("The configuration key ${oldName} in the steps configuration may not be used anymore. " +
"Please use ${newName} instead.")
}
}

private checkRenamedStage(Script script, String oldName, String newName) {
if (ConfigurationLoader.stageConfiguration(script, oldName)){
if (loadEffectiveStageConfiguration(script: script, stageName: oldName)){
failWithConfigError("The configuration key ${oldName} in the stages configuration may not be used anymore. " +
"Please use ${newName} instead. " +
"For more information please visit https://github.com/SAP/cloud-s4-sdk-pipeline/blob/master/configuration.md")
Expand Down
140 changes: 0 additions & 140 deletions vars/executeFortifyScan.groovy

This file was deleted.

8 changes: 3 additions & 5 deletions vars/initContainersMap.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ def getContainerForStage(script, stageName, List stepsList) {
}

def getDockerImageNameForStep(script, stageName, stepName) {
def stageConfiguration = ConfigurationLoader.stageConfiguration(script, stageName)
final Map stepDefaults = ConfigurationLoader.defaultStepConfiguration(script, stepName)
final Map stageConfiguration = loadEffectiveStageConfiguration(script: script, stageName: stageName)
final Map stepConfiguration = loadEffectiveStepConfiguration(script: script, stepName: stepName)

final Map stepConfiguration = ConfigurationLoader.stepConfiguration(script, stepName)

Map configuration = ConfigurationMerger.merge(stageConfiguration, null, stepConfiguration, null, stepDefaults)
Map configuration = ConfigurationMerger.merge(stageConfiguration, null, stepConfiguration)

String dockerImage = configuration.dockerImage

Expand Down
2 changes: 1 addition & 1 deletion vars/initStageSkipConfiguration.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def call(Map parameters) {
script.commonPipelineEnvironment.configuration.runStage.SOURCE_CLEAR_SCAN = true
}

if (ConfigurationLoader.stageConfiguration(script, 'fortifyScan') && isProductiveBranch(script: script)) {
if (loadEffectiveStepConfiguration(script: script, stepName: 'fortifyExecuteScan')?.fortifyCredentialsId && isProductiveBranch(script: script)) {
script.commonPipelineEnvironment.configuration.runStage.FORTIFY_SCAN = true
}

Expand Down
15 changes: 15 additions & 0 deletions vars/loadEffectiveStageConfiguration.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger

def call(Map parameters) {
def script = parameters.script
def stageName = parameters.stageName
def stageConfigurationKeys = parameters.stageConfigurationKeys

Map stageConfiguration = ConfigurationLoader.stageConfiguration(script, stageName)
Map defaultStageConfiguration = ConfigurationLoader.defaultStageConfiguration(script, stageName)
Map configWithDefault = ConfigurationMerger.merge(stageConfiguration, stageConfigurationKeys, defaultStageConfiguration)

return configWithDefault
}

14 changes: 14 additions & 0 deletions vars/loadEffectiveStepConfiguration.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import com.sap.piper.ConfigurationLoader
import com.sap.piper.ConfigurationMerger

def call(Map parameters) {
def script = parameters.script
def stepName = parameters.stepName
def stepConfigKeys = parameters.stepConfigKeys

Map stepConfiguration = ConfigurationLoader.stepConfiguration(script, stepName)
Map defaultStepConfiguration = ConfigurationLoader.defaultStepConfiguration(script, stepName)
Map configWithDefault = ConfigurationMerger.merge(stepConfiguration, stepConfigKeys, defaultStepConfiguration)

return configWithDefault
}
Loading

0 comments on commit 747d089

Please sign in to comment.