mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-18 04:46:31 +02:00
Add --single-snapshot flag to snapshot once after the build
This commit is contained in:
@@ -45,9 +45,18 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func DoBuild(dockerfilePath, srcContext, snapshotMode string, args []string) (name.Reference, v1.Image, error) {
|
||||
// KanikoBuildArgs contains all the args required to build the image
|
||||
type KanikoBuildArgs struct {
|
||||
DockerfilePath string
|
||||
SrcContext string
|
||||
SnapshotMode string
|
||||
Args []string
|
||||
SingleSnapshot bool
|
||||
}
|
||||
|
||||
func DoBuild(k KanikoBuildArgs) (name.Reference, v1.Image, error) {
|
||||
// Parse dockerfile and unpack base image to root
|
||||
d, err := ioutil.ReadFile(dockerfilePath)
|
||||
d, err := ioutil.ReadFile(k.DockerfilePath)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -58,12 +67,12 @@ func DoBuild(dockerfilePath, srcContext, snapshotMode string, args []string) (na
|
||||
}
|
||||
dockerfile.ResolveStages(stages)
|
||||
|
||||
hasher, err := getHasher(snapshotMode)
|
||||
hasher, err := getHasher(k.SnapshotMode)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
for index, stage := range stages {
|
||||
baseImage, err := util.ResolveEnvironmentReplacement(stage.BaseName, args, false)
|
||||
baseImage, err := util.ResolveEnvironmentReplacement(stage.BaseName, k.Args, false)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -109,9 +118,10 @@ func DoBuild(dockerfilePath, srcContext, snapshotMode string, args []string) (na
|
||||
if err := resolveOnBuild(&stage, &imageConfig.Config); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
buildArgs := dockerfile.NewBuildArgs(args)
|
||||
for _, cmd := range stage.Commands {
|
||||
dockerCommand, err := commands.GetCommand(cmd, srcContext)
|
||||
buildArgs := dockerfile.NewBuildArgs(k.Args)
|
||||
for index, cmd := range stage.Commands {
|
||||
finalCmd := index == len(stage.Commands)-1
|
||||
dockerCommand, err := commands.GetCommand(cmd, k.SrcContext)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -121,11 +131,14 @@ func DoBuild(dockerfilePath, srcContext, snapshotMode string, args []string) (na
|
||||
if err := dockerCommand.ExecuteCommand(&imageConfig.Config, buildArgs); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if !finalStage {
|
||||
if !finalStage || (k.SingleSnapshot && !finalCmd) {
|
||||
continue
|
||||
}
|
||||
// Now, we get the files to snapshot from this command and take the snapshot
|
||||
snapshotFiles := dockerCommand.FilesToSnapshot()
|
||||
if k.SingleSnapshot && finalCmd {
|
||||
snapshotFiles = nil
|
||||
}
|
||||
contents, err := snapshotter.TakeSnapshot(snapshotFiles)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
|
||||
Reference in New Issue
Block a user