Add BUILDKIT_SANDBOX_HOSTNAME build-arg
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>master
parent
44891f4cb9
commit
e5ecbf9722
|
@ -33,29 +33,35 @@ import (
|
|||
const (
|
||||
DefaultLocalNameContext = "context"
|
||||
DefaultLocalNameDockerfile = "dockerfile"
|
||||
keyTarget = "target"
|
||||
keyFilename = "filename"
|
||||
keyCacheFrom = "cache-from" // for registry only. deprecated in favor of keyCacheImports
|
||||
keyCacheImports = "cache-imports" // JSON representation of []CacheOptionsEntry
|
||||
keyCacheNS = "build-arg:BUILDKIT_CACHE_MOUNT_NS"
|
||||
defaultDockerfileName = "Dockerfile"
|
||||
dockerignoreFilename = ".dockerignore"
|
||||
buildArgPrefix = "build-arg:"
|
||||
labelPrefix = "label:"
|
||||
keyNoCache = "no-cache"
|
||||
keyTargetPlatform = "platform"
|
||||
keyMultiPlatform = "multi-platform"
|
||||
keyImageResolveMode = "image-resolve-mode"
|
||||
keyGlobalAddHosts = "add-hosts"
|
||||
keyForceNetwork = "force-network-mode"
|
||||
keyOverrideCopyImage = "override-copy-image" // remove after CopyOp implemented
|
||||
keyNameContext = "contextkey"
|
||||
keyNameDockerfile = "dockerfilekey"
|
||||
keyContextSubDir = "contextsubdir"
|
||||
keyContextKeepGitDir = "build-arg:BUILDKIT_CONTEXT_KEEP_GIT_DIR"
|
||||
keySyntax = "build-arg:BUILDKIT_SYNTAX"
|
||||
keyMultiPlatformArg = "build-arg:BUILDKIT_MULTI_PLATFORM"
|
||||
keyHostname = "hostname"
|
||||
|
||||
buildArgPrefix = "build-arg:"
|
||||
labelPrefix = "label:"
|
||||
|
||||
keyTarget = "target"
|
||||
keyFilename = "filename"
|
||||
keyCacheFrom = "cache-from" // for registry only. deprecated in favor of keyCacheImports
|
||||
keyCacheImports = "cache-imports" // JSON representation of []CacheOptionsEntry
|
||||
keyContextSubDir = "contextsubdir"
|
||||
keyForceNetwork = "force-network-mode"
|
||||
keyGlobalAddHosts = "add-hosts"
|
||||
keyHostname = "hostname"
|
||||
keyImageResolveMode = "image-resolve-mode"
|
||||
keyMultiPlatform = "multi-platform"
|
||||
keyNameContext = "contextkey"
|
||||
keyNameDockerfile = "dockerfilekey"
|
||||
keyNoCache = "no-cache"
|
||||
keyOverrideCopyImage = "override-copy-image" // remove after CopyOp implemented
|
||||
keyTargetPlatform = "platform"
|
||||
|
||||
// Don't forget to update frontend documentation if you add
|
||||
// a new build-arg: frontend/dockerfile/docs/syntax.md
|
||||
keyCacheNSArg = "build-arg:BUILDKIT_CACHE_MOUNT_NS"
|
||||
keyContextKeepGitDirArg = "build-arg:BUILDKIT_CONTEXT_KEEP_GIT_DIR"
|
||||
keyHostnameArg = "build-arg:BUILDKIT_SANDBOX_HOSTNAME"
|
||||
keyMultiPlatformArg = "build-arg:BUILDKIT_MULTI_PLATFORM"
|
||||
keySyntaxArg = "build-arg:BUILDKIT_SYNTAX"
|
||||
)
|
||||
|
||||
var httpPrefix = regexp.MustCompile(`^https?://`)
|
||||
|
@ -150,7 +156,7 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) {
|
|||
|
||||
var buildContext *llb.State
|
||||
isNotLocalContext := false
|
||||
if st, ok := detectGitContext(opts[localNameContext], opts[keyContextKeepGitDir]); ok {
|
||||
if st, ok := detectGitContext(opts[localNameContext], opts[keyContextKeepGitDirArg]); ok {
|
||||
if !forceLocalDockerfile {
|
||||
src = *st
|
||||
}
|
||||
|
@ -346,11 +352,11 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) {
|
|||
}
|
||||
|
||||
if _, ok := opts["cmdline"]; !ok {
|
||||
if cmdline, ok := opts[keySyntax]; ok {
|
||||
if cmdline, ok := opts[keySyntaxArg]; ok {
|
||||
p := strings.SplitN(strings.TrimSpace(cmdline), " ", 2)
|
||||
res, err := forwardGateway(ctx, c, p[0], cmdline)
|
||||
if err != nil && len(errdefs.Sources(err)) == 0 {
|
||||
return nil, errors.Wrapf(err, "failed with %s = %s", keySyntax, cmdline)
|
||||
return nil, errors.Wrapf(err, "failed with %s = %s", keySyntaxArg, cmdline)
|
||||
}
|
||||
return res, err
|
||||
} else if ref, cmdline, loc, ok := dockerfile2llb.DetectSyntax(bytes.NewBuffer(dtDockerfile)); ok {
|
||||
|
@ -391,6 +397,10 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) {
|
|||
}
|
||||
res := client.NewResult()
|
||||
|
||||
if v, ok := opts[keyHostnameArg]; ok && len(v) > 0 {
|
||||
opts[keyHostname] = v
|
||||
}
|
||||
|
||||
eg, ctx = errgroup.WithContext(ctx)
|
||||
|
||||
for i, tp := range targetPlatforms {
|
||||
|
@ -407,7 +417,7 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) {
|
|||
MetaResolver: c,
|
||||
BuildArgs: filter(opts, buildArgPrefix),
|
||||
Labels: filter(opts, labelPrefix),
|
||||
CacheIDNamespace: opts[keyCacheNS],
|
||||
CacheIDNamespace: opts[keyCacheNSArg],
|
||||
SessionID: c.BuildOpts().SessionID,
|
||||
BuildContext: buildContext,
|
||||
Excludes: excludes,
|
||||
|
|
|
@ -5121,9 +5121,9 @@ func testDockefileCheckHostname(t *testing.T, sb integration.Sandbox) {
|
|||
f := getFrontend(t, sb)
|
||||
dockerfile := []byte(`
|
||||
FROM busybox
|
||||
RUN cat /etc/hosts | grep testtest
|
||||
RUN echo $HOSTNAME | grep testtest
|
||||
RUN echo $(hostname) | grep testtest
|
||||
RUN cat /etc/hosts | grep foo
|
||||
RUN echo $HOSTNAME | grep foo
|
||||
RUN echo $(hostname) | grep foo
|
||||
`)
|
||||
|
||||
dir, err := tmpdir(
|
||||
|
@ -5136,16 +5136,43 @@ RUN echo $(hostname) | grep testtest
|
|||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
_, err = f.Solve(sb.Context(), c, client.SolveOpt{
|
||||
FrontendAttrs: map[string]string{
|
||||
"hostname": "testtest",
|
||||
cases := []struct {
|
||||
name string
|
||||
attrs map[string]string
|
||||
}{
|
||||
{
|
||||
name: "meta",
|
||||
attrs: map[string]string{
|
||||
"hostname": "foo",
|
||||
},
|
||||
},
|
||||
LocalDirs: map[string]string{
|
||||
builder.DefaultLocalNameDockerfile: dir,
|
||||
builder.DefaultLocalNameContext: dir,
|
||||
{
|
||||
name: "arg",
|
||||
attrs: map[string]string{
|
||||
"build-arg:BUILDKIT_SANDBOX_HOSTNAME": "foo",
|
||||
},
|
||||
},
|
||||
}, nil)
|
||||
require.NoError(t, err)
|
||||
{
|
||||
name: "meta and arg",
|
||||
attrs: map[string]string{
|
||||
"hostname": "bar",
|
||||
"build-arg:BUILDKIT_SANDBOX_HOSTNAME": "foo",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range cases {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
_, err = f.Solve(sb.Context(), c, client.SolveOpt{
|
||||
FrontendAttrs: tt.attrs,
|
||||
LocalDirs: map[string]string{
|
||||
builder.DefaultLocalNameDockerfile: dir,
|
||||
builder.DefaultLocalNameContext: dir,
|
||||
},
|
||||
}, nil)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// moby/buildkit#2311
|
||||
|
|
|
@ -318,7 +318,11 @@ eot
|
|||
RUN FOO=abc ash /app/script.sh
|
||||
```
|
||||
|
||||
## Built-in build args
|
||||
|
||||
|
||||
|
||||
|
||||
* `BUILDKIT_CACHE_MOUNT_NS=<string>` set optional cache ID namespace
|
||||
* `BUILDKIT_CONTEXT_KEEP_GIT_DIR=<bool>` trigger git context to keep the `.git` directory
|
||||
* `BUILDKIT_INLINE_CACHE=<bool>` inline cache metadata to image configuration or not (for Docker-integrated BuildKit (`DOCKER_BUILDKIT=1 docker build`) and `docker buildx`)
|
||||
* `BUILDKIT_MULTI_PLATFORM=<bool>` opt into determnistic output regardless of multi-platform output or not
|
||||
* `BUILDKIT_SANDBOX_HOSTNAME=<string>` set the hostname (default `buildkitsandbox`)
|
||||
* `BUILDKIT_SYNTAX=<image>` set frontend image
|
||||
|
|
Loading…
Reference in New Issue