You've already forked sap-jenkins-library
mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-12-03 23:10:20 +02:00
Add Changes for value of docker image (#3303)
* Add Changes for value of docker image * Get docker image value * Fix * Fix unit * Add chnages for kaniko and mta builds * Fix * Test changes * Test * Move func ResolveMetadata to stepmeta.go * Fix * Change getConfig.go * Fix getting docker value for mta, npm and kaniko * Fix according to suggestions * Add func to get only value of docker image * Test empty value of docker image * Fix for getDockerImageValue Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
This commit is contained in:
@@ -75,8 +75,25 @@ func ConfigCommand() *cobra.Command {
|
||||
return createConfigCmd
|
||||
}
|
||||
|
||||
func generateConfig(utils getConfigUtils) error {
|
||||
func getDockerImageValue(stepName string) (string, error) {
|
||||
|
||||
configOptions.contextConfig = true
|
||||
configOptions.stepName = stepName
|
||||
stepConfig, err := getConfig()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
var dockerImageValue string
|
||||
dockerImageValue, ok := stepConfig.Config["dockerImage"].(string)
|
||||
if !ok {
|
||||
log.Entry().Infof("Config value of %v to compare with is not a string", stepConfig.Config["dockerImage"])
|
||||
}
|
||||
|
||||
return dockerImageValue, nil
|
||||
}
|
||||
|
||||
func getConfig() (config.StepConfig, error) {
|
||||
var myConfig config.Config
|
||||
var stepConfig config.StepConfig
|
||||
|
||||
@@ -86,7 +103,7 @@ func generateConfig(utils getConfigUtils) error {
|
||||
customConfig, err := configOptions.openFile(projectConfigFile, GeneralConfig.GitHubAccessTokens)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return errors.Wrapf(err, "config: open configuration file '%v' failed", projectConfigFile)
|
||||
return stepConfig, errors.Wrapf(err, "config: open configuration file '%v' failed", projectConfigFile)
|
||||
}
|
||||
customConfig = nil
|
||||
}
|
||||
@@ -96,7 +113,7 @@ func generateConfig(utils getConfigUtils) error {
|
||||
fc, err := configOptions.openFile(f, GeneralConfig.GitHubAccessTokens)
|
||||
// only create error for non-default values
|
||||
if err != nil && f != ".pipeline/defaults.yaml" {
|
||||
return errors.Wrapf(err, "config: getting defaults failed: '%v'", f)
|
||||
return stepConfig, errors.Wrapf(err, "config: getting defaults failed: '%v'", f)
|
||||
}
|
||||
if err == nil {
|
||||
defaultConfig = append(defaultConfig, fc)
|
||||
@@ -105,13 +122,14 @@ func generateConfig(utils getConfigUtils) error {
|
||||
|
||||
stepConfig, err = myConfig.GetStageConfig(GeneralConfig.ParametersJSON, customConfig, defaultConfig, GeneralConfig.IgnoreCustomDefaults, configOptions.stageConfigAcceptedParameters, GeneralConfig.StageName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "getting stage config failed")
|
||||
return stepConfig, errors.Wrap(err, "getting stage config failed")
|
||||
}
|
||||
|
||||
} else {
|
||||
metadata, err := resolveMetadata()
|
||||
log.Entry().Infof("Printing stepName %s", configOptions.stepName)
|
||||
metadata, err := config.ResolveMetadata(GeneralConfig.GitHubAccessTokens, GetAllStepMetadata, configOptions.stepMetadata, configOptions.stepName)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to resolve metadata")
|
||||
return stepConfig, errors.Wrapf(err, "failed to resolve metadata")
|
||||
}
|
||||
|
||||
// prepare output resource directories:
|
||||
@@ -128,21 +146,21 @@ func generateConfig(utils getConfigUtils) error {
|
||||
customConfig, err := configOptions.openFile(projectConfigFile, GeneralConfig.GitHubAccessTokens)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return errors.Wrapf(err, "config: open configuration file '%v' failed", projectConfigFile)
|
||||
return stepConfig, errors.Wrapf(err, "config: open configuration file '%v' failed", projectConfigFile)
|
||||
}
|
||||
customConfig = nil
|
||||
}
|
||||
|
||||
defaultConfig, paramFilter, err := defaultsAndFilters(&metadata, metadata.Metadata.Name)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "defaults: retrieving step defaults failed")
|
||||
return stepConfig, errors.Wrap(err, "defaults: retrieving step defaults failed")
|
||||
}
|
||||
|
||||
for _, f := range GeneralConfig.DefaultConfig {
|
||||
fc, err := configOptions.openFile(f, GeneralConfig.GitHubAccessTokens)
|
||||
// only create error for non-default values
|
||||
if err != nil && f != ".pipeline/defaults.yaml" {
|
||||
return errors.Wrapf(err, "config: getting defaults failed: '%v'", f)
|
||||
return stepConfig, errors.Wrapf(err, "config: getting defaults failed: '%v'", f)
|
||||
}
|
||||
if err == nil {
|
||||
defaultConfig = append(defaultConfig, fc)
|
||||
@@ -158,7 +176,7 @@ func generateConfig(utils getConfigUtils) error {
|
||||
|
||||
stepConfig, err = myConfig.GetStepConfig(flags, GeneralConfig.ParametersJSON, customConfig, defaultConfig, GeneralConfig.IgnoreCustomDefaults, paramFilter, params, metadata.Spec.Inputs.Secrets, resourceParams, GeneralConfig.StageName, metadata.Metadata.Name, metadata.Metadata.Aliases)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "getting step config failed")
|
||||
return stepConfig, errors.Wrap(err, "getting step config failed")
|
||||
}
|
||||
|
||||
// apply context conditions if context configuration is requested
|
||||
@@ -166,6 +184,15 @@ func generateConfig(utils getConfigUtils) error {
|
||||
applyContextConditions(metadata, &stepConfig)
|
||||
}
|
||||
}
|
||||
return stepConfig, nil
|
||||
}
|
||||
|
||||
func generateConfig(utils getConfigUtils) error {
|
||||
|
||||
stepConfig, err := getConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
myConfigJSON, _ := config.GetJSON(stepConfig.Config)
|
||||
|
||||
@@ -253,33 +280,3 @@ func prepareOutputEnvironment(outputResources []config.StepResources, envRootPat
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func resolveMetadata() (config.StepData, error) {
|
||||
var metadata config.StepData
|
||||
if configOptions.stepMetadata != "" {
|
||||
metadataFile, err := configOptions.openFile(configOptions.stepMetadata, GeneralConfig.GitHubAccessTokens)
|
||||
if err != nil {
|
||||
return metadata, errors.Wrap(err, "open failed")
|
||||
}
|
||||
|
||||
err = metadata.ReadPipelineStepData(metadataFile)
|
||||
if err != nil {
|
||||
return metadata, errors.Wrap(err, "read failed")
|
||||
}
|
||||
} else {
|
||||
if configOptions.stepName != "" {
|
||||
if GeneralConfig.MetaDataResolver == nil {
|
||||
GeneralConfig.MetaDataResolver = GetAllStepMetadata
|
||||
}
|
||||
metadataMap := GeneralConfig.MetaDataResolver()
|
||||
var ok bool
|
||||
metadata, ok = metadataMap[configOptions.stepName]
|
||||
if !ok {
|
||||
return metadata, errors.Errorf("could not retrieve by stepName %v", configOptions.stepName)
|
||||
}
|
||||
} else {
|
||||
return metadata, errors.Errorf("either one of stepMetadata or stepName parameter has to be passed")
|
||||
}
|
||||
}
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
@@ -311,25 +311,3 @@ func TestPrepareOutputEnvironment(t *testing.T) {
|
||||
assert.NoDirExists(t, filepath.Join(dir, "influx", "measurement0", "influx0_0"))
|
||||
assert.NoDirExists(t, filepath.Join(dir, "influx", "measurement1", "influx0_1"))
|
||||
}
|
||||
|
||||
func TestResolveMetadata(t *testing.T) {
|
||||
|
||||
t.Run("Succes - stepName", func(t *testing.T) {
|
||||
configOptions.stepName = "githubCreateIssue"
|
||||
stepData, err := resolveMetadata()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "githubCreateIssue", stepData.Metadata.Name)
|
||||
})
|
||||
|
||||
t.Run("Error - wrong stepName", func(t *testing.T) {
|
||||
configOptions.stepName = "notExisting"
|
||||
_, err := resolveMetadata()
|
||||
assert.EqualError(t, err, "could not retrieve by stepName notExisting")
|
||||
})
|
||||
|
||||
t.Run("Error - missing input", func(t *testing.T) {
|
||||
configOptions.stepName = ""
|
||||
_, err := resolveMetadata()
|
||||
assert.EqualError(t, err, "either one of stepMetadata or stepName parameter has to be passed")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/buildsettings"
|
||||
"github.com/SAP/jenkins-library/pkg/certutils"
|
||||
piperhttp "github.com/SAP/jenkins-library/pkg/http"
|
||||
"github.com/pkg/errors"
|
||||
@@ -101,6 +102,22 @@ func runKanikoExecute(config *kanikoExecuteOptions, telemetryData *telemetry.Cus
|
||||
}
|
||||
}
|
||||
|
||||
log.Entry().Debugf("creating build settings information...")
|
||||
stepName := "kanikoExecute"
|
||||
dockerImage, err := getDockerImageValue(stepName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
kanikoConfig := buildsettings.BuildOptions{
|
||||
DockerImage: dockerImage,
|
||||
}
|
||||
buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&kanikoConfig, stepName)
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info: %v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = buildSettingsInfo
|
||||
|
||||
if err := fileUtils.FileWrite("/kaniko/.docker/config.json", dockerConfig, 0644); err != nil {
|
||||
return errors.Wrap(err, "failed to write file '/kaniko/.docker/config.json'")
|
||||
}
|
||||
|
||||
@@ -35,6 +35,9 @@ type kanikoExecuteCommonPipelineEnvironment struct {
|
||||
registryURL string
|
||||
imageNameTag string
|
||||
}
|
||||
custom struct {
|
||||
buildSettingsInfo string
|
||||
}
|
||||
}
|
||||
|
||||
func (p *kanikoExecuteCommonPipelineEnvironment) persist(path, resourceName string) {
|
||||
@@ -45,6 +48,7 @@ func (p *kanikoExecuteCommonPipelineEnvironment) persist(path, resourceName stri
|
||||
}{
|
||||
{category: "container", name: "registryUrl", value: p.container.registryURL},
|
||||
{category: "container", name: "imageNameTag", value: p.container.imageNameTag},
|
||||
{category: "custom", name: "buildSettingsInfo", value: p.custom.buildSettingsInfo},
|
||||
}
|
||||
|
||||
errCount := 0
|
||||
@@ -308,6 +312,7 @@ func kanikoExecuteMetadata() config.StepData {
|
||||
Parameters: []map[string]interface{}{
|
||||
{"Name": "container/registryUrl"},
|
||||
{"Name": "container/imageNameTag"},
|
||||
{"Name": "custom/buildSettingsInfo"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -85,7 +85,13 @@ func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomDat
|
||||
|
||||
_, err := maven.Execute(&mavenOptions, utils)
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
log.Entry().Debugf("creating build settings information...")
|
||||
stepName := "mavenBuild"
|
||||
dockerImage, err := getDockerImageValue(stepName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mavenConfig := buildsettings.BuildOptions{
|
||||
Profiles: config.Profiles,
|
||||
GlobalSettingsFile: config.GlobalSettingsFile,
|
||||
@@ -93,12 +99,13 @@ func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomDat
|
||||
CreateBOM: config.CreateBOM,
|
||||
Publish: config.Publish,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
DockerImage: dockerImage,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&mavenConfig, "mavenBuild")
|
||||
buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&mavenConfig, stepName)
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
log.Entry().Warnf("failed to create build settings info: %v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = buildSettingsInfo
|
||||
|
||||
if err == nil {
|
||||
if config.Publish && !config.Verify {
|
||||
|
||||
@@ -234,18 +234,26 @@ func runMtaBuild(config mtaBuildOptions,
|
||||
return err
|
||||
}
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
log.Entry().Debugf("creating build settings information...")
|
||||
stepName := "mtaBuild"
|
||||
dockerImage, err := getDockerImageValue(stepName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mtaConfig := buildsettings.BuildOptions{
|
||||
Profiles: config.Profiles,
|
||||
GlobalSettingsFile: config.GlobalSettingsFile,
|
||||
Publish: config.Publish,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
DefaultNpmRegistry: config.DefaultNpmRegistry,
|
||||
DockerImage: dockerImage,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&mtaConfig, "mtaBuild")
|
||||
buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&mtaConfig, stepName)
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
log.Entry().Warnf("failed to create build settings info: %v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = buildSettingsInfo
|
||||
|
||||
commonPipelineEnvironment.mtarFilePath = mtarName
|
||||
|
||||
|
||||
@@ -47,18 +47,25 @@ func runNpmExecuteScripts(npmExecutor npm.Executor, config *npmExecuteScriptsOpt
|
||||
return err
|
||||
}
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
log.Entry().Debugf("creating build settings information...")
|
||||
stepName := "npmExecuteScripts"
|
||||
dockerImage, err := getDockerImageValue(stepName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
npmConfig := buildsettings.BuildOptions{
|
||||
Publish: config.Publish,
|
||||
CreateBOM: config.CreateBOM,
|
||||
DefaultNpmRegistry: config.DefaultNpmRegistry,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
DockerImage: dockerImage,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&npmConfig, "npmExecuteScripts")
|
||||
buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&npmConfig, stepName)
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
log.Entry().Warnf("failed to create build settings info: %v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = buildSettingsInfo
|
||||
|
||||
if config.Publish {
|
||||
packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
|
||||
|
||||
@@ -43,6 +43,7 @@ func CreateBuildSettingsInfo(config *BuildOptions, buildTool string) (string, er
|
||||
Profiles: config.Profiles,
|
||||
Publish: config.Publish,
|
||||
DefaultNpmRegistry: config.DefaultNpmRegistry,
|
||||
DockerImage: config.DockerImage,
|
||||
}
|
||||
var jsonMap map[string][]interface{}
|
||||
var jsonResult []byte
|
||||
|
||||
@@ -485,6 +485,38 @@ func putSliceIfNotEmpty(config map[string]interface{}, key string, value []strin
|
||||
}
|
||||
}
|
||||
|
||||
func ResolveMetadata(gitHubTokens map[string]string, metaDataResolver func() map[string]StepData, stepMetadata string, stepName string) (StepData, error) {
|
||||
|
||||
var metadata StepData
|
||||
|
||||
if stepMetadata != "" {
|
||||
metadataFile, err := OpenPiperFile(stepMetadata, gitHubTokens)
|
||||
if err != nil {
|
||||
return metadata, errors.Wrap(err, "open failed")
|
||||
}
|
||||
|
||||
err = metadata.ReadPipelineStepData(metadataFile)
|
||||
if err != nil {
|
||||
return metadata, errors.Wrap(err, "read failed")
|
||||
}
|
||||
} else {
|
||||
if stepName != "" {
|
||||
if metaDataResolver == nil {
|
||||
return metadata, errors.New("metaDataResolver is nil")
|
||||
}
|
||||
metadataMap := metaDataResolver()
|
||||
var ok bool
|
||||
metadata, ok = metadataMap[stepName]
|
||||
if !ok {
|
||||
return metadata, errors.Errorf("could not retrieve by stepName %v", stepName)
|
||||
}
|
||||
} else {
|
||||
return metadata, errors.Errorf("either one of stepMetadata or stepName parameter has to be passed")
|
||||
}
|
||||
}
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
//ToDo: Enable this when the Volumes part is also implemented
|
||||
//func volumeMountsAsStringSlice(volumeMounts []VolumeMount) []string {
|
||||
// e := []string{}
|
||||
|
||||
@@ -751,3 +751,35 @@ func defaultParams(params ...string) []string {
|
||||
|
||||
return stepParams
|
||||
}
|
||||
|
||||
func testMetadataResolver() map[string]StepData {
|
||||
return map[string]StepData{
|
||||
"githubCreateIssue": {
|
||||
Metadata: StepMetadata{
|
||||
Name: "githubCreateIssue",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveMetadata(t *testing.T) {
|
||||
|
||||
t.Run("Succes - stepName", func(t *testing.T) {
|
||||
stepName := "githubCreateIssue"
|
||||
stepData, err := ResolveMetadata(map[string]string{}, testMetadataResolver, "", stepName)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "githubCreateIssue", stepData.Metadata.Name)
|
||||
})
|
||||
|
||||
t.Run("Error - wrong stepName", func(t *testing.T) {
|
||||
stepName := "notExisting"
|
||||
_, err := ResolveMetadata(map[string]string{}, testMetadataResolver, "", stepName)
|
||||
assert.EqualError(t, err, "could not retrieve by stepName notExisting")
|
||||
})
|
||||
|
||||
t.Run("Error - missing input", func(t *testing.T) {
|
||||
stepName := ""
|
||||
_, err := ResolveMetadata(map[string]string{}, testMetadataResolver, "", stepName)
|
||||
assert.EqualError(t, err, "either one of stepMetadata or stepName parameter has to be passed")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -119,6 +119,7 @@ spec:
|
||||
params:
|
||||
- name: container/registryUrl
|
||||
- name: container/imageNameTag
|
||||
- name: custom/buildSettingsInfo
|
||||
containers:
|
||||
- image: gcr.io/kaniko-project/executor:debug
|
||||
command:
|
||||
|
||||
@@ -192,7 +192,6 @@ spec:
|
||||
type: piperEnvironment
|
||||
params:
|
||||
- name: custom/buildSettingsInfo
|
||||
type: "string"
|
||||
containers:
|
||||
- name: mvn
|
||||
image: maven:3.6-jdk-8
|
||||
|
||||
@@ -226,6 +226,5 @@ spec:
|
||||
- name: mtarFilePath
|
||||
- name: custom/mtarPublishedUrl
|
||||
- name: custom/buildSettingsInfo
|
||||
type: "string"
|
||||
containers:
|
||||
- image: devxci/mbtci-java11-node14
|
||||
|
||||
@@ -132,7 +132,6 @@ spec:
|
||||
type: piperEnvironment
|
||||
params:
|
||||
- name: custom/buildSettingsInfo
|
||||
type: "string"
|
||||
containers:
|
||||
- name: node
|
||||
image: node:lts-stretch
|
||||
|
||||
Reference in New Issue
Block a user