@@ -17,6 +17,7 @@ limitations under the License.
1717package integration
1818
1919import (
20+ "bytes"
2021 "fmt"
2122 "io/ioutil"
2223 "os"
@@ -46,10 +47,11 @@ const (
4647
4748// Arguments to build Dockerfiles with, used for both docker and kaniko builds
4849var argsMap = map [string ][]string {
49- "Dockerfile_test_run" : {"file=/file" },
50- "Dockerfile_test_workdir" : {"workdir=/arg/workdir" },
51- "Dockerfile_test_add" : {"file=context/foo" },
52- "Dockerfile_test_onbuild" : {"file=/tmp/onbuild" },
50+ "Dockerfile_test_run" : {"file=/file" },
51+ "Dockerfile_test_workdir" : {"workdir=/arg/workdir" },
52+ "Dockerfile_test_add" : {"file=context/foo" },
53+ "Dockerfile_test_arg_secret" : {"SSH_PRIVATE_KEY" , "SSH_PUBLIC_KEY=Pµbl1cK€Y" },
54+ "Dockerfile_test_onbuild" : {"file=/tmp/onbuild" },
5355 "Dockerfile_test_scratch" : {
5456 "image=scratch" ,
5557 "hello=hello-value" ,
@@ -59,6 +61,11 @@ var argsMap = map[string][]string{
5961 "Dockerfile_test_multistage" : {"file=/foo2" },
6062}
6163
64+ // Environment to build Dockerfiles with, used for both docker and kaniko builds
65+ var envsMap = map [string ][]string {
66+ "Dockerfile_test_arg_secret" : {"SSH_PRIVATE_KEY=ThEPriv4t3Key" },
67+ }
68+
6269// Arguments to build Dockerfiles with when building with docker
6370var additionalDockerFlagsMap = map [string ][]string {
6471 "Dockerfile_test_target" : {"--target=second" },
@@ -71,6 +78,36 @@ var additionalKanikoFlagsMap = map[string][]string{
7178 "Dockerfile_test_target" : {"--target=second" },
7279}
7380
81+ // output check to do when building with kaniko
82+ var outputChecks = map [string ]func (string , []byte ) error {
83+ "Dockerfile_test_arg_secret" : checkArgsNotPrinted ,
84+ }
85+
86+ // Checks if argument are not printed in output.
87+ // Argument may be passed through --build-arg key=value manner or --build-arg key with key in environment
88+ func checkArgsNotPrinted (dockerfile string , out []byte ) error {
89+ for _ , arg := range argsMap [dockerfile ] {
90+ argSplitted := strings .Split (arg , "=" )
91+ if len (argSplitted ) == 2 {
92+ if idx := bytes .Index (out , []byte (argSplitted [1 ])); idx >= 0 {
93+ return fmt .Errorf ("Argument value %s for argument %s displayed in output" , argSplitted [1 ], argSplitted [0 ])
94+ }
95+ } else if len (argSplitted ) == 1 {
96+ if envs , ok := envsMap [dockerfile ]; ok {
97+ for _ , env := range envs {
98+ envSplitted := strings .Split (env , "=" )
99+ if len (envSplitted ) == 2 {
100+ if idx := bytes .Index (out , []byte (envSplitted [1 ])); idx >= 0 {
101+ return fmt .Errorf ("Argument value %s for argument %s displayed in output" , envSplitted [1 ], argSplitted [0 ])
102+ }
103+ }
104+ }
105+ }
106+ }
107+ }
108+ return nil
109+ }
110+
74111var bucketContextTests = []string {"Dockerfile_test_copy_bucket" }
75112var reproducibleTests = []string {"Dockerfile_test_reproducible" }
76113
@@ -164,8 +201,7 @@ func (d *DockerFileBuilder) BuildImage(config *gcpConfig, dockerfilesPath, docke
164201 var buildArgs []string
165202 buildArgFlag := "--build-arg"
166203 for _ , arg := range argsMap [dockerfile ] {
167- buildArgs = append (buildArgs , buildArgFlag )
168- buildArgs = append (buildArgs , arg )
204+ buildArgs = append (buildArgs , buildArgFlag , arg )
169205 }
170206 // build docker image
171207 additionalFlags := append (buildArgs , additionalDockerFlagsMap [dockerfile ]... )
@@ -177,6 +213,9 @@ func (d *DockerFileBuilder) BuildImage(config *gcpConfig, dockerfilesPath, docke
177213 "." },
178214 additionalFlags ... )... ,
179215 )
216+ if env , ok := envsMap [dockerfile ]; ok {
217+ dockerCmd .Env = append (dockerCmd .Env , env ... )
218+ }
180219
181220 timer := timing .Start (dockerfile + "_docker" )
182221 out , err := RunCommandWithoutTest (dockerCmd )
@@ -225,7 +264,11 @@ func (d *DockerFileBuilder) BuildImage(config *gcpConfig, dockerfilesPath, docke
225264 "-v" , cwd + ":/workspace" ,
226265 "-v" , benchmarkDir + ":/kaniko/benchmarks" ,
227266 }
228-
267+ if env , ok := envsMap [dockerfile ]; ok {
268+ for _ , envVariable := range env {
269+ dockerRunFlags = append (dockerRunFlags , "-e" , envVariable )
270+ }
271+ }
229272 dockerRunFlags = addServiceAccountFlags (dockerRunFlags , serviceAccount )
230273
231274 dockerRunFlags = append (dockerRunFlags , ExecutorImage ,
@@ -242,6 +285,11 @@ func (d *DockerFileBuilder) BuildImage(config *gcpConfig, dockerfilesPath, docke
242285 if err != nil {
243286 return fmt .Errorf ("Failed to build image %s with kaniko command \" %s\" : %s %s" , dockerImage , kanikoCmd .Args , err , string (out ))
244287 }
288+ if outputCheck := outputChecks [dockerfile ]; outputCheck != nil {
289+ if err := outputCheck (dockerfile , out ); err != nil {
290+ return fmt .Errorf ("Output check failed for image %s with kaniko command \" %s\" : %s %s" , dockerImage , kanikoCmd .Args , err , string (out ))
291+ }
292+ }
245293
246294 d .FilesBuilt [dockerfile ] = true
247295 return nil
0 commit comments