Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix kaniko caching #639

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions integration/dockerfiles/Dockerfile_test_cache
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,7 @@
# If the image is built twice, /date should be the same in both images
# if the cache is implemented correctly

FROM alpine as base_stage

RUN mkdir foo && echo base_stage > foo/base

FROM base_stage as cached_stage

RUN echo cached_stage > foo/cache

FROM cached_stage as bug_stage

RUN echo bug_stage > foo/bug
FROM gcr.io/google-appengine/debian9@sha256:1d6a9a6d106bd795098f60f4abb7083626354fa6735e81743c7f8cfca11259f0
RUN date > /date
COPY context/foo /foo
RUN echo hey
7 changes: 1 addition & 6 deletions pkg/executor/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,12 +190,7 @@ func (s *stageBuilder) optimize(compositeKey CompositeCache, cfg v1.Config) erro

func (s *stageBuilder) build() error {
// Set the initial cache key to be the base image digest, the build args and the SrcContext.
dgst, err := util.ReproducibleDigest(s.image)
if err != nil {
return err
}
compositeKey := NewCompositeCache(dgst)
compositeKey.AddKey(s.opts.BuildArgs...)
compositeKey := NewCompositeCache(s.baseImageDigest)

// Apply optimizations to the instructions.
if err := s.optimize(*compositeKey, s.cf.Config); err != nil {
Expand Down
20 changes: 4 additions & 16 deletions pkg/util/fs_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,7 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) {
if err != nil {
return nil, err
}

// Store a map of files to their mtime. We need to set mtimes in a second pass because creating files
// can change the mtime of a directory.
extractedFiles := map[string]time.Time{}
extractedFiles := []string{}

for i, l := range layers {
logrus.Debugf("Extracting layer %d", i)
Expand Down Expand Up @@ -113,17 +110,10 @@ func GetFSFromImage(root string, img v1.Image) ([]string, error) {
if err := extractFile(root, hdr, tr); err != nil {
return nil, err
}
extractedFiles[filepath.Join(root, filepath.Clean(hdr.Name))] = hdr.ModTime
extractedFiles = append(extractedFiles, filepath.Join(root, filepath.Clean(hdr.Name)))
}
}

fileNames := []string{}
for f, t := range extractedFiles {
fileNames = append(fileNames, f)
os.Chtimes(f, time.Time{}, t)
}

return fileNames, nil
return extractedFiles, nil
}

// DeleteFilesystem deletes the extracted image file system
Expand Down Expand Up @@ -272,7 +262,6 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error {
return err
}
}

return nil
}

Expand Down Expand Up @@ -377,8 +366,7 @@ func RelativeFiles(fp string, root string) ([]string, error) {
}

// ParentDirectories returns a list of paths to all parent directories
// Ex. /some/temp/dir -> [/some, /some/temp, /some/temp/dir]
// This purposefully excludes the /.
// Ex. /some/temp/dir -> [/, /some, /some/temp, /some/temp/dir]
func ParentDirectories(path string) []string {
path = filepath.Clean(path)
dirs := strings.Split(path, "/")
Expand Down
1 change: 0 additions & 1 deletion pkg/util/tar_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ func (t *Tar) Close() {

// AddFileToTar adds the file at path p to the tar
func (t *Tar) AddFileToTar(p string) error {
logrus.Debugf("Adding file %s to tar", p)
i, err := os.Lstat(p)
if err != nil {
return fmt.Errorf("Failed to get file info for %s: %s", p, err)
Expand Down
29 changes: 0 additions & 29 deletions pkg/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,11 @@ import (
"crypto/md5"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"io"
"os"
"strconv"
"syscall"

"github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/partial"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
Expand Down Expand Up @@ -130,29 +127,3 @@ func SHA256(r io.Reader) (string, error) {
}
return hex.EncodeToString(hasher.Sum(make([]byte, 0, hasher.Size()))), nil
}

type ReproducibleManifest struct {
Layers []v1.Descriptor
Config v1.Config
}

func ReproducibleDigest(img partial.WithManifestAndConfigFile) (string, error) {
mfst, err := img.Manifest()
if err != nil {
return "", err
}
cfg, err := img.ConfigFile()
if err != nil {
return "", err
}
rm := ReproducibleManifest{
Layers: mfst.Layers,
Config: cfg.Config,
}

b, err := json.Marshal(rm)
if err != nil {
return "", err
}
return string(b), nil
}