diff --git a/Makefile b/Makefile index bba8ab274..ed2130c73 100644 --- a/Makefile +++ b/Makefile @@ -2,20 +2,7 @@ GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) SOURCES := $(shell find . -type f -name '*.go') -# Git information -GIT_VERSION ?= $(shell git describe --tags --dirty) -GIT_COMMIT_HASH ?= $(shell git rev-parse HEAD) -GIT_TREESTATE = "clean" -GIT_DIFF = $(shell git diff --quiet >/dev/null 2>&1; if [ $$? -eq 1 ]; then echo "1"; fi) -ifeq ($(GIT_DIFF), 1) - GIT_TREESTATE = "dirty" -endif -BUILDDATE = $(shell date -u +'%Y-%m-%dT%H:%M:%SZ') - -LDFLAGS := "-X github.com/karmada-io/karmada/pkg/version.gitVersion=$(GIT_VERSION) \ - -X github.com/karmada-io/karmada/pkg/version.gitCommit=$(GIT_COMMIT_HASH) \ - -X github.com/karmada-io/karmada/pkg/version.gitTreeState=$(GIT_TREESTATE) \ - -X github.com/karmada-io/karmada/pkg/version.buildDate=$(BUILDDATE)" +LDFLAGS='$(shell hack/version.sh)' # Images management REGISTRY?="swr.ap-southeast-1.myhuaweicloud.com/karmada" @@ -117,28 +104,28 @@ test: images: image-karmada-aggregated-apiserver image-karmada-controller-manager image-karmada-scheduler image-karmada-descheduler image-karmada-webhook image-karmada-agent image-karmada-scheduler-estimator image-karmada-interpreter-webhook-example -image-karmada-aggregated-apiserver: karmada-aggregated-apiserver +image-karmada-aggregated-apiserver: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-aggregated-apiserver -image-karmada-controller-manager: karmada-controller-manager +image-karmada-controller-manager: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-controller-manager -image-karmada-scheduler: karmada-scheduler +image-karmada-scheduler: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler -image-karmada-descheduler: karmada-descheduler +image-karmada-descheduler: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-descheduler -image-karmada-webhook: karmada-webhook +image-karmada-webhook: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-webhook -image-karmada-agent: karmada-agent +image-karmada-agent: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-agent -image-karmada-scheduler-estimator: karmada-scheduler-estimator +image-karmada-scheduler-estimator: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler-estimator -image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example +image-karmada-interpreter-webhook-example: VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-interpreter-webhook-example upload-images: images @@ -156,35 +143,35 @@ endif docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION} # Build and push multi-platform image to DockerHub -mp-image-karmada-controller-manager: karmada-controller-manager +mp-image-karmada-controller-manager: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-controller-manager:${VERSION} --file=cluster/images/karmada-controller-manager/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-scheduler: karmada-scheduler +mp-image-karmada-scheduler: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler:${VERSION} --file=cluster/images/karmada-scheduler/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-descheduler: karmada-descheduler +mp-image-karmada-descheduler: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-descheduler:${VERSION} --file=cluster/images/karmada-descheduler/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-webhook: karmada-webhook +mp-image-karmada-webhook: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-webhook:${VERSION} --file=cluster/images/karmada-webhook/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-agent: karmada-agent +mp-image-karmada-agent: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-agent:${VERSION} --file=cluster/images/karmada-agent/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-scheduler-estimator: karmada-scheduler-estimator +mp-image-karmada-scheduler-estimator: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-scheduler-estimator:${VERSION} --file=cluster/images/karmada-scheduler-estimator/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-interpreter-webhook-example: karmada-interpreter-webhook-example +mp-image-karmada-interpreter-webhook-example: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-interpreter-webhook-example:${VERSION} --file=cluster/images/karmada-interpreter-webhook-example/Dockerfile . # Build and push multi-platform image to DockerHub -mp-image-karmada-aggregated-apiserver: karmada-aggregated-apiserver +mp-image-karmada-aggregated-apiserver: docker buildx build --push --platform=${PLATFORMS} --tag=karmada/karmada-aggregated-apiserver:${VERSION} --file=cluster/images/karmada-aggregated-apiserver/Dockerfile . # Build and push multi-platform images to DockerHub. diff --git a/cluster/images/karmada-agent/Dockerfile b/cluster/images/karmada-agent/Dockerfile index c572bf0ed..66a87a443 100644 --- a/cluster/images/karmada-agent/Dockerfile +++ b/cluster/images/karmada-agent/Dockerfile @@ -1,7 +1,20 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-agent \ + cmd/agent/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-agent /bin/ +COPY --from=builder /bin/karmada-agent /bin/karmada-agent CMD ["/bin/karmada-agent"] diff --git a/cluster/images/karmada-aggregated-apiserver/Dockerfile b/cluster/images/karmada-aggregated-apiserver/Dockerfile index 1b18cf006..62f23c576 100644 --- a/cluster/images/karmada-aggregated-apiserver/Dockerfile +++ b/cluster/images/karmada-aggregated-apiserver/Dockerfile @@ -1,7 +1,20 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "${GO_LDFLAGS}" \ + -o /bin/karmada-aggregated-apiserver \ + cmd/aggregated-apiserver/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-aggregated-apiserver /bin/ +COPY --from=builder /bin/karmada-aggregated-apiserver /bin/karmada-aggregated-apiserver CMD ["/bin/karmada-aggregated-apiserver"] diff --git a/cluster/images/karmada-controller-manager/Dockerfile b/cluster/images/karmada-controller-manager/Dockerfile index 86c9b07ad..76ff06b4d 100644 --- a/cluster/images/karmada-controller-manager/Dockerfile +++ b/cluster/images/karmada-controller-manager/Dockerfile @@ -1,7 +1,20 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-controller-manager \ + cmd/controller-manager/controller-manager.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-controller-manager /bin/ +COPY --from=builder /bin/karmada-controller-manager /bin/karmada-controller-manager CMD ["/bin/karmada-controller-manager"] diff --git a/cluster/images/karmada-descheduler/Dockerfile b/cluster/images/karmada-descheduler/Dockerfile index 9903e5122..b1de970a6 100644 --- a/cluster/images/karmada-descheduler/Dockerfile +++ b/cluster/images/karmada-descheduler/Dockerfile @@ -1,7 +1,20 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-descheduler \ + cmd/descheduler/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-descheduler /bin/ +COPY --from=builder /bin/karmada-descheduler /bin/karmada-descheduler CMD ["/bin/karmada-descheduler"] diff --git a/cluster/images/karmada-interpreter-webhook-example/Dockerfile b/cluster/images/karmada-interpreter-webhook-example/Dockerfile index a2b49a55a..c8a311659 100644 --- a/cluster/images/karmada-interpreter-webhook-example/Dockerfile +++ b/cluster/images/karmada-interpreter-webhook-example/Dockerfile @@ -1,7 +1,21 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-interpreter-webhook-example \ + examples/customresourceinterpreter/webhook/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-interpreter-webhook-example /bin/ +COPY --from=builder /bin/karmada-interpreter-webhook-example /bin/karmada-interpreter-webhook-example CMD ["/bin/karmada-interpreter-webhook-example"] + diff --git a/cluster/images/karmada-scheduler-estimator/Dockerfile b/cluster/images/karmada-scheduler-estimator/Dockerfile index a0494b83b..b59beb224 100644 --- a/cluster/images/karmada-scheduler-estimator/Dockerfile +++ b/cluster/images/karmada-scheduler-estimator/Dockerfile @@ -1,7 +1,21 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-scheduler-estimator \ + cmd/scheduler-estimator/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-scheduler-estimator /bin/ +COPY --from=builder /bin/karmada-scheduler-estimator /bin/karmada-scheduler-estimator CMD ["/bin/karmada-scheduler-estimator"] + diff --git a/cluster/images/karmada-scheduler/Dockerfile b/cluster/images/karmada-scheduler/Dockerfile index 4ea8f6fc8..a97bfb186 100644 --- a/cluster/images/karmada-scheduler/Dockerfile +++ b/cluster/images/karmada-scheduler/Dockerfile @@ -1,7 +1,21 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-scheduler \ + cmd/scheduler/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-scheduler /bin/ +COPY --from=builder /bin/karmada-scheduler /bin/karmada-scheduler CMD ["/bin/karmada-scheduler"] + diff --git a/cluster/images/karmada-webhook/Dockerfile b/cluster/images/karmada-webhook/Dockerfile index 9b7351366..d8fe8095b 100644 --- a/cluster/images/karmada-webhook/Dockerfile +++ b/cluster/images/karmada-webhook/Dockerfile @@ -1,7 +1,20 @@ +FROM golang:1.17-alpine3.15 AS builder + +WORKDIR /go/src/github.com/karmada-io/karmada +COPY . /go/src/github.com/karmada-io/karmada + +ARG GO_LDFLAGS + +RUN CGO_ENABLED=0 go build \ + -ldflags "$GO_LDFLAGS" \ + -o /bin/karmada-webhook \ + cmd/webhook/main.go + + FROM alpine:3.15.1 RUN apk add --no-cache ca-certificates -ADD karmada-webhook /bin/ +COPY --from=builder /bin/karmada-webhook /bin/karmada-webhook CMD ["/bin/karmada-webhook"] diff --git a/hack/docker.sh b/hack/docker.sh index dc352efc3..c201ab044 100755 --- a/hack/docker.sh +++ b/hack/docker.sh @@ -7,12 +7,15 @@ set -o pipefail # This script holds docker related functions. REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${REPO_ROOT}/hack/util.sh" + REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"} VERSION=${VERSION:="unknown"} +GO_LDFLAGS=$(util::get_GO_LDFLAGS) function build_images() { local target="$1" - docker build -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT} + docker build --build-arg GO_LDFLAGS="${GO_LDFLAGS}" -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT} } build_images $@ diff --git a/hack/util.sh b/hack/util.sh index 7bf79c00e..dae08fe23 100755 --- a/hack/util.sh +++ b/hack/util.sh @@ -555,3 +555,20 @@ function util::get_macos_ipaddress() { MAC_NIC_IPADDRESS=${MAC_NIC_IPADDRESS:-} fi } + +function util::get_GO_LDFLAGS() { + # Git information + GIT_VERSION=$(git describe --tags --dirty) + GIT_COMMIT_HASH=$(git rev-parse HEAD) + GIT_TREESTATE="clean" + GIT_DIFF=$(git diff --quiet >/dev/null 2>&1; if [[ $$ = 1 ]]; then echo "1"; fi) + if [[ "${GIT_DIFF}" == "1" ]];then + GIT_TREESTATE="dirty" + fi + BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + LDFLAGS="-X github.com/karmada-io/karmada/pkg/version.gitVersion=${GIT_VERSION} \ + -X github.com/karmada-io/karmada/pkg/version.gitCommit=${GIT_COMMIT_HASH} \ + -X github.com/karmada-io/karmada/pkg/version.gitTreeState=${GIT_TREESTATE} \ + -X github.com/karmada-io/karmada/pkg/version.buildDate=${BUILDDATE}" + echo $LDFLAGS +} diff --git a/hack/version.sh b/hack/version.sh new file mode 100644 index 000000000..f8ee727dc --- /dev/null +++ b/hack/version.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +KARMADA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" +source "${KARMADA_ROOT}/hack/util.sh" + +util::get_GO_LDFLAGS