diff --git a/build/build-all-multi.sh b/build/build-all-multi.sh index 99bfa5c585..e573ba6de7 100755 --- a/build/build-all-multi.sh +++ b/build/build-all-multi.sh @@ -1,22 +1,39 @@ #!/usr/bin/env bash set -ex +PLATFORM=${PLATFORM:-"linux/amd64,linux/arm64"} +IMAGE_TAG=${IMAGE_TAG:-"latest"} + +if [ -n "$IMAGE_REPO" ]; then + PUSH=true +else + IMAGE_REPO="local" + PUSH=false +fi + BUILD_ARGS=( --frontend dockerfile.v0 --local context=. - --local dockerfile=build/multi - --opt filename=Dockerfile.multi - --opt "platform=linux/amd64,linux/arm64" - --opt "build-arg:CSI_VERSION=$(git describe --tags --always --dirty)" + --opt "platform=${PLATFORM}" + --opt "build-arg:CSI_VERSION=$(git describe --tags --match='v*' --always --dirty)" --opt "build-arg:SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" ) BUILD_ARGS+=("$@") -buildctl build "${BUILD_ARGS[@]}" \ - --output type=image,name=alibaba-cloud-csi-driver:latest -buildctl build "${BUILD_ARGS[@]}" \ - --opt target=csi-controller \ - --output type=image,name=alibaba-cloud-csi-driver:latest-controller -buildctl build "${BUILD_ARGS[@]}" \ - --opt target=init \ - --output type=image,name=alibaba-cloud-csi-driver:latest-init +build_image() { + local image=$1 + shift + buildctl build "${BUILD_ARGS[@]}" "$@" \ + --output "type=image,push=$PUSH,name=${IMAGE_REPO}/${image}" +} + +MAIN_ARGS=(--local dockerfile=build/multi --opt filename=Dockerfile.multi) +build_image "csi-plugin:${IMAGE_TAG}" "${MAIN_ARGS[@]}" +build_image "csi-plugin:${IMAGE_TAG}-controller" "${MAIN_ARGS[@]}" --opt target=csi-controller +build_image "csi-plugin:${IMAGE_TAG}-init" "${MAIN_ARGS[@]}" --opt target=init + +PROXY_ARGS=(--local dockerfile=build/mount-proxy --opt filename=Dockerfile) +build_image "csi-ossfs:${IMAGE_TAG}" "${PROXY_ARGS[@]}" --opt target=ossfs +build_image "csi-ossfs:${IMAGE_TAG}-1.88" "${PROXY_ARGS[@]}" --opt target=ossfs-1.88 +build_image "csi-ossfs2:${IMAGE_TAG}" "${PROXY_ARGS[@]}" --opt target=ossfs2 +build_image "csi-alinas:${IMAGE_TAG}" "${PROXY_ARGS[@]}" --opt target=alinas diff --git a/build/mount-proxy/Dockerfile b/build/mount-proxy/Dockerfile index c1684951ac..47ec8e753a 100644 --- a/build/mount-proxy/Dockerfile +++ b/build/mount-proxy/Dockerfile @@ -1,19 +1,27 @@ -FROM --platform=$BUILDPLATFORM registry-cn-hangzhou.ack.aliyuncs.com/dev/golang:1.26.1 as builder +FROM --platform=$BUILDPLATFORM registry-cn-hangzhou.ack.aliyuncs.com/dev/golang:1.26.1 AS builder WORKDIR /src ARG TARGETARCH ARG TARGETOS RUN --mount=type=bind,target=. \ + --mount=type=cache,target=/root/.cache/go-build \ export GOOS=$TARGETOS && \ export GOARCH=$TARGETARCH && \ export CGO_ENABLED=0 && \ go build -o /out/csi-mount-proxy-server ./cmd/mount-proxy-server && \ go build -o /out/csi-mount-proxy-client ./cmd/mount-proxy-client +FROM registry-cn-hangzhou.ack.aliyuncs.com/dev/alinux:3-update AS alinux-install + +# uncomment as needed when testing, makes image larger but build faster by reusing yum cache +# RUN find /etc/yum.repos.d -name '*.repo' -exec \ +# sed -i 's|mirrors\.cloud\.aliyuncs\.com|mirrors.aliyun.com|g' {} + && \ +# yum makecache + #################### OSSFS 1.91 MOUNT-PROXY IMAGE #################### -FROM registry-cn-hangzhou.ack.aliyuncs.com/dev/alinux:3-update as ossfs +FROM alinux-install AS ossfs ARG TARGETPLATFORM -ARG OSSFS_VERSION +ARG OSSFS_VERSION=v1.91.9.ack.1 # install ossfs RUN set -ex; \ @@ -36,7 +44,7 @@ ENTRYPOINT ["csi-mount-proxy-server", "--driver=ossfs"] #################### OSSFS 1.88 MOUNT-PROXY IMAGE #################### -FROM registry-cn-hangzhou.ack.aliyuncs.com/dev/alinux:3-update as ossfs-1.88 +FROM alinux-install AS ossfs-1.88 ARG TARGETPLATFORM # install ossfs @@ -70,9 +78,9 @@ ENTRYPOINT ["csi-mount-proxy-server", "--driver=ossfs"] #################### OSSFS2 MOUNT-PROXY IMAGE #################### -FROM registry-cn-hangzhou.ack.aliyuncs.com/dev/alinux:3-update as ossfs2 +FROM alinux-install AS ossfs2 ARG TARGETPLATFORM -ARG OSSFS_VERSION +ARG OSSFS_VERSION=v2.0.5.ack.1 # install ossfs # only supports x86_64 @@ -93,7 +101,7 @@ ENTRYPOINT ["csi-mount-proxy-server", "--driver=ossfs2"] #################### ALINAS MOUNT-PROXY IMAGE #################### -FROM registry-cn-hangzhou.ack.aliyuncs.com/dev/alinux:3-update as alinas +FROM alinux-install AS alinas ARG TARGETPLATFORM ARG ALINAS_UTILS_VERSION=1.9-0.20260407144027.3d3855.al8 diff --git a/hack/update-versions.sh b/hack/update-versions.sh index c55d6af788..310d375d51 100755 --- a/hack/update-versions.sh +++ b/hack/update-versions.sh @@ -66,9 +66,9 @@ sed -i '' "s/^ARG ALINAS_UTILS_ARM_VERSION=.*/ARG ALINAS_UTILS_ARM_VERSION=${ALI MOUNT_PROXY_DOCKERFILE="${ROOT_DIR}/build/mount-proxy/Dockerfile" echo "Updating ${MOUNT_PROXY_DOCKERFILE}..." # Update OSSFS_VERSION for ossfs (first occurrence, before ossfs-1.88) -sed -i '' "/^FROM.*as ossfs$/,/^FROM.*as ossfs-1.88$/ s/^ARG OSSFS_VERSION=.*/ARG OSSFS_VERSION=${OSSFS_RPM_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" +sed -i '' "/^FROM.*AS ossfs$/,/^FROM.*AS ossfs-1.88$/ s/^ARG OSSFS_VERSION=.*/ARG OSSFS_VERSION=${OSSFS_RPM_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" # Update OSSFS_VERSION for ossfs2 (second occurrence, after ossfs-1.88) -sed -i '' "/^FROM.*as ossfs2$/,/^FROM.*as alinas$/ s/^ARG OSSFS_VERSION=.*/ARG OSSFS_VERSION=${OSSFS2_RPM_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" +sed -i '' "/^FROM.*AS ossfs2$/,/^FROM.*AS alinas$/ s/^ARG OSSFS_VERSION=.*/ARG OSSFS_VERSION=${OSSFS2_RPM_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" sed -i '' "s/^ARG ALINAS_UTILS_VERSION=.*/ARG ALINAS_UTILS_VERSION=${ALINAS_UTILS_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" sed -i '' "s/^ARG EFC_VERSION=.*/ARG EFC_VERSION=${EFC_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}" sed -i '' "s/^ARG EFC_ARM_VERSION=.*/ARG EFC_ARM_VERSION=${EFC_ARM_VERSION_ESC}/" "${MOUNT_PROXY_DOCKERFILE}"