feat: disable cache-copy-layers in multistage builds; closes 2065 (#2227)
This commit is contained in:
		
							parent
							
								
									06866c0b4c
								
							
						
					
					
						commit
						239d16cd1c
					
				|  | @ -58,6 +58,10 @@ func ParseStages(opts *config.KanikoOptions) ([]instructions.Stage, []instructio | ||||||
| 		return nil, nil, errors.Wrap(err, "parsing dockerfile") | 		return nil, nil, errors.Wrap(err, "parsing dockerfile") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if opts.CacheCopyLayers && len(stages) >= 2 { | ||||||
|  | 		return nil, nil, errors.New("kaniko does not support caching copy layers in multistage builds") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	metaArgs, err = expandNested(metaArgs, opts.BuildArgs) | 	metaArgs, err = expandNested(metaArgs, opts.BuildArgs) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, nil, errors.Wrap(err, "expanding meta ARGs") | 		return nil, nil, errors.Wrap(err, "expanding meta ARGs") | ||||||
|  |  | ||||||
|  | @ -29,6 +29,39 @@ import ( | ||||||
| 	"github.com/moby/buildkit/frontend/dockerfile/instructions" | 	"github.com/moby/buildkit/frontend/dockerfile/instructions" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | func Test_ParseStages_NoMultistageWithCacheCopy(t *testing.T) { | ||||||
|  | 	dockerfile := ` | ||||||
|  | 	FROM scratch as first | ||||||
|  | 	COPY testfile / | ||||||
|  | 
 | ||||||
|  | 	FROM scratch as second | ||||||
|  | 	COPY --from=second testfile / | ||||||
|  | 	` | ||||||
|  | 	tmpfile, err := ioutil.TempFile("", "Dockerfile.test") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	defer os.Remove(tmpfile.Name()) | ||||||
|  | 
 | ||||||
|  | 	if _, err := tmpfile.Write([]byte(dockerfile)); err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	if err := tmpfile.Close(); err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	opts := &config.KanikoOptions{ | ||||||
|  | 		DockerfilePath:  tmpfile.Name(), | ||||||
|  | 		CacheCopyLayers: true, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	_, _, err = ParseStages(opts) | ||||||
|  | 	if err == nil { | ||||||
|  | 		t.Fatal("expected ParseStages to fail on MultiStage build if CacheCopyLayers=true") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func Test_ParseStages_ArgValueWithQuotes(t *testing.T) { | func Test_ParseStages_ArgValueWithQuotes(t *testing.T) { | ||||||
| 	dockerfile := ` | 	dockerfile := ` | ||||||
| 	ARG IMAGE="ubuntu:16.04" | 	ARG IMAGE="ubuntu:16.04" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue