diff --git a/pkg/executor/build.go b/pkg/executor/build.go index 73b2f0df2..fbb249553 100644 --- a/pkg/executor/build.go +++ b/pkg/executor/build.go @@ -787,7 +787,7 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) { } } if opts.Cleanup { - if err = util.DeleteFilesystem(); err != nil { + if err = util.CleanupFilesystem(); err != nil { return nil, err } } diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index c8d5a613a..67eea9633 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -27,6 +27,7 @@ import ( "net/http" "os" "path/filepath" + "regexp" "strings" "syscall" "time" @@ -229,6 +230,30 @@ func GetFSFromLayers(root string, layers []v1.Layer, opts ...FSOpt) ([]string, e return extractedFiles, nil } +// CleanupFilesystem deletes the extracted image file system, snapshots and stage dependent files +func CleanupFilesystem() error { + DeleteFilesystem() + logrus.Info("Deleting snapshots and layer dependet files...") + numericPattern := regexp.MustCompile(`^\d+$`) + return filepath.Walk(config.KanikoDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + // ignore errors when deleting. + return nil //nolint:nilerr + } + + if numericPattern.MatchString(info.Name()) && isExist(path) { + err := os.RemoveAll(path) + if err != nil { + logrus.Debugf("Error deleting path: %s\n", path) + return nil //nolint:nilerr + } + logrus.Debugf("Deleted path: %s\n", path) + } + + return nil //nolint:nilerr + }) +} + // DeleteFilesystem deletes the extracted image file system func DeleteFilesystem() error { logrus.Info("Deleting filesystem...")