Skip to content

Commit 50277bf

Browse files
authored
Merge pull request #771 from Huang-Wei/reduce-build-time
2 parents 228fb87 + f07b943 commit 50277bf

File tree

5 files changed

+29
-34
lines changed

5 files changed

+29
-34
lines changed

Makefile

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
GO_VERSION := $(shell awk '/^go /{print $$2}' go.mod|head -n1)
1516
COMMONENVVAR=GOOS=$(shell uname -s | tr A-Z a-z)
1617
BUILDENVVAR=CGO_ENABLED=0
1718
INTEGTESTENVVAR=SCHED_PLUGINS_TEST_VERBOSE=1
@@ -32,8 +33,9 @@ RELEASE_REGISTRY?=gcr.io/k8s-staging-scheduler-plugins
3233
RELEASE_VERSION?=v$(shell date +%Y%m%d)-$(shell git describe --tags --match "v*")
3334
RELEASE_IMAGE:=kube-scheduler:$(RELEASE_VERSION)
3435
RELEASE_CONTROLLER_IMAGE:=controller:$(RELEASE_VERSION)
35-
GO_BASE_IMAGE?=golang
36+
GO_BASE_IMAGE?=golang:$(GO_VERSION)
3637
DISTROLESS_BASE_IMAGE?=gcr.io/distroless/static:nonroot
38+
EXTRA_ARGS=""
3739

3840
# VERSION is the scheduler's version
3941
#
@@ -57,12 +59,8 @@ build-controller:
5759
build-scheduler:
5860
$(COMMONENVVAR) $(BUILDENVVAR) go build -ldflags '-X k8s.io/component-base/version.gitVersion=$(VERSION) -w' -o bin/kube-scheduler cmd/scheduler/main.go
5961

60-
.PHONY: local-image
61-
local-image: clean
62-
RELEASE_VERSION=$(RELEASE_VERSION) hack/build-images.sh
63-
64-
.PHONY: release-image
65-
release-image:
62+
.PHONY: build-images
63+
build-images:
6664
BUILDER=$(BUILDER) \
6765
PLATFORMS=$(PLATFORMS) \
6866
RELEASE_VERSION=$(RELEASE_VERSION) \
@@ -71,13 +69,20 @@ release-image:
7169
CONTROLLER_IMAGE=$(RELEASE_CONTROLLER_IMAGE) \
7270
GO_BASE_IMAGE=$(GO_BASE_IMAGE) \
7371
DISTROLESS_BASE_IMAGE=$(DISTROLESS_BASE_IMAGE) \
74-
hack/build-images.sh
72+
DOCKER_BUILDX_CMD=$(DOCKER_BUILDX_CMD) \
73+
EXTRA_ARGS=$(EXTRA_ARGS) hack/build-images.sh
7574

76-
.PHONY: push-release-images
77-
push-release-images: release-image
78-
gcloud auth configure-docker
79-
DOCKER_CLI_EXPERIMENTAL=enabled $(BUILDER) manifest push $(ALL_FLAG) $(RELEASE_REGISTRY)/$(RELEASE_IMAGE) ;\
80-
DOCKER_CLI_EXPERIMENTAL=enabled $(BUILDER) manifest push $(ALL_FLAG) $(RELEASE_REGISTRY)/$(RELEASE_CONTROLLER_IMAGE) ;\
75+
.PHONY: local-image
76+
local-image: PLATFORMS="linux/$$(uname -m)"
77+
local-image: RELEASE_VERSION="v0.0.0"
78+
local-image: IMAGE="kube-scheduler:latest"
79+
local-image: CONTROLLER_IMAGE="controller:latest"
80+
local-image: REGISTRY="localhost:5000/scheduler-plugins"
81+
local-image: clean build-images
82+
83+
.PHONY: release-images
84+
push-images: EXTRA_ARGS="--push"
85+
push-images: build-images
8186

8287
.PHONY: update-vendor
8388
update-vendor:

build/controller/Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14-
ARG GO_BASE_IMAGE=golang
14+
ARG GO_BASE_IMAGE
1515
ARG DISTROLESS_BASE_IMAGE=gcr.io/distroless/static:nonroot
16-
FROM $GO_BASE_IMAGE:1.21
16+
FROM $GO_BASE_IMAGE as go_builder
1717

1818
WORKDIR /go/src/sigs.k8s.io/scheduler-plugins
1919
COPY . .
2020
RUN make build-controller
2121

2222
FROM $DISTROLESS_BASE_IMAGE
2323

24-
COPY --from=0 /go/src/sigs.k8s.io/scheduler-plugins/bin/controller /bin/controller
24+
COPY --from=go_builder /go/src/sigs.k8s.io/scheduler-plugins/bin/controller /bin/controller
2525

2626
WORKDIR /bin
2727
CMD ["controller"]

build/scheduler/Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14-
ARG GO_BASE_IMAGE=golang
14+
ARG GO_BASE_IMAGE
1515
ARG DISTROLESS_BASE_IMAGE=gcr.io/distroless/static:nonroot
16-
FROM $GO_BASE_IMAGE:1.21
16+
FROM $GO_BASE_IMAGE as go-builder
1717

1818
WORKDIR /go/src/sigs.k8s.io/scheduler-plugins
1919
COPY . .
@@ -22,7 +22,7 @@ RUN RELEASE_VERSION=${RELEASE_VERSION} make build-scheduler
2222

2323
FROM $DISTROLESS_BASE_IMAGE
2424

25-
COPY --from=0 /go/src/sigs.k8s.io/scheduler-plugins/bin/kube-scheduler /bin/kube-scheduler
25+
COPY --from=go-builder /go/src/sigs.k8s.io/scheduler-plugins/bin/kube-scheduler /bin/kube-scheduler
2626

2727
WORKDIR /bin
2828
CMD ["kube-scheduler"]

cloudbuild.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ steps:
1212
- name: 'gcr.io/k8s-staging-test-infra/gcb-docker-gcloud:v20240718-5ef92b5c36'
1313
entrypoint: make
1414
env:
15-
- DOCKER_CLI_EXPERIMENTAL=enabled
1615
- RELEASE_VERSION=$_GIT_TAG
1716
- BASE_REF=$_PULL_BASE_REF
1817
- DOCKER_BUILDX_CMD=/buildx-entrypoint
1918
args:
20-
- push-release-images
19+
- push-images
2120
substitutions:
2221
# _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and
2322
# can be used as a substitution

hack/build-images.sh

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,6 @@ SCRIPT_ROOT=$(realpath $(dirname "${BASH_SOURCE[@]}")/..)
2323
SCHEDULER_DIR="${SCRIPT_ROOT}"/build/scheduler
2424
CONTROLLER_DIR="${SCRIPT_ROOT}"/build/controller
2525

26-
REGISTRY=${REGISTRY:-"localhost:5000/scheduler-plugins"}
27-
IMAGE=${IMAGE:-"kube-scheduler:latest"}
28-
CONTROLLER_IMAGE=${CONTROLLER_IMAGE:-"controller:latest"}
29-
30-
RELEASE_VERSION=${RELEASE_VERSION:-"v0.0.0"}
31-
32-
BUILDER=${BUILDER:-"docker"}
33-
34-
GO_BASE_IMAGE=${GO_BASE_IMAGE:-"golang"}
35-
DISTROLESS_BASE_IMAGE=${DISTROLESS_BASE_IMAGE:-"gcr.io/distroless/static:nonroot"}
36-
3726
# -t is the Docker engine default
3827
TAG_FLAG="-t"
3928

@@ -58,12 +47,14 @@ ${DOCKER_BUILDX_CMD:-${BUILDER} buildx} build \
5847
--build-arg RELEASE_VERSION=${RELEASE_VERSION} \
5948
--build-arg GO_BASE_IMAGE=${GO_BASE_IMAGE} \
6049
--build-arg DISTROLESS_BASE_IMAGE=${DISTROLESS_BASE_IMAGE} \
61-
${TAG_FLAG} ${REGISTRY}/${IMAGE} .
50+
--build-arg CGO_ENABLED=0 \
51+
${EXTRA_ARGS:-} ${TAG_FLAG:-} ${REGISTRY}/${IMAGE} .
6252

6353
${DOCKER_BUILDX_CMD:-${BUILDER} buildx} build \
6454
--platform=${PLATFORMS} \
6555
-f ${CONTROLLER_DIR}/Dockerfile \
6656
--build-arg RELEASE_VERSION=${RELEASE_VERSION} \
6757
--build-arg GO_BASE_IMAGE=${GO_BASE_IMAGE} \
6858
--build-arg DISTROLESS_BASE_IMAGE=${DISTROLESS_BASE_IMAGE} \
69-
{TAG_FLAG} ${REGISTRY}/${CONTROLLER_IMAGE} .
59+
--build-arg CGO_ENABLED=0 \
60+
${EXTRA_ARGS:-} ${TAG_FLAG:-} ${REGISTRY}/${CONTROLLER_IMAGE} .

0 commit comments

Comments
 (0)