diff --git a/pkg/skaffold/build/gcb/kaniko.go b/pkg/skaffold/build/gcb/kaniko.go index 6576c81639d..00bfbbbbac9 100644 --- a/pkg/skaffold/build/gcb/kaniko.go +++ b/pkg/skaffold/build/gcb/kaniko.go @@ -20,8 +20,10 @@ import ( "fmt" "google.golang.org/api/cloudbuild/v1" + v1 "k8s.io/api/core/v1" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/build/kaniko" + "github.com/GoogleContainerTools/skaffold/pkg/skaffold/build/misc" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker" latestV1 "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest/v1" ) @@ -40,10 +42,24 @@ func (b *Builder) kanikoBuildSpec(a *latestV1.Artifact, tag string) (cloudbuild. return cloudbuild.Build{}, err } + env, err := misc.EvaluateEnv(envFromVars(k.Env)) + if err != nil { + return cloudbuild.Build{}, fmt.Errorf("unable to evaluate env variables: %w", err) + } + return cloudbuild.Build{ Steps: []*cloudbuild.BuildStep{{ Name: b.KanikoImage, Args: kanikoArgs, + Env: env, }}, }, nil } + +func envFromVars(env []v1.EnvVar) []string { + s := make([]string, 0, len(env)) + for _, envVar := range env { + s = append(s, envVar.Name+"="+envVar.Value) + } + return s +} diff --git a/pkg/skaffold/build/gcb/kaniko_test.go b/pkg/skaffold/build/gcb/kaniko_test.go index ee5c611f2a1..3be57595826 100644 --- a/pkg/skaffold/build/gcb/kaniko_test.go +++ b/pkg/skaffold/build/gcb/kaniko_test.go @@ -20,6 +20,7 @@ import ( "testing" "google.golang.org/api/cloudbuild/v1" + kv1 "k8s.io/api/core/v1" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/build/kaniko" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/config" @@ -35,6 +36,7 @@ func TestKanikoBuildSpec(t *testing.T) { description string artifact *latestV1.KanikoArtifact expectedArgs []string + expectedEnv []string }{ { description: "simple build", @@ -57,6 +59,14 @@ func TestKanikoBuildSpec(t *testing.T) { kaniko.BuildArgsFlag, "arg2", }, }, + { + description: "with Env", + artifact: &latestV1.KanikoArtifact{ + DockerfilePath: "Dockerfile", + Env: []kv1.EnvVar{{Name: "KEY1", Value: "VALUE1"}, {Name: "KEY2", Value: "VALUE2"}}, + }, + expectedEnv: []string{"KEY1=VALUE1", "KEY2=VALUE2"}, + }, { description: "with Cache", artifact: &latestV1.KanikoArtifact{ @@ -409,6 +419,7 @@ func TestKanikoBuildSpec(t *testing.T) { Steps: []*cloudbuild.BuildStep{{ Name: "gcr.io/kaniko-project/executor", Args: append(append(defaultExpectedArgs, imageArgs...), test.expectedArgs...), + Env: test.expectedEnv, }}, Options: &cloudbuild.BuildOptions{ DiskSizeGb: 100,