mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-19 05:22:06 +02:00
Merge pull request #841 from wripley/master
Added --image-name-with-digest flag
This commit is contained in:
@@ -37,6 +37,7 @@ type KanikoOptions struct {
|
||||
Target string
|
||||
CacheRepo string
|
||||
DigestFile string
|
||||
ImageNameDigestFile string
|
||||
OCILayoutPath string
|
||||
Destinations multiArg
|
||||
BuildArgs multiArg
|
||||
|
||||
+29
-5
@@ -96,17 +96,29 @@ func CheckPushPermissions(opts *config.KanikoOptions) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDigest(image v1.Image) ([]byte, error) {
|
||||
digest, err := image.Digest()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return []byte(digest.String()), nil
|
||||
}
|
||||
|
||||
// DoPush is responsible for pushing image to the destinations specified in opts
|
||||
func DoPush(image v1.Image, opts *config.KanikoOptions) error {
|
||||
t := timing.Start("Total Push Time")
|
||||
|
||||
if opts.DigestFile != "" {
|
||||
digest, err := image.Digest()
|
||||
var digestByteArray []byte
|
||||
var builder strings.Builder
|
||||
if opts.DigestFile != "" || opts.ImageNameDigestFile != "" {
|
||||
var err error
|
||||
digestByteArray, err = getDigest(image)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error fetching digest")
|
||||
}
|
||||
digestByteArray := []byte(digest.String())
|
||||
err = ioutil.WriteFile(opts.DigestFile, digestByteArray, 0644)
|
||||
}
|
||||
|
||||
if opts.DigestFile != "" {
|
||||
err := ioutil.WriteFile(opts.DigestFile, digestByteArray, 0644)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "writing digest to file failed")
|
||||
}
|
||||
@@ -128,9 +140,21 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "getting tag for destination")
|
||||
}
|
||||
if opts.ImageNameDigestFile != "" {
|
||||
imageName := []byte(destRef.Repository.Name() + "@")
|
||||
builder.Write(append(imageName, digestByteArray...))
|
||||
builder.WriteString("\n")
|
||||
}
|
||||
destRefs = append(destRefs, destRef)
|
||||
}
|
||||
|
||||
if opts.ImageNameDigestFile != "" {
|
||||
err := ioutil.WriteFile(opts.ImageNameDigestFile, []byte(builder.String()), 0644)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "writing digest to file failed")
|
||||
}
|
||||
}
|
||||
|
||||
if opts.TarPath != "" {
|
||||
tagToImage := map[name.Tag]v1.Image{}
|
||||
for _, destRef := range destRefs {
|
||||
|
||||
@@ -192,3 +192,34 @@ func TestOCILayoutPath(t *testing.T) {
|
||||
got, err := layoutImage.Manifest()
|
||||
testutil.CheckErrorAndDeepEqual(t, false, err, want, got)
|
||||
}
|
||||
|
||||
func TestImageNameDigestFile(t *testing.T) {
|
||||
image, err := random.Image(1024, 4)
|
||||
if err != nil {
|
||||
t.Fatalf("could not create image: %s", err)
|
||||
}
|
||||
|
||||
digest, err := image.Digest()
|
||||
if err != nil {
|
||||
t.Fatalf("could not get image digest: %s", err)
|
||||
}
|
||||
|
||||
opts := config.KanikoOptions{
|
||||
NoPush: true,
|
||||
Destinations: []string{"gcr.io/foo/bar:latest", "bob/image"},
|
||||
ImageNameDigestFile: "tmpFile",
|
||||
}
|
||||
|
||||
defer os.Remove("tmpFile")
|
||||
|
||||
if err := DoPush(image, &opts); err != nil {
|
||||
t.Fatalf("could not push image: %s", err)
|
||||
}
|
||||
|
||||
want := []byte("gcr.io/foo/bar@" + digest.String() + "\nindex.docker.io/bob/image@" + digest.String() + "\n")
|
||||
|
||||
got, err := ioutil.ReadFile("tmpFile")
|
||||
|
||||
testutil.CheckErrorAndDeepEqual(t, false, err, want, got)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user