mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-02-21 19:48:53 +02:00
Fix helm execute command (#3701)
* Add small fix * fix unit-tests * Add deploymentName and packageVersion as flags * small fix * Change getting version of helm chart * small fix Co-authored-by: “Vitalii <“vitalii.sidorov@sap.com”> Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
This commit is contained in:
parent
d519966fe5
commit
63cdfc0e68
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/SAP/jenkins-library/pkg/kubernetes"
|
"github.com/SAP/jenkins-library/pkg/kubernetes"
|
||||||
"github.com/SAP/jenkins-library/pkg/log"
|
"github.com/SAP/jenkins-library/pkg/log"
|
||||||
"github.com/SAP/jenkins-library/pkg/telemetry"
|
"github.com/SAP/jenkins-library/pkg/telemetry"
|
||||||
|
"github.com/SAP/jenkins-library/pkg/versioning"
|
||||||
)
|
)
|
||||||
|
|
||||||
func helmExecute(config helmExecuteOptions, telemetryData *telemetry.CustomData) {
|
func helmExecute(config helmExecuteOptions, telemetryData *telemetry.CustomData) {
|
||||||
@ -28,17 +29,27 @@ func helmExecute(config helmExecuteOptions, telemetryData *telemetry.CustomData)
|
|||||||
TargetRepositoryPassword: config.TargetRepositoryPassword,
|
TargetRepositoryPassword: config.TargetRepositoryPassword,
|
||||||
HelmCommand: config.HelmCommand,
|
HelmCommand: config.HelmCommand,
|
||||||
CustomTLSCertificateLinks: config.CustomTLSCertificateLinks,
|
CustomTLSCertificateLinks: config.CustomTLSCertificateLinks,
|
||||||
|
// ArtifactVersion: config.Version,
|
||||||
|
Version: config.Version,
|
||||||
}
|
}
|
||||||
|
|
||||||
utils := kubernetes.NewDeployUtilsBundle(helmConfig.CustomTLSCertificateLinks)
|
utils := kubernetes.NewDeployUtilsBundle(helmConfig.CustomTLSCertificateLinks)
|
||||||
|
|
||||||
helmChart := config.ChartPath + "Chart.yaml"
|
artifactOpts := versioning.Options{
|
||||||
nameChart, packageVersion, err := kubernetes.GetChartInfo(helmChart, utils)
|
VersioningScheme: "library",
|
||||||
if err != nil {
|
}
|
||||||
log.Entry().WithError(err).Fatalf("failed to get version in Chart.yaml: %v", err)
|
|
||||||
|
artifact, err := versioning.GetArtifact("helm", "", &artifactOpts, utils)
|
||||||
|
if err != nil {
|
||||||
|
log.Entry().WithError(err).Fatalf("getting artifact information failed: %v", err)
|
||||||
|
}
|
||||||
|
artifactInfo, err := artifact.GetCoordinates()
|
||||||
|
|
||||||
|
helmConfig.DeploymentName = artifactInfo.ArtifactID
|
||||||
|
|
||||||
|
if len(config.Version) == 0 {
|
||||||
|
helmConfig.Version = artifactInfo.Version
|
||||||
}
|
}
|
||||||
helmConfig.DeploymentName = nameChart
|
|
||||||
helmConfig.PackageVersion = packageVersion
|
|
||||||
|
|
||||||
helmExecutor := kubernetes.NewHelmExecutor(helmConfig, utils, GeneralConfig.Verbose, log.Writer())
|
helmExecutor := kubernetes.NewHelmExecutor(helmConfig, utils, GeneralConfig.Verbose, log.Writer())
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ type helmExecuteOptions struct {
|
|||||||
AdditionalParameters []string `json:"additionalParameters,omitempty"`
|
AdditionalParameters []string `json:"additionalParameters,omitempty"`
|
||||||
ChartPath string `json:"chartPath,omitempty"`
|
ChartPath string `json:"chartPath,omitempty"`
|
||||||
TargetRepositoryURL string `json:"targetRepositoryURL,omitempty"`
|
TargetRepositoryURL string `json:"targetRepositoryURL,omitempty"`
|
||||||
TargetRepositoryName string `json:"targetRepositoryName,omitempty" validate:"required_if=HelmCommand install"`
|
TargetRepositoryName string `json:"targetRepositoryName,omitempty"`
|
||||||
TargetRepositoryUser string `json:"targetRepositoryUser,omitempty"`
|
TargetRepositoryUser string `json:"targetRepositoryUser,omitempty"`
|
||||||
TargetRepositoryPassword string `json:"targetRepositoryPassword,omitempty"`
|
TargetRepositoryPassword string `json:"targetRepositoryPassword,omitempty"`
|
||||||
HelmDeployWaitSeconds int `json:"helmDeployWaitSeconds,omitempty"`
|
HelmDeployWaitSeconds int `json:"helmDeployWaitSeconds,omitempty"`
|
||||||
@ -38,6 +38,7 @@ type helmExecuteOptions struct {
|
|||||||
FilterTest string `json:"filterTest,omitempty"`
|
FilterTest string `json:"filterTest,omitempty"`
|
||||||
CustomTLSCertificateLinks []string `json:"customTlsCertificateLinks,omitempty"`
|
CustomTLSCertificateLinks []string `json:"customTlsCertificateLinks,omitempty"`
|
||||||
Publish bool `json:"publish,omitempty"`
|
Publish bool `json:"publish,omitempty"`
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// HelmExecuteCommand Executes helm3 functionality as the package manager for Kubernetes.
|
// HelmExecuteCommand Executes helm3 functionality as the package manager for Kubernetes.
|
||||||
@ -155,9 +156,9 @@ Note: piper supports only helm3 version, since helm2 is deprecated.`,
|
|||||||
|
|
||||||
func addHelmExecuteFlags(cmd *cobra.Command, stepConfig *helmExecuteOptions) {
|
func addHelmExecuteFlags(cmd *cobra.Command, stepConfig *helmExecuteOptions) {
|
||||||
cmd.Flags().StringSliceVar(&stepConfig.AdditionalParameters, "additionalParameters", []string{}, "Defines additional parameters for Helm like \"helm install [NAME] [CHART] [flags]\".")
|
cmd.Flags().StringSliceVar(&stepConfig.AdditionalParameters, "additionalParameters", []string{}, "Defines additional parameters for Helm like \"helm install [NAME] [CHART] [flags]\".")
|
||||||
cmd.Flags().StringVar(&stepConfig.ChartPath, "chartPath", os.Getenv("PIPER_chartPath"), "Defines the chart path for helm.")
|
cmd.Flags().StringVar(&stepConfig.ChartPath, "chartPath", os.Getenv("PIPER_chartPath"), "Defines the chart path for helm. chartPath is mandatory for install/upgrade/publish commands.")
|
||||||
cmd.Flags().StringVar(&stepConfig.TargetRepositoryURL, "targetRepositoryURL", os.Getenv("PIPER_targetRepositoryURL"), "URL of the target repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
cmd.Flags().StringVar(&stepConfig.TargetRepositoryURL, "targetRepositoryURL", os.Getenv("PIPER_targetRepositoryURL"), "URL of the target repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
||||||
cmd.Flags().StringVar(&stepConfig.TargetRepositoryName, "targetRepositoryName", os.Getenv("PIPER_targetRepositoryName"), "set the chart repository")
|
cmd.Flags().StringVar(&stepConfig.TargetRepositoryName, "targetRepositoryName", os.Getenv("PIPER_targetRepositoryName"), "set the chart repository. The value is required for install/upgrade/uninstall commands.")
|
||||||
cmd.Flags().StringVar(&stepConfig.TargetRepositoryUser, "targetRepositoryUser", os.Getenv("PIPER_targetRepositoryUser"), "Username for the char repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
cmd.Flags().StringVar(&stepConfig.TargetRepositoryUser, "targetRepositoryUser", os.Getenv("PIPER_targetRepositoryUser"), "Username for the char repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
||||||
cmd.Flags().StringVar(&stepConfig.TargetRepositoryPassword, "targetRepositoryPassword", os.Getenv("PIPER_targetRepositoryPassword"), "Password for the target repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
cmd.Flags().StringVar(&stepConfig.TargetRepositoryPassword, "targetRepositoryPassword", os.Getenv("PIPER_targetRepositoryPassword"), "Password for the target repository where the compiled helm .tgz archive shall be uploaded - typically provided by the CI/CD environment.")
|
||||||
cmd.Flags().IntVar(&stepConfig.HelmDeployWaitSeconds, "helmDeployWaitSeconds", 300, "Number of seconds before helm deploy returns.")
|
cmd.Flags().IntVar(&stepConfig.HelmDeployWaitSeconds, "helmDeployWaitSeconds", 300, "Number of seconds before helm deploy returns.")
|
||||||
@ -176,8 +177,8 @@ func addHelmExecuteFlags(cmd *cobra.Command, stepConfig *helmExecuteOptions) {
|
|||||||
cmd.Flags().StringVar(&stepConfig.FilterTest, "filterTest", os.Getenv("PIPER_filterTest"), "specify tests by attribute (currently `name`) using attribute=value syntax or `!attribute=value` to exclude a test (can specify multiple or separate values with commas `name=test1,name=test2`)")
|
cmd.Flags().StringVar(&stepConfig.FilterTest, "filterTest", os.Getenv("PIPER_filterTest"), "specify tests by attribute (currently `name`) using attribute=value syntax or `!attribute=value` to exclude a test (can specify multiple or separate values with commas `name=test1,name=test2`)")
|
||||||
cmd.Flags().StringSliceVar(&stepConfig.CustomTLSCertificateLinks, "customTlsCertificateLinks", []string{}, "List of download links to custom TLS certificates. This is required to ensure trusted connections to instances with repositories (like nexus) when publish flag is set to true.")
|
cmd.Flags().StringSliceVar(&stepConfig.CustomTLSCertificateLinks, "customTlsCertificateLinks", []string{}, "List of download links to custom TLS certificates. This is required to ensure trusted connections to instances with repositories (like nexus) when publish flag is set to true.")
|
||||||
cmd.Flags().BoolVar(&stepConfig.Publish, "publish", false, "Configures helm to run the deploy command to publish artifacts to a repository.")
|
cmd.Flags().BoolVar(&stepConfig.Publish, "publish", false, "Configures helm to run the deploy command to publish artifacts to a repository.")
|
||||||
|
cmd.Flags().StringVar(&stepConfig.Version, "version", os.Getenv("PIPER_version"), "Defines the artifact version to use from helm package/publish commands.")
|
||||||
|
|
||||||
cmd.MarkFlagRequired("chartPath")
|
|
||||||
cmd.MarkFlagRequired("image")
|
cmd.MarkFlagRequired("image")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +214,7 @@ func helmExecuteMetadata() config.StepData {
|
|||||||
ResourceRef: []config.ResourceReference{},
|
ResourceRef: []config.ResourceReference{},
|
||||||
Scope: []string{"PARAMETERS", "STAGES", "STEPS"},
|
Scope: []string{"PARAMETERS", "STAGES", "STEPS"},
|
||||||
Type: "string",
|
Type: "string",
|
||||||
Mandatory: true,
|
Mandatory: false,
|
||||||
Aliases: []config.Alias{{Name: "helmChartPath"}},
|
Aliases: []config.Alias{{Name: "helmChartPath"}},
|
||||||
Default: os.Getenv("PIPER_chartPath"),
|
Default: os.Getenv("PIPER_chartPath"),
|
||||||
},
|
},
|
||||||
@ -454,6 +455,20 @@ func helmExecuteMetadata() config.StepData {
|
|||||||
Aliases: []config.Alias{},
|
Aliases: []config.Alias{},
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "version",
|
||||||
|
ResourceRef: []config.ResourceReference{
|
||||||
|
{
|
||||||
|
Name: "commonPipelineEnvironment",
|
||||||
|
Param: "artifactVersion",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Scope: []string{"GENERAL", "PARAMETERS", "STAGES", "STEPS"},
|
||||||
|
Type: "string",
|
||||||
|
Mandatory: false,
|
||||||
|
Aliases: []config.Alias{},
|
||||||
|
Default: os.Getenv("PIPER_version"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Containers: []config.Container{
|
Containers: []config.Container{
|
||||||
|
@ -43,7 +43,7 @@ type HelmExecuteOptions struct {
|
|||||||
KubeContext string `json:"kubeContext,omitempty"`
|
KubeContext string `json:"kubeContext,omitempty"`
|
||||||
Namespace string `json:"namespace,omitempty"`
|
Namespace string `json:"namespace,omitempty"`
|
||||||
DockerConfigJSON string `json:"dockerConfigJSON,omitempty"`
|
DockerConfigJSON string `json:"dockerConfigJSON,omitempty"`
|
||||||
PackageVersion string `json:"packageVersion,omitempty"`
|
Version string `json:"version,omitempty"`
|
||||||
AppVersion string `json:"appVersion,omitempty"`
|
AppVersion string `json:"appVersion,omitempty"`
|
||||||
Dependency string `json:"dependency,omitempty" validate:"possible-values=build list update"`
|
Dependency string `json:"dependency,omitempty" validate:"possible-values=build list update"`
|
||||||
PackageDependencyUpdate bool `json:"packageDependencyUpdate,omitempty"`
|
PackageDependencyUpdate bool `json:"packageDependencyUpdate,omitempty"`
|
||||||
@ -110,11 +110,19 @@ func (h *HelmExecute) runHelmAdd() error {
|
|||||||
|
|
||||||
// RunHelmUpgrade is used to upgrade a release
|
// RunHelmUpgrade is used to upgrade a release
|
||||||
func (h *HelmExecute) RunHelmUpgrade() error {
|
func (h *HelmExecute) RunHelmUpgrade() error {
|
||||||
|
if len(h.config.ChartPath) == 0 {
|
||||||
|
return fmt.Errorf("there is no ChartPath value. The chartPath value is mandatory")
|
||||||
|
}
|
||||||
|
|
||||||
err := h.runHelmInit()
|
err := h.runHelmInit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to execute deployments: %v", err)
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := h.runHelmAdd(); err != nil {
|
||||||
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
helmParams := []string{
|
helmParams := []string{
|
||||||
"upgrade",
|
"upgrade",
|
||||||
h.config.DeploymentName,
|
h.config.DeploymentName,
|
||||||
@ -184,6 +192,10 @@ func (h *HelmExecute) RunHelmLint() error {
|
|||||||
|
|
||||||
// RunHelmInstall is used to install a chart
|
// RunHelmInstall is used to install a chart
|
||||||
func (h *HelmExecute) RunHelmInstall() error {
|
func (h *HelmExecute) RunHelmInstall() error {
|
||||||
|
if len(h.config.ChartPath) == 0 {
|
||||||
|
return fmt.Errorf("there is no ChartPath value. The chartPath value is mandatory")
|
||||||
|
}
|
||||||
|
|
||||||
if err := h.runHelmInit(); err != nil {
|
if err := h.runHelmInit(); err != nil {
|
||||||
return fmt.Errorf("failed to execute deployments: %v", err)
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
}
|
}
|
||||||
@ -235,6 +247,10 @@ func (h *HelmExecute) RunHelmUninstall() error {
|
|||||||
return fmt.Errorf("failed to execute deployments: %v", err)
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := h.runHelmAdd(); err != nil {
|
||||||
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
helmParams := []string{
|
helmParams := []string{
|
||||||
"uninstall",
|
"uninstall",
|
||||||
h.config.DeploymentName,
|
h.config.DeploymentName,
|
||||||
@ -267,6 +283,10 @@ func (h *HelmExecute) RunHelmUninstall() error {
|
|||||||
|
|
||||||
// RunHelmPackage is used to package a chart directory into a chart archive
|
// RunHelmPackage is used to package a chart directory into a chart archive
|
||||||
func (h *HelmExecute) runHelmPackage() error {
|
func (h *HelmExecute) runHelmPackage() error {
|
||||||
|
if len(h.config.ChartPath) == 0 {
|
||||||
|
return fmt.Errorf("there is no ChartPath value. The chartPath value is mandatory")
|
||||||
|
}
|
||||||
|
|
||||||
err := h.runHelmInit()
|
err := h.runHelmInit()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to execute deployments: %v", err)
|
return fmt.Errorf("failed to execute deployments: %v", err)
|
||||||
@ -276,8 +296,8 @@ func (h *HelmExecute) runHelmPackage() error {
|
|||||||
"package",
|
"package",
|
||||||
h.config.ChartPath,
|
h.config.ChartPath,
|
||||||
}
|
}
|
||||||
if len(h.config.PackageVersion) > 0 {
|
if len(h.config.Version) > 0 {
|
||||||
helmParams = append(helmParams, "--version", h.config.PackageVersion)
|
helmParams = append(helmParams, "--version", h.config.Version)
|
||||||
}
|
}
|
||||||
if h.config.PackageDependencyUpdate {
|
if h.config.PackageDependencyUpdate {
|
||||||
helmParams = append(helmParams, "--dependency-update")
|
helmParams = append(helmParams, "--dependency-update")
|
||||||
@ -373,7 +393,7 @@ func (h *HelmExecute) RunHelmPublish() error {
|
|||||||
|
|
||||||
h.utils.SetOptions(repoClientOptions)
|
h.utils.SetOptions(repoClientOptions)
|
||||||
|
|
||||||
binary := fmt.Sprintf("%v", h.config.DeploymentName+"-"+h.config.PackageVersion+".tgz")
|
binary := fmt.Sprintf("%v", h.config.DeploymentName+"-"+h.config.Version+".tgz")
|
||||||
|
|
||||||
targetPath := fmt.Sprintf("%v/%s", h.config.DeploymentName, binary)
|
targetPath := fmt.Sprintf("%v/%s", h.config.DeploymentName, binary)
|
||||||
|
|
||||||
|
@ -71,8 +71,10 @@ func TestRunHelm(t *testing.T) {
|
|||||||
utils := newHelmMockUtilsBundle()
|
utils := newHelmMockUtilsBundle()
|
||||||
|
|
||||||
testTable := []struct {
|
testTable := []struct {
|
||||||
config HelmExecuteOptions
|
config HelmExecuteOptions
|
||||||
expectedConfig []string
|
generalVerbose bool
|
||||||
|
expectedAddConfig []string
|
||||||
|
expectedUpgradeConfig []string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
config: HelmExecuteOptions{
|
config: HelmExecuteOptions{
|
||||||
@ -83,21 +85,26 @@ func TestRunHelm(t *testing.T) {
|
|||||||
HelmDeployWaitSeconds: 3456,
|
HelmDeployWaitSeconds: 3456,
|
||||||
AdditionalParameters: []string{"additional parameter"},
|
AdditionalParameters: []string{"additional parameter"},
|
||||||
Image: "dtzar/helm-kubectl:3.4.1",
|
Image: "dtzar/helm-kubectl:3.4.1",
|
||||||
|
TargetRepositoryName: "test",
|
||||||
|
TargetRepositoryURL: "https://charts.helm.sh/stable",
|
||||||
},
|
},
|
||||||
expectedConfig: []string{"upgrade", "test_deployment", ".", "--install", "--namespace", "test_namespace", "--force", "--wait", "--timeout", "3456s", "--atomic", "additional parameter"},
|
generalVerbose: true,
|
||||||
|
expectedAddConfig: []string{"repo", "add", "test", "https://charts.helm.sh/stable", "--debug"},
|
||||||
|
expectedUpgradeConfig: []string{"upgrade", "test_deployment", ".", "--debug", "--install", "--namespace", "test_namespace", "--force", "--wait", "--timeout", "3456s", "--atomic", "additional parameter"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, testCase := range testTable {
|
for _, testCase := range testTable {
|
||||||
helmExecute := HelmExecute{
|
helmExecute := HelmExecute{
|
||||||
utils: utils,
|
utils: utils,
|
||||||
config: testCase.config,
|
config: testCase.config,
|
||||||
verbose: false,
|
verbose: testCase.generalVerbose,
|
||||||
stdout: log.Writer(),
|
stdout: log.Writer(),
|
||||||
}
|
}
|
||||||
err := helmExecute.RunHelmUpgrade()
|
err := helmExecute.RunHelmUpgrade()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, mock.ExecCall{Exec: "helm", Params: testCase.expectedConfig}, utils.Calls[i])
|
assert.Equal(t, mock.ExecCall{Exec: "helm", Params: testCase.expectedAddConfig}, utils.Calls[0])
|
||||||
|
assert.Equal(t, mock.ExecCall{Exec: "helm", Params: testCase.expectedUpgradeConfig}, utils.Calls[1])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -185,7 +192,6 @@ func TestRunHelm(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("Helm uninstal command", func(t *testing.T) {
|
t.Run("Helm uninstal command", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
utils := newHelmMockUtilsBundle()
|
|
||||||
|
|
||||||
testTable := []struct {
|
testTable := []struct {
|
||||||
config HelmExecuteOptions
|
config HelmExecuteOptions
|
||||||
@ -194,9 +200,10 @@ func TestRunHelm(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
config: HelmExecuteOptions{
|
config: HelmExecuteOptions{
|
||||||
ChartPath: ".",
|
ChartPath: ".",
|
||||||
DeploymentName: "testPackage",
|
DeploymentName: "testPackage",
|
||||||
Namespace: "test-namespace",
|
Namespace: "test-namespace",
|
||||||
|
TargetRepositoryName: "test",
|
||||||
},
|
},
|
||||||
expectedConfig: []string{"uninstall", "testPackage", "--namespace", "test-namespace"},
|
expectedConfig: []string{"uninstall", "testPackage", "--namespace", "test-namespace"},
|
||||||
},
|
},
|
||||||
@ -206,13 +213,15 @@ func TestRunHelm(t *testing.T) {
|
|||||||
DeploymentName: "testPackage",
|
DeploymentName: "testPackage",
|
||||||
Namespace: "test-namespace",
|
Namespace: "test-namespace",
|
||||||
HelmDeployWaitSeconds: 524,
|
HelmDeployWaitSeconds: 524,
|
||||||
|
TargetRepositoryName: "test",
|
||||||
},
|
},
|
||||||
generalVerbose: true,
|
generalVerbose: true,
|
||||||
expectedConfig: []string{"uninstall", "testPackage", "--namespace", "test-namespace", "--wait", "--timeout", "524s", "--debug", "--dry-run"},
|
expectedConfig: []string{"uninstall", "testPackage", "--namespace", "test-namespace", "--wait", "--timeout", "524s", "--debug", "--dry-run"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, testCase := range testTable {
|
for _, testCase := range testTable {
|
||||||
|
utils := newHelmMockUtilsBundle()
|
||||||
helmExecute := HelmExecute{
|
helmExecute := HelmExecute{
|
||||||
utils: utils,
|
utils: utils,
|
||||||
config: testCase.config,
|
config: testCase.config,
|
||||||
@ -221,7 +230,7 @@ func TestRunHelm(t *testing.T) {
|
|||||||
}
|
}
|
||||||
err := helmExecute.RunHelmUninstall()
|
err := helmExecute.RunHelmUninstall()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, mock.ExecCall{Exec: "helm", Params: testCase.expectedConfig}, utils.Calls[i])
|
assert.Equal(t, mock.ExecCall{Exec: "helm", Params: testCase.expectedConfig}, utils.Calls[1])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -243,7 +252,7 @@ func TestRunHelm(t *testing.T) {
|
|||||||
config: HelmExecuteOptions{
|
config: HelmExecuteOptions{
|
||||||
ChartPath: ".",
|
ChartPath: ".",
|
||||||
DeploymentName: "testPackage",
|
DeploymentName: "testPackage",
|
||||||
PackageVersion: "1.2.3",
|
Version: "1.2.3",
|
||||||
PackageDependencyUpdate: true,
|
PackageDependencyUpdate: true,
|
||||||
AppVersion: "9.8.7",
|
AppVersion: "9.8.7",
|
||||||
},
|
},
|
||||||
@ -316,6 +325,14 @@ func TestRunHelm(t *testing.T) {
|
|||||||
ChartPath: ".",
|
ChartPath: ".",
|
||||||
DeploymentName: "testPackage",
|
DeploymentName: "testPackage",
|
||||||
},
|
},
|
||||||
|
expectedError: errors.New("failed to execute deployments: there is no TargetRepositoryName value. 'helm repo add' command requires 2 arguments"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
config: HelmExecuteOptions{
|
||||||
|
ChartPath: ".",
|
||||||
|
DeploymentName: "testPackage",
|
||||||
|
TargetRepositoryName: "test",
|
||||||
|
},
|
||||||
expectedError: errors.New("namespace has not been set, please configure namespace parameter"),
|
expectedError: errors.New("namespace has not been set, please configure namespace parameter"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -424,8 +441,9 @@ func TestRunHelm(t *testing.T) {
|
|||||||
TargetRepositoryURL: "https://my.target.repository.local/",
|
TargetRepositoryURL: "https://my.target.repository.local/",
|
||||||
TargetRepositoryUser: "testUser",
|
TargetRepositoryUser: "testUser",
|
||||||
TargetRepositoryPassword: "testPWD",
|
TargetRepositoryPassword: "testPWD",
|
||||||
PackageVersion: "1.2.3",
|
Version: "1.2.3",
|
||||||
DeploymentName: "test_helm_chart",
|
DeploymentName: "test_helm_chart",
|
||||||
|
ChartPath: ".",
|
||||||
}
|
}
|
||||||
utils.ReturnFileUploadStatus = 200
|
utils.ReturnFileUploadStatus = 200
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/SAP/jenkins-library/pkg/command"
|
"github.com/SAP/jenkins-library/pkg/command"
|
||||||
piperhttp "github.com/SAP/jenkins-library/pkg/http"
|
piperhttp "github.com/SAP/jenkins-library/pkg/http"
|
||||||
@ -19,6 +20,7 @@ type DeployUtils interface {
|
|||||||
Stdout(out io.Writer)
|
Stdout(out io.Writer)
|
||||||
Stderr(err io.Writer)
|
Stderr(err io.Writer)
|
||||||
RunExecutable(e string, p ...string) error
|
RunExecutable(e string, p ...string) error
|
||||||
|
DownloadFile(url, filename string, header http.Header, cookies []*http.Cookie) error
|
||||||
|
|
||||||
piperutils.FileUtils
|
piperutils.FileUtils
|
||||||
piperhttp.Uploader
|
piperhttp.Uploader
|
||||||
@ -95,3 +97,7 @@ func GetChartInfo(chartYamlFile string, utils DeployUtils) (string, string, erro
|
|||||||
|
|
||||||
return name, version, nil
|
return name, version, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *deployUtilsBundle) DownloadFile(url, filename string, header http.Header, cookies []*http.Cookie) error {
|
||||||
|
return fmt.Errorf("not implemented")
|
||||||
|
}
|
||||||
|
@ -49,3 +49,8 @@ func (utils *HttpClientMock) UploadRequest(method, url, file, fieldName string,
|
|||||||
func (utils *HttpClientMock) UploadFile(url, file, fieldName string, header http.Header, cookies []*http.Cookie, uploadType string) (*http.Response, error) {
|
func (utils *HttpClientMock) UploadFile(url, file, fieldName string, header http.Header, cookies []*http.Cookie, uploadType string) (*http.Response, error) {
|
||||||
return utils.UploadRequest(http.MethodPut, url, file, fieldName, header, cookies, uploadType)
|
return utils.UploadRequest(http.MethodPut, url, file, fieldName, header, cookies, uploadType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DownloadFile mock
|
||||||
|
func (utils *HttpClientMock) DownloadFile(url, filename string, header http.Header, cookies []*http.Cookie) error {
|
||||||
|
return fmt.Errorf("not implemented")
|
||||||
|
}
|
||||||
|
@ -28,6 +28,20 @@ func TestSendRequest(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDownloadFile(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
t.Run("DownloadFile", func(t *testing.T) {
|
||||||
|
utils := HttpClientMock{}
|
||||||
|
url := "https://localhost"
|
||||||
|
filename := "testFile"
|
||||||
|
var header http.Header
|
||||||
|
var cookies []*http.Cookie
|
||||||
|
err := utils.DownloadFile(url, filename, header, cookies)
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestSetOption(t *testing.T) {
|
func TestSetOption(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
t.Run("SetOption", func(t *testing.T) {
|
t.Run("SetOption", func(t *testing.T) {
|
||||||
|
@ -49,8 +49,7 @@ spec:
|
|||||||
aliases:
|
aliases:
|
||||||
- name: helmChartPath
|
- name: helmChartPath
|
||||||
type: string
|
type: string
|
||||||
mandatory: true
|
description: Defines the chart path for helm. chartPath is mandatory for install/upgrade/publish commands.
|
||||||
description: Defines the chart path for helm.
|
|
||||||
scope:
|
scope:
|
||||||
- PARAMETERS
|
- PARAMETERS
|
||||||
- STAGES
|
- STAGES
|
||||||
@ -69,10 +68,7 @@ spec:
|
|||||||
param: custom/repositoryUrl
|
param: custom/repositoryUrl
|
||||||
- name: targetRepositoryName
|
- name: targetRepositoryName
|
||||||
type: string
|
type: string
|
||||||
description: set the chart repository
|
description: set the chart repository. The value is required for install/upgrade/uninstall commands.
|
||||||
mandatoryIf:
|
|
||||||
- name: helmCommand
|
|
||||||
value: install
|
|
||||||
scope:
|
scope:
|
||||||
- GENERAL
|
- GENERAL
|
||||||
- PARAMETERS
|
- PARAMETERS
|
||||||
@ -264,6 +260,17 @@ spec:
|
|||||||
- PARAMETERS
|
- PARAMETERS
|
||||||
- STAGES
|
- STAGES
|
||||||
- STEPS
|
- STEPS
|
||||||
|
- name: version
|
||||||
|
type: string
|
||||||
|
description: Defines the artifact version to use from helm package/publish commands.
|
||||||
|
scope:
|
||||||
|
- GENERAL
|
||||||
|
- PARAMETERS
|
||||||
|
- STAGES
|
||||||
|
- STEPS
|
||||||
|
resourceRef:
|
||||||
|
- name: commonPipelineEnvironment
|
||||||
|
param: artifactVersion
|
||||||
containers:
|
containers:
|
||||||
- image: dtzar/helm-kubectl:3.8.0
|
- image: dtzar/helm-kubectl:3.8.0
|
||||||
workingDir: /config
|
workingDir: /config
|
||||||
|
Loading…
x
Reference in New Issue
Block a user