| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package docker
- import (
- "context"
- "fmt"
- "os"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/pkg/archive"
- "github.com/moby/moby/pkg/jsonmessage"
- "github.com/moby/term"
- )
- type BuildOpts struct {
- ImageRepo string
- Tag string
- BuildContext string
- Env map[string]string
- }
- // BuildLocal
- func (a *Agent) BuildLocal(opts *BuildOpts, dockerfilePath string) error {
- tar, err := archive.TarWithOptions(opts.BuildContext, &archive.TarOptions{})
- if err != nil {
- return err
- }
- buildArgs := make(map[string]*string)
- for key, val := range opts.Env {
- valCopy := val
- buildArgs[key] = &valCopy
- }
- out, err := a.client.ImageBuild(context.Background(), tar, types.ImageBuildOptions{
- Dockerfile: dockerfilePath,
- BuildArgs: buildArgs,
- Tags: []string{
- fmt.Sprintf("%s:%s", opts.ImageRepo, opts.Tag),
- },
- Remove: true,
- })
- if err != nil {
- return err
- }
- defer out.Body.Close()
- termFd, isTerm := term.GetFdInfo(os.Stderr)
- return jsonmessage.DisplayJSONMessagesStream(out.Body, os.Stderr, termFd, isTerm, nil)
- }
|