commit
627c040f18
|
@ -30,6 +30,10 @@ jobs:
|
|||
# 0 indicates all history for all branches and tags.
|
||||
# for `git describe --tags` in Makefile.
|
||||
fetch-depth: 0
|
||||
- name: install Go
|
||||
uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: 1.17.x
|
||||
- name: install QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: install Buildx
|
||||
|
|
|
@ -26,6 +26,10 @@ jobs:
|
|||
# 0 indicates all history for all branches and tags.
|
||||
# for `git describe --tags` in Makefile.
|
||||
fetch-depth: 0
|
||||
- name: install Go
|
||||
uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: 1.17.x
|
||||
- name: install QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: install Buildx
|
||||
|
|
|
@ -29,13 +29,15 @@ jobs:
|
|||
env:
|
||||
GOOS: ${{ matrix.goos }}
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
- name: Make release directory
|
||||
run: mkdir -p _output/release
|
||||
- name: Packaging...
|
||||
run: tar czf kubectl-karmada-${{ matrix.goos }}-${{ matrix.goarch }}.tgz kubectl-karmada LICENSE
|
||||
run: tar czf _output/release/kubectl-karmada-${{ matrix.goos }}-${{ matrix.goarch }}.tgz LICENSE -C _output/bin/${{ matrix.goos }}/${{ matrix.goarch }} kubectl-karmada
|
||||
- name: Uploading assets...
|
||||
if: ${{ !env.ACT }}
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: ./kubectl-karmada-${{ matrix.goos }}-${{ matrix.goarch }}.tgz
|
||||
files: _output/release/kubectl-karmada-${{ matrix.goos }}-${{ matrix.goarch }}.tgz
|
||||
update-krew-index:
|
||||
needs: release-assests
|
||||
name: Update krew-index
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
_tmp/
|
||||
_output/
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
|
187
Makefile
187
Makefile
|
@ -1,7 +1,6 @@
|
|||
GOOS ?= $(shell go env GOOS)
|
||||
GOARCH ?= $(shell go env GOARCH)
|
||||
SOURCES := $(shell find . -type f -name '*.go')
|
||||
|
||||
LDFLAGS='$(shell hack/version.sh)'
|
||||
|
||||
# Images management
|
||||
|
@ -9,7 +8,6 @@ REGISTRY?="swr.ap-southeast-1.myhuaweicloud.com/karmada"
|
|||
REGISTRY_USER_NAME?=""
|
||||
REGISTRY_PASSWORD?=""
|
||||
REGISTRY_SERVER_ADDRESS?=""
|
||||
PLATFORMS?="linux/amd64,linux/arm64"
|
||||
|
||||
# Set your version by env or using latest tags from git
|
||||
VERSION?=""
|
||||
|
@ -23,70 +21,79 @@ ifeq ($(VERSION), "")
|
|||
endif
|
||||
endif
|
||||
|
||||
all: karmada-aggregated-apiserver karmada-controller-manager karmada-scheduler karmada-descheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
||||
TARGETS := karmada-aggregated-apiserver \
|
||||
karmada-controller-manager \
|
||||
karmada-scheduler \
|
||||
karmada-descheduler \
|
||||
karmada-webhook \
|
||||
karmada-agent \
|
||||
karmada-scheduler-estimator \
|
||||
karmada-interpreter-webhook-example
|
||||
|
||||
karmada-aggregated-apiserver: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-aggregated-apiserver \
|
||||
cmd/aggregated-apiserver/main.go
|
||||
CTL_TARGETS := karmadactl kubectl-karmada
|
||||
|
||||
karmada-controller-manager: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-controller-manager \
|
||||
cmd/controller-manager/controller-manager.go
|
||||
# Build code.
|
||||
#
|
||||
# Args:
|
||||
# GOOS: OS to build.
|
||||
# GOARCH: Arch to build.
|
||||
#
|
||||
# Example:
|
||||
# make
|
||||
# make all
|
||||
# make karmada-aggregated-apiserver
|
||||
# make karmada-aggregated-apiserver GOOS=linux
|
||||
CMD_TARGET=$(TARGETS) $(CTL_TARGETS)
|
||||
|
||||
karmada-scheduler: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-scheduler \
|
||||
cmd/scheduler/main.go
|
||||
.PHONY: all
|
||||
all: $(CMD_TARGET)
|
||||
|
||||
karmada-descheduler: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-descheduler \
|
||||
cmd/descheduler/main.go
|
||||
.PHONY: $(CMD_TARGET)
|
||||
$(CMD_TARGET): $(SOURCES)
|
||||
LDFLAGS=$(LDFLAGS) BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh $@
|
||||
|
||||
karmadactl: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmadactl \
|
||||
cmd/karmadactl/karmadactl.go
|
||||
# Build image.
|
||||
#
|
||||
# Args:
|
||||
# GOARCH: Arch to build.
|
||||
# OUTPUT_TYPE: Destination to save image(docker/registry).
|
||||
#
|
||||
# Example:
|
||||
# make image
|
||||
# make image-aggregated-apiserver
|
||||
# make image-aggregated-apiserver GOARCH=arm64
|
||||
IMAGE_TARGET=$(addprefix image-, $(TARGETS))
|
||||
.PHONY: $(IMAGE_TARGET)
|
||||
$(IMAGE_TARGET):
|
||||
set -e;\
|
||||
target=$$(echo $(subst image-,,$@));\
|
||||
make $$target GOOS=linux;\
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) BUILD_PLATFORMS=linux/$(GOARCH) hack/docker.sh $$target
|
||||
|
||||
kubectl-karmada: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o kubectl-karmada \
|
||||
cmd/kubectl-karmada/kubectl-karmada.go
|
||||
images: $(IMAGE_TARGET)
|
||||
|
||||
karmada-webhook: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-webhook \
|
||||
cmd/webhook/main.go
|
||||
# Build and push multi-platform image to DockerHub
|
||||
#
|
||||
# Example
|
||||
# make multi-platform-images
|
||||
# make mp-image-karmada-aggregated-apiserver
|
||||
MP_TARGET=$(addprefix mp-image-, $(TARGETS))
|
||||
.PHONY: $(MP_TARGET)
|
||||
$(MP_TARGET):
|
||||
set -e;\
|
||||
target=$$(echo $(subst mp-image-,,$@));\
|
||||
make $$target GOOS=linux GOARCH=amd64;\
|
||||
make $$target GOOS=linux GOARCH=arm64;\
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) \
|
||||
OUTPUT_TYPE=registry \
|
||||
BUILD_PLATFORMS=linux/amd64,linux/arm64 \
|
||||
hack/docker.sh $$target
|
||||
|
||||
karmada-agent: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-agent \
|
||||
cmd/agent/main.go
|
||||
|
||||
karmada-scheduler-estimator: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-scheduler-estimator \
|
||||
cmd/scheduler-estimator/main.go
|
||||
|
||||
karmada-interpreter-webhook-example: $(SOURCES)
|
||||
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
|
||||
-ldflags $(LDFLAGS) \
|
||||
-o karmada-interpreter-webhook-example \
|
||||
examples/customresourceinterpreter/webhook/main.go
|
||||
multi-platform-images: $(MP_TARGET)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf karmada-aggregated-apiserver karmada-controller-manager karmada-scheduler karmada-descheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
||||
rm -rf _tmp _output
|
||||
|
||||
.PHONY: update
|
||||
update:
|
||||
|
@ -102,32 +109,6 @@ test:
|
|||
go test --race --v ./cmd/...
|
||||
go test --race --v ./examples/...
|
||||
|
||||
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:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-aggregated-apiserver
|
||||
|
||||
image-karmada-controller-manager:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-controller-manager
|
||||
|
||||
image-karmada-scheduler:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler
|
||||
|
||||
image-karmada-descheduler:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-descheduler
|
||||
|
||||
image-karmada-webhook:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-webhook
|
||||
|
||||
image-karmada-agent:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-agent
|
||||
|
||||
image-karmada-scheduler-estimator:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-scheduler-estimator
|
||||
|
||||
image-karmada-interpreter-webhook-example:
|
||||
VERSION=$(VERSION) REGISTRY=$(REGISTRY) hack/docker.sh karmada-interpreter-webhook-example
|
||||
|
||||
upload-images: images
|
||||
@echo "push images to $(REGISTRY)"
|
||||
ifneq ($(REGISTRY_USER_NAME), "")
|
||||
|
@ -141,45 +122,3 @@ endif
|
|||
docker push ${REGISTRY}/karmada-scheduler-estimator:${VERSION}
|
||||
docker push ${REGISTRY}/karmada-interpreter-webhook-example:${VERSION}
|
||||
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
|
||||
|
||||
# Build and push multi-platform image to DockerHub
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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.
|
||||
multi-platform-images: mp-image-karmada-controller-manager \
|
||||
mp-image-karmada-scheduler \
|
||||
mp-image-karmada-descheduler \
|
||||
mp-image-karmada-webhook \
|
||||
mp-image-karmada-agent \
|
||||
mp-image-karmada-scheduler-estimator \
|
||||
mp-image-karmada-interpreter-webhook-example \
|
||||
mp-image-karmada-aggregated-apiserver
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
FROM alpine:3.15.1
|
||||
|
||||
ARG BINARY
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY ${BINARY} /bin/${BINARY}
|
|
@ -0,0 +1,8 @@
|
|||
FROM alpine:3.15.1
|
||||
|
||||
ARG BINARY
|
||||
ARG TARGETPLATFORM
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY ${TARGETPLATFORM}/${BINARY} /bin/${BINARY}
|
|
@ -1,16 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-agent
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-agent /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-agent /bin/karmada-agent
|
||||
|
||||
CMD ["/bin/karmada-agent"]
|
|
@ -1,16 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-aggregated-apiserver
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-aggregated-apiserver /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-aggregated-apiserver /bin/karmada-aggregated-apiserver
|
||||
|
||||
CMD ["/bin/karmada-aggregated-apiserver"]
|
|
@ -1,16 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-controller-manager
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-controller-manager /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-controller-manager /bin/karmada-controller-manager
|
||||
|
||||
CMD ["/bin/karmada-controller-manager"]
|
|
@ -1,16 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-descheduler
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-descheduler /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-descheduler /bin/karmada-descheduler
|
||||
|
||||
CMD ["/bin/karmada-descheduler"]
|
|
@ -1,17 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-interpreter-webhook-example
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-interpreter-webhook-example /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-interpreter-webhook-example /bin/karmada-interpreter-webhook-example
|
||||
|
||||
CMD ["/bin/karmada-interpreter-webhook-example"]
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-scheduler-estimator
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-scheduler-estimator /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-scheduler-estimator /bin/karmada-scheduler-estimator
|
||||
|
||||
CMD ["/bin/karmada-scheduler-estimator"]
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-scheduler
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-scheduler /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-scheduler /bin/karmada-scheduler
|
||||
|
||||
CMD ["/bin/karmada-scheduler"]
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
FROM golang:1.17 AS builder
|
||||
|
||||
WORKDIR /go/src/github.com/karmada-io/karmada
|
||||
COPY . /go/src/github.com/karmada-io/karmada
|
||||
|
||||
RUN make karmada-webhook
|
||||
RUN mv /go/src/github.com/karmada-io/karmada/karmada-webhook /bin/
|
||||
|
||||
|
||||
FROM alpine:3.15.1
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
COPY --from=builder /bin/karmada-webhook /bin/karmada-webhook
|
||||
|
||||
CMD ["/bin/karmada-webhook"]
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
# This script builds go components.
|
||||
# You can set the platform to build with BUILD_PLATFORMS, with format: `<os>/<arch>`
|
||||
# And binaries will be put in `_output/<os>/<arch>/`
|
||||
#
|
||||
# Usage:
|
||||
# hack/build.sh <target>
|
||||
# Args:
|
||||
# $1: target to build
|
||||
# Environments:
|
||||
# BUILD_PLATFORMS: platforms to build. You can set one or more platforms separated by comma.
|
||||
# e.g.: linux/amd64,linux/arm64
|
||||
# LDFLAGS pass to the `-ldflags` parameter of go build
|
||||
# Examples:
|
||||
# hack/build.sh karmada-aggregated-apiserver
|
||||
# BUILD_PLATFORMS=linux/amd64,linux/arm64 hack/build.sh karmada-aggregated-apiserver
|
||||
|
||||
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${REPO_ROOT}/hack/util.sh"
|
||||
|
||||
function build_binary() {
|
||||
local -r target=$1
|
||||
|
||||
IFS="," read -ra platforms <<< "${BUILD_PLATFORMS:-}"
|
||||
if [[ ${#platforms[@]} -eq 0 ]]; then
|
||||
platforms=("$(util:host_platform)")
|
||||
fi
|
||||
|
||||
for platform in "${platforms[@]}"; do
|
||||
echo "!!! Building ${target} for ${platform}:"
|
||||
build_binary_for_platform "${target}" "${platform}"
|
||||
done
|
||||
}
|
||||
|
||||
function build_binary_for_platform() {
|
||||
local -r target=$1
|
||||
local -r platform=$2
|
||||
local -r os=${platform%/*}
|
||||
local -r arch=${platform##*/}
|
||||
|
||||
local gopkg="${KARMADA_GO_PACKAGE}/${KARMADA_TARGET_SOURCE[$target]}"
|
||||
set -x
|
||||
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build \
|
||||
-ldflags "${LDFLAGS:-}" \
|
||||
-o "_output/bin/${platform}/$target" \
|
||||
"${gopkg}"
|
||||
set +x
|
||||
}
|
||||
|
||||
build_binary "$@"
|
|
@ -5,6 +5,24 @@ set -o nounset
|
|||
set -o pipefail
|
||||
|
||||
# This script holds docker related functions.
|
||||
# You can set the platform to build with BUILD_PLATFORMS, with format: `<os>/<arch>`
|
||||
# When `OUTPUT_TYPE=docker` is set, `BUILD_PLATFORMS` cannot be set with multi platforms.
|
||||
# See: https://github.com/docker/buildx/issues/59
|
||||
#
|
||||
# Usage:
|
||||
# hack/docker.sh <target>
|
||||
# Args:
|
||||
# $1: target to build
|
||||
# Environments:
|
||||
# BUILD_PLATFORMS: platforms to build. You can set one or more platforms separated by comma.
|
||||
# e.g.: linux/amd64,linux/arm64
|
||||
# OUTPUT_TYPE Destination to save image(`docker`/`registry`/`local,dest=path`, default is `docker`).
|
||||
# REGISTRY image registry
|
||||
# VERSION image version
|
||||
# Examples:
|
||||
# hack/docker.sh karmada-aggregated-apiserver
|
||||
# BUILD_PLATFORMS=linux/amd64 hack/docker.sh karmada-aggregated-apiserver
|
||||
# OUTPUT_TYPE=registry BUILD_PLATFORMS=linux/amd64,linux/arm64 hack/docker.sh karmada-aggregated-apiserver
|
||||
|
||||
REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${REPO_ROOT}/hack/util.sh"
|
||||
|
@ -13,8 +31,73 @@ REGISTRY=${REGISTRY:-"swr.ap-southeast-1.myhuaweicloud.com/karmada"}
|
|||
VERSION=${VERSION:="unknown"}
|
||||
|
||||
function build_images() {
|
||||
local target="$1"
|
||||
docker build -t ${REGISTRY}/${target}:${VERSION} -f ${REPO_ROOT}/cluster/images/${target}/Dockerfile ${REPO_ROOT}
|
||||
local -ra target=$1
|
||||
local -r output_type=${OUTPUT_TYPE:-docker}
|
||||
local platforms="${BUILD_PLATFORMS:-"$(util:host_platform)"}"
|
||||
|
||||
# Preferentially use `docker build`. If we are building multi platform,
|
||||
# or cross building, change to `docker buildx build`
|
||||
cross=$(isCross "${platforms}")
|
||||
if [[ "${cross}" == "true" ]]; then
|
||||
build_cross_image "${output_type}" "${target}" "${platforms}"
|
||||
else
|
||||
build_local_image "${output_type}" "${target}" "${platforms}"
|
||||
fi
|
||||
}
|
||||
|
||||
function build_local_image() {
|
||||
local -r output_type=$1
|
||||
local -r target=$2
|
||||
local -r platform=$3
|
||||
|
||||
local -r image_name="${REGISTRY}/${target}:${VERSION}"
|
||||
|
||||
echo "Building image for ${platform}: ${image_name}"
|
||||
set -x
|
||||
docker build --build-arg BINARY="${target}" \
|
||||
--tag "${image_name}" \
|
||||
--file "${REPO_ROOT}/cluster/images/Dockerfile" \
|
||||
"${REPO_ROOT}/_output/bin/${platform}"
|
||||
set +x
|
||||
|
||||
if [[ "$output_type" == "registry" ]]; then
|
||||
docker push "${image_name}"
|
||||
fi
|
||||
}
|
||||
|
||||
function build_cross_image() {
|
||||
local -r output_type=$1
|
||||
local -r target=$2
|
||||
local -r platforms=$3
|
||||
|
||||
local -r image_name="${REGISTRY}/${target}:${VERSION}"
|
||||
|
||||
echo "Cross building image for ${platforms}: ${image_name}"
|
||||
set -x
|
||||
docker buildx build --output=type="${output_type}" \
|
||||
--platform "${platforms}" \
|
||||
--build-arg BINARY="${target}" \
|
||||
--tag "${image_name}" \
|
||||
--file "${REPO_ROOT}/cluster/images/buildx.Dockerfile" \
|
||||
"${REPO_ROOT}/_output/bin"
|
||||
set +x
|
||||
}
|
||||
|
||||
function isCross() {
|
||||
local platforms=$1
|
||||
|
||||
IFS="," read -ra platform_array <<< "${platforms}"
|
||||
if [[ ${#platform_array[@]} -ne 1 ]]; then
|
||||
echo true
|
||||
return
|
||||
fi
|
||||
|
||||
local -r arch=${platforms##*/}
|
||||
if [[ "$arch" == $(go env GOHOSTARCH) ]]; then
|
||||
echo false
|
||||
else
|
||||
echo true
|
||||
fi
|
||||
}
|
||||
|
||||
build_images $@
|
||||
|
|
|
@ -42,12 +42,8 @@ for registry_file in "${registry_files[@]}"; do
|
|||
done
|
||||
# set mirror registry in the dockerfile of components of karmada
|
||||
dockerfile_list=( # Dockerfile files need to be replaced
|
||||
"cluster/images/karmada-controller-manager/Dockerfile"
|
||||
"cluster/images/karmada-agent/Dockerfile"
|
||||
"cluster/images/karmada-scheduler-estimator/Dockerfile"
|
||||
"cluster/images/karmada-scheduler/Dockerfile"
|
||||
"cluster/images/karmada-webhook/Dockerfile"
|
||||
"cluster/images/karmada-aggregated-apiserver/Dockerfile"
|
||||
"cluster/images/Dockerfile"
|
||||
"cluster/images/buildx.Dockerfile"
|
||||
)
|
||||
for dockerfile in "${dockerfile_list[@]}"; do
|
||||
grep 'mirrors.ustc.edu.cn' ${REPO_ROOT}/${dockerfile} > /dev/null || sed -i'' -e "s#FROM alpine:3.15.1#FROM alpine:3.15.1\nRUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.15/main/ > /etc/apk/repositories#" ${REPO_ROOT}/${dockerfile}
|
||||
|
|
17
hack/util.sh
17
hack/util.sh
|
@ -21,6 +21,19 @@ KARMADA_GO_PACKAGE="github.com/karmada-io/karmada"
|
|||
|
||||
MIN_Go_VERSION=go1.17.0
|
||||
|
||||
declare -A KARMADA_TARGET_SOURCE=(
|
||||
[karmada-aggregated-apiserver]=cmd/aggregated-apiserver
|
||||
[karmada-controller-manager]=cmd/controller-manager
|
||||
[karmada-scheduler]=cmd/scheduler
|
||||
[karmada-descheduler]=cmd/descheduler
|
||||
[karmadactl]=cmd/karmadactl
|
||||
[kubectl-karmada]=cmd/kubectl-karmada
|
||||
[karmada-webhook]=cmd/webhook
|
||||
[karmada-agent]=cmd/agent
|
||||
[karmada-scheduler-estimator]=cmd/scheduler-estimator
|
||||
[karmada-interpreter-webhook-example]=examples/customresourceinterpreter/webhook
|
||||
)
|
||||
|
||||
#https://textkool.com/en/ascii-art-generator?hl=default&vl=default&font=DOS%20Rebel&text=KARMADA
|
||||
KARMADA_GREETING='
|
||||
------------------------------------------------------------------------------------------------------
|
||||
|
@ -592,3 +605,7 @@ function util:create_gopath_tree() {
|
|||
ln -snf "${repo_root}" "${go_pkg_dir}"
|
||||
fi
|
||||
}
|
||||
|
||||
function util:host_platform() {
|
||||
echo "$(go env GOHOSTOS)/$(go env GOHOSTARCH)"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue