Skip to content

Commit

Permalink
speed up docker build
Browse files Browse the repository at this point in the history
Signed-off-by: yingjinhui <[email protected]>
  • Loading branch information
ikaven1024 committed May 11, 2022
1 parent 977725d commit adf26e7
Show file tree
Hide file tree
Showing 19 changed files with 259 additions and 273 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/dockerhub-latest-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/dockerhub-released-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
203 changes: 71 additions & 132 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
SOURCES := $(shell find . -type f -name '*.go')

LDFLAGS='$(shell hack/version.sh)'

# Images management
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?=""
Expand All @@ -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

karmada-aggregated-apiserver: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o karmada-aggregated-apiserver \
cmd/aggregated-apiserver/main.go

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

karmada-scheduler: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o karmada-scheduler \
cmd/scheduler/main.go

karmada-descheduler: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o karmada-descheduler \
cmd/descheduler/main.go

karmadactl: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o karmadactl \
cmd/karmadactl/karmadactl.go

kubectl-karmada: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o kubectl-karmada \
cmd/kubectl-karmada/kubectl-karmada.go

karmada-webhook: $(SOURCES)
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-ldflags $(LDFLAGS) \
-o karmada-webhook \
cmd/webhook/main.go

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
TARGETS := karmada-aggregated-apiserver \
karmada-controller-manager \
karmada-scheduler \
karmada-descheduler \
karmada-webhook \
karmada-agent \
karmada-scheduler-estimator \
karmada-interpreter-webhook-example

CTL_TARGETS := karmadactl kubectl-karmada

# 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)

.PHONY: all
all: $(CMD_TARGET)

.PHONY: $(CMD_TARGET)
$(CMD_TARGET): $(SOURCES)
LDFLAGS=$(LDFLAGS) BUILD_PLATFORMS=$(GOOS)/$(GOARCH) hack/build.sh $@

# 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

images: $(IMAGE_TARGET)

# 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

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:
Expand All @@ -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), "")
Expand All @@ -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
7 changes: 7 additions & 0 deletions cluster/images/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM alpine:3.15.1

ARG BINARY

RUN apk add --no-cache ca-certificates

COPY ${BINARY} /bin/${BINARY}
8 changes: 8 additions & 0 deletions cluster/images/buildx.Dockerfile
Original file line number Diff line number Diff line change
@@ -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}
16 changes: 0 additions & 16 deletions cluster/images/karmada-agent/Dockerfile

This file was deleted.

16 changes: 0 additions & 16 deletions cluster/images/karmada-aggregated-apiserver/Dockerfile

This file was deleted.

16 changes: 0 additions & 16 deletions cluster/images/karmada-controller-manager/Dockerfile

This file was deleted.

16 changes: 0 additions & 16 deletions cluster/images/karmada-descheduler/Dockerfile

This file was deleted.

17 changes: 0 additions & 17 deletions cluster/images/karmada-interpreter-webhook-example/Dockerfile

This file was deleted.

Loading

0 comments on commit adf26e7

Please sign in to comment.