Compare commits

...

5 Commits

Author SHA1 Message Date
kit101 8eee42fce4
Merge 93e47ba806 into 236ba5690e 2025-07-18 16:52:35 +02:00
Christophe 236ba5690e
Add archive notice to README (#3502) 2025-06-03 10:36:10 -04:00
Quan Zhang fa67e45814
chore: remove @zhangquan and @jeromeju from maintainer list (#3345) 2025-06-03 10:21:02 -04:00
kit101 93e47ba806 add integration test 2025-03-03 16:28:05 +08:00
k7kit 8218bd7386 feature: support pre-defined build args of multi-platform build arguments 2025-01-22 20:45:27 +08:00
5 changed files with 108 additions and 3 deletions

View File

@ -1,2 +0,0 @@
Jerome Ju <jeromeju@google.com>
Quan Zhang <zhangquan@google.com>

View File

@ -1,3 +1,11 @@
# 🧊 This project is archived and no longer developed or maintained. 🧊
The code remains available for historic purposes.
The README as of the archival date remains unchanged below for historic purposes.
-----
# kaniko - Build Images In Kubernetes
## 🚨NOTE: kaniko is not an officially supported Google product🚨

View File

@ -0,0 +1,46 @@
# ingegration test for pre-defined build args; see pkg/dockerfile/buildargs.go
FROM alpine:3 AS builder
ARG BUILDPLATFORM
ARG BUILDOS
ARG BUILDARCH
ARG BUILDVARIANT
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG TARGETSTAGE
RUN echo "BUILDPLATFORM: ${BUILDPLATFORM}" && \
echo "BUILDOS: ${BUILDOS}" && \
echo "BUILDARCH: ${BUILDARCH}" && \
echo "BUILDVARIANT: ${BUILDVARIANT}" && \
echo "TARGETPLATFORM: ${TARGETPLATFORM}" && \
echo "TARGETOS: ${TARGETOS}" && \
echo "TARGETARCH: ${TARGETARCH}" && \
echo "TARGETVARIANT: ${TARGETVARIANT}" && \
echo "TARGETSTAGE: ${TARGETSTAGE}"
RUN uname -a
COPY foo /app/foo
RUN echo 'add line' >> /app/foo
FROM alpine:3
COPY --from=builder /app/foo /app/foo
ARG BUILDPLATFORM
ARG BUILDOS
ARG BUILDARCH
ARG BUILDVARIANT
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG TARGETSTAGE
RUN echo "BUILDPLATFORM: ${BUILDPLATFORM}" && \
echo "BUILDOS: ${BUILDOS}" && \
echo "BUILDARCH: ${BUILDARCH}" && \
echo "BUILDVARIANT: ${BUILDVARIANT}" && \
echo "TARGETPLATFORM: ${TARGETPLATFORM}" && \
echo "TARGETOS: ${TARGETOS}" && \
echo "TARGETARCH: ${TARGETARCH}" && \
echo "TARGETVARIANT: ${TARGETVARIANT}" && \
echo "TARGETSTAGE: ${TARGETSTAGE}"
RUN uname -a
RUN cat /app/foo

View File

@ -17,12 +17,21 @@ limitations under the License.
package dockerfile
import (
"fmt"
"strings"
"sync"
"github.com/GoogleContainerTools/kaniko/pkg/config"
"github.com/containerd/platforms"
d "github.com/docker/docker/builder/dockerfile"
containerregistryV1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/moby/buildkit/frontend/dockerfile/instructions"
"github.com/sirupsen/logrus"
)
var defaultArgsOnce sync.Once
var defaultArgs []string
type BuildArgs struct {
d.BuildArgs
}
@ -68,3 +77,45 @@ func (b *BuildArgs) AddMetaArgs(metaArgs []instructions.ArgCommand) {
}
}
}
// DefaultArgs get default args.
// include pre-defined build args: TARGETOS, TARGETARCH, BUILDPLATFORM, TARGETPLATFORM ...
func DefaultArgs(opt config.KanikoOptions) []string {
defaultArgsOnce.Do(func() {
// build info
buildPlatform := platforms.Format(platforms.Normalize(platforms.DefaultSpec()))
buildPlatformSpec, err := containerregistryV1.ParsePlatform(buildPlatform)
if err != nil {
logrus.Fatalf("Parse build platform %q: %v", buildPlatform, err)
}
// target info
var targetPlatform string
if opt.CustomPlatform != "" {
targetPlatform = opt.CustomPlatform
} else {
targetPlatform = buildPlatform
}
targetPlatformSpec, err := containerregistryV1.ParsePlatform(opt.CustomPlatform)
if err != nil {
logrus.Fatalf("Invalid platform %q: %v", opt.CustomPlatform, err)
}
// pre-defined build args
defaultArgs = []string{
fmt.Sprintf("%s=%s", "BUILDPLATFORM", buildPlatform),
fmt.Sprintf("%s=%s", "BUILDOS", buildPlatformSpec.OS),
fmt.Sprintf("%s=%s", "BUILDOSVERSION", buildPlatformSpec.OSVersion),
fmt.Sprintf("%s=%s", "BUILDARCH", buildPlatformSpec.Architecture),
fmt.Sprintf("%s=%s", "BUILDVARIANT", buildPlatformSpec.Variant),
fmt.Sprintf("%s=%s", "TARGETPLATFORM", targetPlatform),
fmt.Sprintf("%s=%s", "TARGETOS", targetPlatformSpec.OS),
fmt.Sprintf("%s=%s", "TARGETOSVERSION", targetPlatformSpec.OSVersion),
fmt.Sprintf("%s=%s", "TARGETARCH", targetPlatformSpec.Architecture),
fmt.Sprintf("%s=%s", "TARGETVARIANT", targetPlatformSpec.Variant),
fmt.Sprintf("%s=%s", "TARGETSTAGE", opt.Target),
}
logrus.Infof("init default args: %s", defaultArgs)
})
return defaultArgs
}

View File

@ -146,7 +146,9 @@ func newStageBuilder(args *dockerfile.BuildArgs, opts *config.KanikoOptions, sta
if args != nil {
s.args = args.Clone()
} else {
s.args = dockerfile.NewBuildArgs(s.opts.BuildArgs)
defaultArgs := dockerfile.DefaultArgs(*opts)
mergedArgs := append(defaultArgs, s.opts.BuildArgs...)
s.args = dockerfile.NewBuildArgs(mergedArgs)
}
s.args.AddMetaArgs(s.stage.MetaArgs)
return s, nil