mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-01-08 04:21:26 +02:00
fix (whitesourceExecuteScan) keep tar extension for target image donwload (#3774)
* explicitly adding tar extension to project name when constructing the targetFilePath for whitesource docker image download * comments * correcting comment for better readability * replace spaces in the project name with underscroe * better comments * passing legacy format download * appending format to value * keeping the download format for protecode as legacy * improving docu * keeping legacy format the default * keeping tar file name same as project name to avoid duplicate names * keeping legacy format download hard coded Co-authored-by: anilkeshav27 <you@example.com>
This commit is contained in:
parent
b7cc1eb62f
commit
e6724d7f05
@ -19,7 +19,7 @@ func containerSaveImage(config containerSaveImageOptions, telemetryData *telemet
|
|||||||
|
|
||||||
fileUtils := piperutils.Files{}
|
fileUtils := piperutils.Files{}
|
||||||
|
|
||||||
dClientOptions := piperDocker.ClientOptions{ImageName: config.ContainerImage, RegistryURL: config.ContainerRegistryURL, LocalPath: config.FilePath}
|
dClientOptions := piperDocker.ClientOptions{ImageName: config.ContainerImage, RegistryURL: config.ContainerRegistryURL, LocalPath: config.FilePath, ImageFormat: config.ImageFormat}
|
||||||
dClient := &piperDocker.Client{}
|
dClient := &piperDocker.Client{}
|
||||||
dClient.SetOptions(dClientOptions)
|
dClient.SetOptions(dClientOptions)
|
||||||
|
|
||||||
@ -40,6 +40,10 @@ func runContainerSaveImage(config *containerSaveImageOptions, telemetryData *tel
|
|||||||
tarfilePath = filenameFromContainer(rootPath, config.ContainerImage)
|
tarfilePath = filenameFromContainer(rootPath, config.ContainerImage)
|
||||||
} else {
|
} else {
|
||||||
tarfilePath = filepath.Join(rootPath, tarfilePath)
|
tarfilePath = filepath.Join(rootPath, tarfilePath)
|
||||||
|
// tarfilePath is passed as project name that will not consist of the .tar extension hence adding the extension and replacing spaces with _
|
||||||
|
if fileExtension := filepath.Ext(tarfilePath); fileExtension != ".tar" {
|
||||||
|
tarfilePath = fmt.Sprintf("%s.tar", tarfilePath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Entry().Infof("Downloading '%s' to '%s'", config.ContainerImage, tarfilePath)
|
log.Entry().Infof("Downloading '%s' to '%s'", config.ContainerImage, tarfilePath)
|
||||||
|
@ -22,6 +22,7 @@ type containerSaveImageOptions struct {
|
|||||||
ContainerRegistryUser string `json:"containerRegistryUser,omitempty"`
|
ContainerRegistryUser string `json:"containerRegistryUser,omitempty"`
|
||||||
FilePath string `json:"filePath,omitempty"`
|
FilePath string `json:"filePath,omitempty"`
|
||||||
DockerConfigJSON string `json:"dockerConfigJSON,omitempty"`
|
DockerConfigJSON string `json:"dockerConfigJSON,omitempty"`
|
||||||
|
ImageFormat string `json:"imageFormat,omitempty" validate:"possible-values=tarball oci legacy"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerSaveImageCommand Saves a container image as a tar file
|
// ContainerSaveImageCommand Saves a container image as a tar file
|
||||||
@ -124,6 +125,7 @@ func addContainerSaveImageFlags(cmd *cobra.Command, stepConfig *containerSaveIma
|
|||||||
cmd.Flags().StringVar(&stepConfig.ContainerRegistryUser, "containerRegistryUser", os.Getenv("PIPER_containerRegistryUser"), "For `buildTool: docker`: Username for container registry access - typically provided by the CI/CD environment.")
|
cmd.Flags().StringVar(&stepConfig.ContainerRegistryUser, "containerRegistryUser", os.Getenv("PIPER_containerRegistryUser"), "For `buildTool: docker`: Username for container registry access - typically provided by the CI/CD environment.")
|
||||||
cmd.Flags().StringVar(&stepConfig.FilePath, "filePath", os.Getenv("PIPER_filePath"), "The path to the file to which the image should be saved.")
|
cmd.Flags().StringVar(&stepConfig.FilePath, "filePath", os.Getenv("PIPER_filePath"), "The path to the file to which the image should be saved.")
|
||||||
cmd.Flags().StringVar(&stepConfig.DockerConfigJSON, "dockerConfigJSON", os.Getenv("PIPER_dockerConfigJSON"), "Path to the file `.docker/config.json` - this is typically provided by your CI/CD system. You can find more details about the Docker credentials in the [Docker documentation](https://docs.docker.com/engine/reference/commandline/login/).")
|
cmd.Flags().StringVar(&stepConfig.DockerConfigJSON, "dockerConfigJSON", os.Getenv("PIPER_dockerConfigJSON"), "Path to the file `.docker/config.json` - this is typically provided by your CI/CD system. You can find more details about the Docker credentials in the [Docker documentation](https://docs.docker.com/engine/reference/commandline/login/).")
|
||||||
|
cmd.Flags().StringVar(&stepConfig.ImageFormat, "imageFormat", `legacy`, "Format of the image when saving the docker image locally.")
|
||||||
|
|
||||||
cmd.MarkFlagRequired("containerRegistryUrl")
|
cmd.MarkFlagRequired("containerRegistryUrl")
|
||||||
cmd.MarkFlagRequired("containerImage")
|
cmd.MarkFlagRequired("containerImage")
|
||||||
@ -243,6 +245,15 @@ func containerSaveImageMetadata() config.StepData {
|
|||||||
Aliases: []config.Alias{},
|
Aliases: []config.Alias{},
|
||||||
Default: os.Getenv("PIPER_dockerConfigJSON"),
|
Default: os.Getenv("PIPER_dockerConfigJSON"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "imageFormat",
|
||||||
|
ResourceRef: []config.ResourceReference{},
|
||||||
|
Scope: []string{"PARAMETERS", "STAGES", "STEPS"},
|
||||||
|
Type: "string",
|
||||||
|
Mandatory: false,
|
||||||
|
Aliases: []config.Alias{},
|
||||||
|
Default: `legacy`,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -50,7 +50,7 @@ func protecodeExecuteScan(config protecodeExecuteScanOptions, telemetryData *tel
|
|||||||
log.Entry().Debug("Create protecode client")
|
log.Entry().Debug("Create protecode client")
|
||||||
client := createProtecodeClient(&config)
|
client := createProtecodeClient(&config)
|
||||||
|
|
||||||
dClientOptions := piperDocker.ClientOptions{ImageName: config.ScanImage, RegistryURL: config.DockerRegistryURL, LocalPath: config.FilePath}
|
dClientOptions := piperDocker.ClientOptions{ImageName: config.ScanImage, RegistryURL: config.DockerRegistryURL, LocalPath: config.FilePath, ImageFormat: "legacy"}
|
||||||
dClient := &piperDocker.Client{}
|
dClient := &piperDocker.Client{}
|
||||||
dClient.SetOptions(dClientOptions)
|
dClient.SetOptions(dClientOptions)
|
||||||
|
|
||||||
|
@ -178,8 +178,9 @@ func runWhitesourceScan(config *ScanOptions, scan *ws.Scan, utils whitesourceUti
|
|||||||
ContainerRegistryPassword: config.ContainerRegistryPassword,
|
ContainerRegistryPassword: config.ContainerRegistryPassword,
|
||||||
DockerConfigJSON: config.DockerConfigJSON,
|
DockerConfigJSON: config.DockerConfigJSON,
|
||||||
FilePath: config.ProjectName,
|
FilePath: config.ProjectName,
|
||||||
|
ImageFormat: "legacy", // keep the image format legacy or whitesource is not able to read layers
|
||||||
}
|
}
|
||||||
dClientOptions := piperDocker.ClientOptions{ImageName: saveImageOptions.ContainerImage, RegistryURL: saveImageOptions.ContainerRegistryURL, LocalPath: ""}
|
dClientOptions := piperDocker.ClientOptions{ImageName: saveImageOptions.ContainerImage, RegistryURL: saveImageOptions.ContainerRegistryURL, LocalPath: "", ImageFormat: "legacy"}
|
||||||
dClient := &piperDocker.Client{}
|
dClient := &piperDocker.Client{}
|
||||||
dClient.SetOptions(dClientOptions)
|
dClient.SetOptions(dClientOptions)
|
||||||
if _, err := runContainerSaveImage(&saveImageOptions, &telemetry.CustomData{}, "./cache", "", dClient, utils); err != nil {
|
if _, err := runContainerSaveImage(&saveImageOptions, &telemetry.CustomData{}, "./cache", "", dClient, utils); err != nil {
|
||||||
|
@ -85,6 +85,7 @@ type Client struct {
|
|||||||
registryURL string
|
registryURL string
|
||||||
localPath string
|
localPath string
|
||||||
includeLayers bool
|
includeLayers bool
|
||||||
|
imageFormat string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientOptions defines the options to be set on the client
|
// ClientOptions defines the options to be set on the client
|
||||||
@ -92,6 +93,7 @@ type ClientOptions struct {
|
|||||||
ImageName string
|
ImageName string
|
||||||
RegistryURL string
|
RegistryURL string
|
||||||
LocalPath string
|
LocalPath string
|
||||||
|
ImageFormat string
|
||||||
}
|
}
|
||||||
|
|
||||||
//Download interface for download an image to a local path
|
//Download interface for download an image to a local path
|
||||||
@ -106,6 +108,7 @@ func (c *Client) SetOptions(options ClientOptions) {
|
|||||||
c.imageName = options.ImageName
|
c.imageName = options.ImageName
|
||||||
c.registryURL = options.RegistryURL
|
c.registryURL = options.RegistryURL
|
||||||
c.localPath = options.LocalPath
|
c.localPath = options.LocalPath
|
||||||
|
c.imageFormat = options.ImageFormat
|
||||||
}
|
}
|
||||||
|
|
||||||
//DownloadImageContent downloads the image content into the given targetDir. Returns with an error if the targetDir doesnt exist
|
//DownloadImageContent downloads the image content into the given targetDir. Returns with an error if the targetDir doesnt exist
|
||||||
@ -168,7 +171,7 @@ func (c *Client) DownloadImage(imageSource, targetFile string) (v1.Image, error)
|
|||||||
craneCmd := cranecmd.NewCmdPull(&noOpts)
|
craneCmd := cranecmd.NewCmdPull(&noOpts)
|
||||||
craneCmd.SetOut(log.Writer())
|
craneCmd.SetOut(log.Writer())
|
||||||
craneCmd.SetErr(log.Writer())
|
craneCmd.SetErr(log.Writer())
|
||||||
craneCmd.SetArgs([]string{imageRef.Name(), tmpFile.Name(), "--format=tarball"})
|
craneCmd.SetArgs([]string{imageRef.Name(), tmpFile.Name(), "--format=" + c.imageFormat})
|
||||||
|
|
||||||
if err := craneCmd.Execute(); err != nil {
|
if err := craneCmd.Execute(); err != nil {
|
||||||
defer os.Remove(tmpFile.Name())
|
defer os.Remove(tmpFile.Name())
|
||||||
|
@ -93,3 +93,15 @@ spec:
|
|||||||
- type: vaultSecretFile
|
- type: vaultSecretFile
|
||||||
name: dockerConfigFileVaultSecretName
|
name: dockerConfigFileVaultSecretName
|
||||||
default: docker-config
|
default: docker-config
|
||||||
|
- name: imageFormat
|
||||||
|
type: string
|
||||||
|
description: Format of the image when saving the docker image locally.
|
||||||
|
scope:
|
||||||
|
- PARAMETERS
|
||||||
|
- STAGES
|
||||||
|
- STEPS
|
||||||
|
default: legacy
|
||||||
|
possibleValues:
|
||||||
|
- tarball
|
||||||
|
- oci
|
||||||
|
- legacy
|
||||||
|
Loading…
Reference in New Issue
Block a user