diff --git a/pkg/skaffold/build/gcb/kaniko_test.go b/pkg/skaffold/build/gcb/kaniko_test.go index 0950e754823..82745758ab8 100644 --- a/pkg/skaffold/build/gcb/kaniko_test.go +++ b/pkg/skaffold/build/gcb/kaniko_test.go @@ -18,6 +18,7 @@ package gcb import ( "context" + "fmt" "testing" "google.golang.org/api/cloudbuild/v1" @@ -104,6 +105,28 @@ func TestKanikoBuildSpec(t *testing.T) { kaniko.CacheCopyLayersFlag, }, }, + { + description: "with Cache Run Layers is false", + artifact: &latest.KanikoArtifact{ + DockerfilePath: "Dockerfile", + Cache: &latest.KanikoCache{CacheRunLayers: boolPtr(false)}, + }, + expectedArgs: []string{ + kaniko.CacheFlag, + fmt.Sprintf("%s=%t", kaniko.CacheRunLayersFlag, false), + }, + }, + { + description: "with Cache Run Layers is true", + artifact: &latest.KanikoArtifact{ + DockerfilePath: "Dockerfile", + Cache: &latest.KanikoCache{CacheRunLayers: boolPtr(true)}, + }, + expectedArgs: []string{ + kaniko.CacheFlag, + fmt.Sprintf("%s=%t", kaniko.CacheRunLayersFlag, true), + }, + }, { description: "with Cleanup", artifact: &latest.KanikoArtifact{ @@ -482,6 +505,10 @@ func TestKanikoBuildSpec(t *testing.T) { } } +func boolPtr(b bool) *bool { + return &b +} + type mockArtifactStore map[string]string func (m mockArtifactStore) GetImageTag(imageName string) (string, bool) { return m[imageName], true } diff --git a/pkg/skaffold/build/kaniko/args.go b/pkg/skaffold/build/kaniko/args.go index 3f6cf8246e1..fcebf6a25f0 100644 --- a/pkg/skaffold/build/kaniko/args.go +++ b/pkg/skaffold/build/kaniko/args.go @@ -59,6 +59,9 @@ func Args(artifact *latest.KanikoArtifact, tag, context string) ([]string, error if artifact.Cache.CacheCopyLayers { args = append(args, CacheCopyLayersFlag) } + if artifact.Cache.CacheRunLayers != nil{ + args = append(args, fmt.Sprintf("%s=%t", CacheRunLayersFlag, *artifact.Cache.CacheRunLayers)) + } } if artifact.Target != "" { diff --git a/pkg/skaffold/build/kaniko/types.go b/pkg/skaffold/build/kaniko/types.go index d190ab4a40f..2466f5a24d5 100644 --- a/pkg/skaffold/build/kaniko/types.go +++ b/pkg/skaffold/build/kaniko/types.go @@ -23,6 +23,8 @@ const ( CacheFlag = "--cache" // CacheCopyLayersFlag additional flag CacheCopyLayersFlag = "--cache-copy-layers" + // CacheRunLayersFlag additional flag + CacheRunLayersFlag = "--cache-run-layers" // CacheDirFlag additional flag CacheDirFlag = "--cache-dir" // CacheRepoFlag additional flag diff --git a/pkg/skaffold/schema/defaults/defaults.go b/pkg/skaffold/schema/defaults/defaults.go index 7b61e5037df..616c2b7132a 100644 --- a/pkg/skaffold/schema/defaults/defaults.go +++ b/pkg/skaffold/schema/defaults/defaults.go @@ -362,6 +362,7 @@ func setKanikoArtifactDefaults(a *latest.KanikoArtifact) { a.DockerfilePath = valueOrDefault(a.DockerfilePath, constants.DefaultDockerfilePath) a.InitImage = valueOrDefault(a.InitImage, constants.DefaultBusyboxImage) a.DigestFile = valueOrDefault(a.DigestFile, constants.DefaultKanikoDigestFile) + a.Cache.CacheRunLayers = valueOrDefaultBool(a.Cache.CacheRunLayers, true) a.CopyMaxRetries = valueOrDefaultInt(a.CopyMaxRetries, kaniko.DefaultCopyMaxRetries) a.CopyTimeout = valueOrDefault(a.CopyTimeout, kaniko.DefaultCopyTimeout) } @@ -380,6 +381,13 @@ func valueOrDefaultInt(v *int, def int) *int { return &def } +func valueOrDefaultBool(v *bool, def bool) *bool { + if v != nil { + return v + } + return &def +} + func currentNamespace() (string, error) { cfg, err := kubectx.CurrentConfig() if err != nil {