github.com/osievert/jfrog-cli-core@v1.2.7/artifactory/commands/container/buildcreate.go (about)

     1  package container
     2  
     3  import (
     4  	"github.com/jfrog/jfrog-cli-core/artifactory/utils"
     5  	"github.com/jfrog/jfrog-cli-core/artifactory/utils/container"
     6  	"github.com/jfrog/jfrog-cli-core/utils/config"
     7  )
     8  
     9  type BuildDockerCreateCommand struct {
    10  	ContainerManagerCommand
    11  	containerManagerType container.ContainerManagerType
    12  	manifestSha256       string
    13  }
    14  
    15  func NewBuildDockerCreateCommand() *BuildDockerCreateCommand {
    16  	return &BuildDockerCreateCommand{containerManagerType: container.Kaniko}
    17  }
    18  
    19  // Set tag and manifest sha256 of an image in Artifactory.
    20  // This file can be generated by Kaniko using the'--image-name-with-digest-file' flag.
    21  // Kaniko is a tool to build & push container images from a Dockerfile, inside a container or Kubernetes cluster.
    22  // Tag and Sha256 will be used later on to search the image in Artifactory.
    23  func (bpc *BuildDockerCreateCommand) SetImageNameWithDigest(filePath string) (err error) {
    24  	bpc.imageTag, bpc.manifestSha256, err = container.GetImageTagWithDigest(filePath)
    25  	return
    26  }
    27  
    28  func (bpc *BuildDockerCreateCommand) Run() error {
    29  	rtDetails, err := bpc.RtDetails()
    30  	if err != nil {
    31  		return err
    32  	}
    33  	cm := container.NewManager(bpc.containerManagerType)
    34  	image := container.NewImage(bpc.imageTag)
    35  	buildName := bpc.BuildConfiguration().BuildName
    36  	buildNumber := bpc.BuildConfiguration().BuildNumber
    37  	if err := utils.SaveBuildGeneralDetails(buildName, buildNumber); err != nil {
    38  		return err
    39  	}
    40  	serviceManager, err := utils.CreateServiceManager(rtDetails, false)
    41  	if err != nil {
    42  		return err
    43  	}
    44  	builder, err := container.NewKanikoBuildInfoBuilder(image, bpc.Repo(), buildName, buildNumber, serviceManager, container.Push, cm, bpc.manifestSha256)
    45  	if err != nil {
    46  		return err
    47  	}
    48  	buildInfo, err := builder.Build(bpc.BuildConfiguration().Module)
    49  	if err != nil {
    50  		return err
    51  	}
    52  	return utils.SaveBuildInfo(buildName, buildNumber, buildInfo)
    53  }
    54  
    55  func (pc *BuildDockerCreateCommand) CommandName() string {
    56  	return "rt_build_docker_create"
    57  }
    58  
    59  func (pc *BuildDockerCreateCommand) RtDetails() (*config.ArtifactoryDetails, error) {
    60  	return pc.rtDetails, nil
    61  }