فهرست منبع

builder: move tagging to exporter

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Tonis Tiigi 7 سال پیش
والد
کامیت
4cdb6853dc
3فایلهای تغییر یافته به همراه21 افزوده شده و 11 حذف شده
  1. 1 1
      api/server/backend/build/backend.go
  2. 7 0
      builder/builder-next/builder.go
  3. 13 10
      builder/builder-next/exporter/export.go

+ 1 - 1
api/server/backend/build/backend.go

@@ -82,8 +82,8 @@ func (b *Backend) Build(ctx context.Context, config backend.BuildConfig) (string
 	if !useBuildKit {
 	if !useBuildKit {
 		stdout := config.ProgressWriter.StdoutFormatter
 		stdout := config.ProgressWriter.StdoutFormatter
 		fmt.Fprintf(stdout, "Successfully built %s\n", stringid.TruncateID(imageID))
 		fmt.Fprintf(stdout, "Successfully built %s\n", stringid.TruncateID(imageID))
+		err = tagger.TagImages(image.ID(imageID))
 	}
 	}
-	err = tagger.TagImages(image.ID(imageID))
 	return imageID, err
 	return imageID, err
 }
 }
 
 

+ 7 - 0
builder/builder-next/builder.go

@@ -207,9 +207,16 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
 		frontendAttrs["no-cache"] = ""
 		frontendAttrs["no-cache"] = ""
 	}
 	}
 
 
+	exporterAttrs := map[string]string{}
+
+	if len(opt.Options.Tags) > 0 {
+		exporterAttrs["name"] = strings.Join(opt.Options.Tags, ",")
+	}
+
 	req := &controlapi.SolveRequest{
 	req := &controlapi.SolveRequest{
 		Ref:           id,
 		Ref:           id,
 		Exporter:      "moby",
 		Exporter:      "moby",
+		ExporterAttrs: exporterAttrs,
 		Frontend:      "dockerfile.v0",
 		Frontend:      "dockerfile.v0",
 		FrontendAttrs: frontendAttrs,
 		FrontendAttrs: frontendAttrs,
 		Session:       opt.Options.SessionID,
 		Session:       opt.Options.SessionID,

+ 13 - 10
builder/builder-next/exporter/export.go

@@ -3,6 +3,7 @@ package containerimage
 import (
 import (
 	"context"
 	"context"
 	"fmt"
 	"fmt"
+	"strings"
 
 
 	distref "github.com/docker/distribution/reference"
 	distref "github.com/docker/distribution/reference"
 	"github.com/docker/docker/image"
 	"github.com/docker/docker/image"
@@ -46,11 +47,13 @@ func (e *imageExporter) Resolve(ctx context.Context, opt map[string]string) (exp
 	for k, v := range opt {
 	for k, v := range opt {
 		switch k {
 		switch k {
 		case keyImageName:
 		case keyImageName:
-			ref, err := distref.ParseNormalizedNamed(v)
-			if err != nil {
-				return nil, err
+			for _, v := range strings.Split(v, ",") {
+				ref, err := distref.ParseNormalizedNamed(v)
+				if err != nil {
+					return nil, err
+				}
+				i.targetNames = append(i.targetNames, ref)
 			}
 			}
-			i.targetName = ref
 		case exporterImageConfig:
 		case exporterImageConfig:
 			i.config = []byte(v)
 			i.config = []byte(v)
 		default:
 		default:
@@ -62,8 +65,8 @@ func (e *imageExporter) Resolve(ctx context.Context, opt map[string]string) (exp
 
 
 type imageExporterInstance struct {
 type imageExporterInstance struct {
 	*imageExporter
 	*imageExporter
-	targetName distref.Named
-	config     []byte
+	targetNames []distref.Named
+	config      []byte
 }
 }
 
 
 func (e *imageExporterInstance) Name() string {
 func (e *imageExporterInstance) Name() string {
@@ -126,11 +129,11 @@ func (e *imageExporterInstance) Export(ctx context.Context, ref cache.ImmutableR
 	}
 	}
 	configDone(nil)
 	configDone(nil)
 
 
-	if e.targetName != nil {
-		if e.opt.ReferenceStore != nil {
-			tagDone := oneOffProgress(ctx, "naming to "+e.targetName.String())
+	if e.opt.ReferenceStore != nil {
+		for _, targetName := range e.targetNames {
+			tagDone := oneOffProgress(ctx, "naming to "+targetName.String())
 
 
-			if err := e.opt.ReferenceStore.AddTag(e.targetName, digest.Digest(id), true); err != nil {
+			if err := e.opt.ReferenceStore.AddTag(targetName, digest.Digest(id), true); err != nil {
 				return nil, tagDone(err)
 				return nil, tagDone(err)
 			}
 			}
 			tagDone(nil)
 			tagDone(nil)