github.com/jaylevin/jenkins-library@v1.230.4/cmd/helmExecute.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/SAP/jenkins-library/pkg/kubernetes"
     7  	"github.com/SAP/jenkins-library/pkg/log"
     8  	"github.com/SAP/jenkins-library/pkg/telemetry"
     9  	"github.com/SAP/jenkins-library/pkg/versioning"
    10  )
    11  
    12  func helmExecute(config helmExecuteOptions, telemetryData *telemetry.CustomData) {
    13  	helmConfig := kubernetes.HelmExecuteOptions{
    14  		ChartPath:                 config.ChartPath,
    15  		Image:                     config.Image,
    16  		Namespace:                 config.Namespace,
    17  		KubeContext:               config.KubeContext,
    18  		KubeConfig:                config.KubeConfig,
    19  		HelmDeployWaitSeconds:     config.HelmDeployWaitSeconds,
    20  		AppVersion:                config.AppVersion,
    21  		Dependency:                config.Dependency,
    22  		PackageDependencyUpdate:   config.PackageDependencyUpdate,
    23  		HelmValues:                config.HelmValues,
    24  		FilterTest:                config.FilterTest,
    25  		DumpLogs:                  config.DumpLogs,
    26  		TargetRepositoryURL:       config.TargetRepositoryURL,
    27  		TargetRepositoryName:      config.TargetRepositoryName,
    28  		TargetRepositoryUser:      config.TargetRepositoryUser,
    29  		TargetRepositoryPassword:  config.TargetRepositoryPassword,
    30  		HelmCommand:               config.HelmCommand,
    31  		CustomTLSCertificateLinks: config.CustomTLSCertificateLinks,
    32  		Version:                   config.Version,
    33  		PublishVersion:            config.Version,
    34  	}
    35  
    36  	utils := kubernetes.NewDeployUtilsBundle(helmConfig.CustomTLSCertificateLinks)
    37  
    38  	artifactOpts := versioning.Options{
    39  		VersioningScheme: "library",
    40  	}
    41  
    42  	artifact, err := versioning.GetArtifact("helm", "", &artifactOpts, utils)
    43  	if err != nil {
    44  		log.Entry().WithError(err).Fatalf("getting artifact information failed: %v", err)
    45  	}
    46  	artifactInfo, err := artifact.GetCoordinates()
    47  
    48  	helmConfig.DeploymentName = artifactInfo.ArtifactID
    49  
    50  	if len(helmConfig.PublishVersion) == 0 {
    51  		helmConfig.PublishVersion = artifactInfo.Version
    52  	}
    53  
    54  	helmExecutor := kubernetes.NewHelmExecutor(helmConfig, utils, GeneralConfig.Verbose, log.Writer())
    55  
    56  	// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
    57  	if err := runHelmExecute(config, helmExecutor); err != nil {
    58  		log.Entry().WithError(err).Fatalf("step execution failed: %v", err)
    59  	}
    60  }
    61  
    62  func runHelmExecute(config helmExecuteOptions, helmExecutor kubernetes.HelmExecutor) error {
    63  	switch config.HelmCommand {
    64  	case "upgrade":
    65  		if err := helmExecutor.RunHelmUpgrade(); err != nil {
    66  			return fmt.Errorf("failed to execute upgrade: %v", err)
    67  		}
    68  	case "lint":
    69  		if err := helmExecutor.RunHelmLint(); err != nil {
    70  			return fmt.Errorf("failed to execute helm lint: %v", err)
    71  		}
    72  	case "install":
    73  		if err := helmExecutor.RunHelmInstall(); err != nil {
    74  			return fmt.Errorf("failed to execute helm install: %v", err)
    75  		}
    76  	case "test":
    77  		if err := helmExecutor.RunHelmTest(); err != nil {
    78  			return fmt.Errorf("failed to execute helm test: %v", err)
    79  		}
    80  	case "uninstall":
    81  		if err := helmExecutor.RunHelmUninstall(); err != nil {
    82  			return fmt.Errorf("failed to execute helm uninstall: %v", err)
    83  		}
    84  	case "dependency":
    85  		if err := helmExecutor.RunHelmDependency(); err != nil {
    86  			return fmt.Errorf("failed to execute helm dependency: %v", err)
    87  		}
    88  	case "publish":
    89  		if err := helmExecutor.RunHelmPublish(); err != nil {
    90  			return fmt.Errorf("failed to execute helm publish: %v", err)
    91  		}
    92  	default:
    93  		if err := runHelmExecuteDefault(config, helmExecutor); err != nil {
    94  			return err
    95  		}
    96  	}
    97  
    98  	return nil
    99  }
   100  
   101  func runHelmExecuteDefault(config helmExecuteOptions, helmExecutor kubernetes.HelmExecutor) error {
   102  	if err := helmExecutor.RunHelmLint(); err != nil {
   103  		return fmt.Errorf("failed to execute helm lint: %v", err)
   104  	}
   105  
   106  	if len(config.Dependency) > 0 {
   107  		if err := helmExecutor.RunHelmDependency(); err != nil {
   108  			return fmt.Errorf("failed to execute helm dependency: %v", err)
   109  		}
   110  	}
   111  
   112  	if config.Publish {
   113  		if err := helmExecutor.RunHelmPublish(); err != nil {
   114  			return fmt.Errorf("failed to execute helm publish: %v", err)
   115  		}
   116  	}
   117  
   118  	return nil
   119  }