mirror of
https://github.com/docker/compose.git
synced 2025-06-01 04:10:13 +02:00
Merge pull request #10745 from glours/add-builder-support
add support of --builder and BUILDX_BUILDER
This commit is contained in:
commit
827e864ed0
@ -43,6 +43,7 @@ type buildOptions struct {
|
|||||||
noCache bool
|
noCache bool
|
||||||
memory cliopts.MemBytes
|
memory cliopts.MemBytes
|
||||||
ssh string
|
ssh string
|
||||||
|
builder string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (opts buildOptions) toAPIBuildOptions(services []string) (api.BuildOptions, error) {
|
func (opts buildOptions) toAPIBuildOptions(services []string) (api.BuildOptions, error) {
|
||||||
@ -54,6 +55,10 @@ func (opts buildOptions) toAPIBuildOptions(services []string) (api.BuildOptions,
|
|||||||
return api.BuildOptions{}, err
|
return api.BuildOptions{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
builderName := opts.builder
|
||||||
|
if builderName == "" {
|
||||||
|
builderName = os.Getenv("BUILDX_BUILDER")
|
||||||
|
}
|
||||||
|
|
||||||
return api.BuildOptions{
|
return api.BuildOptions{
|
||||||
Pull: opts.pull,
|
Pull: opts.pull,
|
||||||
@ -64,6 +69,7 @@ func (opts buildOptions) toAPIBuildOptions(services []string) (api.BuildOptions,
|
|||||||
Quiet: opts.quiet,
|
Quiet: opts.quiet,
|
||||||
Services: services,
|
Services: services,
|
||||||
SSHs: SSHKeys,
|
SSHs: SSHKeys,
|
||||||
|
Builder: builderName,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,6 +107,7 @@ func buildCommand(p *ProjectOptions, progress *string, backend api.Service) *cob
|
|||||||
cmd.Flags().BoolVar(&opts.pull, "pull", false, "Always attempt to pull a newer version of the image.")
|
cmd.Flags().BoolVar(&opts.pull, "pull", false, "Always attempt to pull a newer version of the image.")
|
||||||
cmd.Flags().StringArrayVar(&opts.args, "build-arg", []string{}, "Set build-time variables for services.")
|
cmd.Flags().StringArrayVar(&opts.args, "build-arg", []string{}, "Set build-time variables for services.")
|
||||||
cmd.Flags().StringVar(&opts.ssh, "ssh", "", "Set SSH authentications used when building service images. (use 'default' for using your default SSH Agent)")
|
cmd.Flags().StringVar(&opts.ssh, "ssh", "", "Set SSH authentications used when building service images. (use 'default' for using your default SSH Agent)")
|
||||||
|
cmd.Flags().StringVar(&opts.builder, "builder", "", "Set builder to use.")
|
||||||
cmd.Flags().Bool("parallel", true, "Build images in parallel. DEPRECATED")
|
cmd.Flags().Bool("parallel", true, "Build images in parallel. DEPRECATED")
|
||||||
cmd.Flags().MarkHidden("parallel") //nolint:errcheck
|
cmd.Flags().MarkHidden("parallel") //nolint:errcheck
|
||||||
cmd.Flags().Bool("compress", true, "Compress the build context using gzip. DEPRECATED")
|
cmd.Flags().Bool("compress", true, "Compress the build context using gzip. DEPRECATED")
|
||||||
|
@ -8,6 +8,7 @@ Build or rebuild services
|
|||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:-----------------|:--------------|:--------|:------------------------------------------------------------------------------------------------------------|
|
|:-----------------|:--------------|:--------|:------------------------------------------------------------------------------------------------------------|
|
||||||
| `--build-arg` | `stringArray` | | Set build-time variables for services. |
|
| `--build-arg` | `stringArray` | | Set build-time variables for services. |
|
||||||
|
| `--builder` | `string` | | Set builder to use. |
|
||||||
| `--dry-run` | | | Execute command in dry run mode |
|
| `--dry-run` | | | Execute command in dry run mode |
|
||||||
| `-m`, `--memory` | `bytes` | `0` | Set memory limit for the build container. Not supported by BuildKit. |
|
| `-m`, `--memory` | `bytes` | `0` | Set memory limit for the build container. Not supported by BuildKit. |
|
||||||
| `--no-cache` | | | Do not use cache when building the image |
|
| `--no-cache` | | | Do not use cache when building the image |
|
||||||
|
@ -24,6 +24,15 @@ options:
|
|||||||
experimentalcli: false
|
experimentalcli: false
|
||||||
kubernetes: false
|
kubernetes: false
|
||||||
swarm: false
|
swarm: false
|
||||||
|
- option: builder
|
||||||
|
value_type: string
|
||||||
|
description: Set builder to use.
|
||||||
|
deprecated: false
|
||||||
|
hidden: false
|
||||||
|
experimental: false
|
||||||
|
experimentalcli: false
|
||||||
|
kubernetes: false
|
||||||
|
swarm: false
|
||||||
- option: compress
|
- option: compress
|
||||||
value_type: bool
|
value_type: bool
|
||||||
default_value: "true"
|
default_value: "true"
|
||||||
|
@ -130,6 +130,8 @@ type BuildOptions struct {
|
|||||||
SSHs []types.SSHKey
|
SSHs []types.SSHKey
|
||||||
// Memory limit for the build container
|
// Memory limit for the build container
|
||||||
Memory int64
|
Memory int64
|
||||||
|
// Builder name passed in the command line
|
||||||
|
Builder string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply mutates project according to build options
|
// Apply mutates project according to build options
|
||||||
|
@ -116,7 +116,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
|
|||||||
}
|
}
|
||||||
buildOptions.BuildArgs = mergeArgs(buildOptions.BuildArgs, flatten(args))
|
buildOptions.BuildArgs = mergeArgs(buildOptions.BuildArgs, flatten(args))
|
||||||
|
|
||||||
digest, err := s.doBuildBuildkit(ctx, service.Name, buildOptions, w)
|
digest, err := s.doBuildBuildkit(ctx, service.Name, buildOptions, w, options.Builder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ import (
|
|||||||
"github.com/moby/buildkit/client"
|
"github.com/moby/buildkit/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *composeService) doBuildBuildkit(ctx context.Context, service string, opts build.Options, p *buildx.Printer) (string, error) {
|
func (s *composeService) doBuildBuildkit(ctx context.Context, service string, opts build.Options, p *buildx.Printer, builderName string) (string, error) {
|
||||||
b, err := builder.New(s.dockerCli)
|
b, err := builder.New(s.dockerCli, builder.WithName(builderName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package e2e
|
package e2e
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
@ -423,3 +424,30 @@ func TestBuildPlatformsStandardErrors(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBuildBuilder(t *testing.T) {
|
||||||
|
c := NewParallelCLI(t)
|
||||||
|
builderName := "build-with-builder"
|
||||||
|
// declare builder
|
||||||
|
result := c.RunDockerCmd(t, "buildx", "create", "--name", builderName, "--use", "--bootstrap")
|
||||||
|
assert.NilError(t, result.Error)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test/", "down")
|
||||||
|
_ = c.RunDockerCmd(t, "buildx", "rm", "-f", builderName)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("use specific builder to run build command", func(t *testing.T) {
|
||||||
|
res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test", "build", "--builder", builderName)
|
||||||
|
assert.NilError(t, res.Error, res.Stderr())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("error when using specific builder to run build command", func(t *testing.T) {
|
||||||
|
res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test", "build", "--builder", "unknown-builder")
|
||||||
|
res.Assert(t, icmd.Expected{
|
||||||
|
ExitCode: 1,
|
||||||
|
Err: fmt.Sprintf(`no builder %q found`, "unknown-builder"),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user