]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Support build image with docker
authorbugwz <xbugwz@gmail.com>
Thu, 18 Dec 2025 07:45:09 +0000 (15:45 +0800)
committerbugwz <xbugwz@gmail.com>
Thu, 2 Apr 2026 02:11:05 +0000 (10:11 +0800)
Signed-off-by: bugwz <xbugwz@gmail.com>
container/build.sh

index 40ec4a4d3cff3104c26debe6980d31d9d5bf6143..e6d7b7b8b13c058ca3efbac3049da1e796a87b95 100755 (executable)
@@ -82,17 +82,24 @@ if [[ ${NO_PUSH} != "true" ]] ; then
 fi
 if [[ ${CI_CONTAINER} != "true" ]] ; then : "${VERSION:?}"; fi
 
+# set container engine
+CONTAINER_ENGINE=${CONTAINER_ENGINE:-podman}
+if [[ ${CONTAINER_ENGINE} != "podman" && ${CONTAINER_ENGINE} != "docker" ]]; then
+    echo "CONTAINER_ENGINE must be 'podman' or 'docker', current: ${CONTAINER_ENGINE}"
+    exit 1
+fi
+
 # check for valid repo auth (if pushing)
 repopath=${CONTAINER_REPO_HOSTNAME}/${CONTAINER_REPO_ORGANIZATION}/${CONTAINER_REPO}
 MINIMAL_IMAGE=${repopath}:minimal-test
 if [[ ${NO_PUSH} != "true" ]] ; then
-    podman rmi ${MINIMAL_IMAGE} || true
-    echo "FROM scratch" | podman build -f - -t ${MINIMAL_IMAGE}
-    if ! podman push ${MINIMAL_IMAGE} ; then
+    ${CONTAINER_ENGINE} rmi ${MINIMAL_IMAGE} || true
+    echo "FROM scratch" | ${CONTAINER_ENGINE} build -f - -t ${MINIMAL_IMAGE}
+    if ! ${CONTAINER_ENGINE} push ${MINIMAL_IMAGE} ; then
         echo "Not authenticated to ${repopath}; need docker/podman login?"
         exit 1
     fi
-    podman rmi ${MINIMAL_IMAGE} | true
+    ${CONTAINER_ENGINE} rmi ${MINIMAL_IMAGE} | true
 fi
 
 if [[ -z "${CEPH_GIT_REPO}" ]] ; then
@@ -106,28 +113,49 @@ fi
 # BRANCH will be, say, origin/main.  remove <remote>/
 BRANCH=${BRANCH##*/}
 
-# podman build only supports secret files.
-# This must be removed after podman build
+# podman/docker build only supports secret files.
+# This must be removed after podman/docker build
 touch prerelease.secret.txt
 chmod 600 prerelease.secret.txt
 echo -e "\
     PRERELEASE_USERNAME=${PRERELEASE_USERNAME}\n
     PRERELEASE_PASSWORD=${PRERELEASE_PASSWORD}\n " > prerelease.secret.txt
 
-podman build --pull=newer --squash -f $CFILE -t build.sh.output \
-    --build-arg FROM_IMAGE=${FROM_IMAGE:-quay.io/centos/centos:stream9} \
-    --build-arg CEPH_SHA1=${CEPH_SHA1} \
-    --build-arg CEPH_GIT_REPO=${CEPH_GIT_REPO} \
-    --build-arg CEPH_REF=${BRANCH:-main} \
-    --build-arg OSD_FLAVOR=${FLAVOR:-default} \
-    --build-arg CI_CONTAINER=${CI_CONTAINER:-default} \
-    --build-arg CUSTOM_CEPH_REPO_URL="${CUSTOM_CEPH_REPO_URL}" \
-    --secret=id=prerelease_creds,src=./prerelease.secret.txt \
-    2>&1
+CONTAINER_BUILD_ARGS=(
+  --squash
+  -f "$CFILE"
+  -t build.sh.output
+  --build-arg FROM_IMAGE="${FROM_IMAGE:-quay.io/centos/centos:stream9}"
+  --build-arg CEPH_SHA1="${CEPH_SHA1}"
+  --build-arg CEPH_GIT_REPO="${CEPH_GIT_REPO}"
+  --build-arg CEPH_REF="${BRANCH:-main}"
+  --build-arg OSD_FLAVOR="${FLAVOR:-default}"
+  --build-arg CI_CONTAINER="${CI_CONTAINER:-default}"
+  --build-arg CUSTOM_CEPH_REPO_URL="${CUSTOM_CEPH_REPO_URL}"
+  "--secret=id=prerelease_creds,src=./prerelease.secret.txt"
+)
+
+if [[ ${CONTAINER_ENGINE} == "podman" ]]; then
+    CMD=("${CONTAINER_ENGINE}" build --pull=newer "${CONTAINER_BUILD_ARGS[@]}")
+    echo "+ ${CMD[*]}"
+    "${CMD[@]}" 2>&1
+else
+    CMD=("${CONTAINER_ENGINE}" build --pull "${CONTAINER_BUILD_ARGS[@]}" .)
+    echo "+ DOCKER_BUILDKIT=1 ${CMD[*]}"
+    DOCKER_BUILDKIT=1 "${CMD[@]}" 2>&1
+fi
 
 rm ./prerelease.secret.txt
 
-image_id=$(podman image ls localhost/build.sh.output --format '{{.ID}}')
+# get image id
+image_id=$(${CONTAINER_ENGINE} image ls build.sh.output --format '{{.ID}}')
+if [[ -z "${image_id}" ]]; then
+    image_id=$(${CONTAINER_ENGINE} image ls localhost/build.sh.output --format '{{.ID}}' || true)
+fi
+if [[ -z "${image_id}" ]]; then
+    echo "ERROR: build.sh.output image not found!"
+    exit 1
+fi
 
 # grab useful image attributes for building the tag
 #
@@ -146,8 +174,8 @@ image_id=$(podman image ls localhost/build.sh.output --format '{{.ID}}')
 # so that vars will get the output of the first command, newline, output
 # of the second command
 #
-vars="$(podman inspect -f '{{printf "export CEPH_CONTAINER_ARCH=%v" .Architecture}}' ${image_id})
-$(podman inspect -f '{{range $index, $value := .Config.Env}}export CEPH_CONTAINER_{{$value}}{{println}}{{end}}' ${image_id})"
+vars="$(${CONTAINER_ENGINE} inspect -f '{{printf "export CEPH_CONTAINER_ARCH=%v" .Architecture}}' ${image_id})
+$(${CONTAINER_ENGINE} inspect -f '{{range $index, $value := .Config.Env}}export CEPH_CONTAINER_{{$value}}{{println}}{{end}}' ${image_id})"
 vars="$(echo "${vars}" | grep -v PATH)"
 eval ${vars}
 
@@ -196,16 +224,16 @@ if [[ ${CI_CONTAINER} == "true" ]] ; then
         sha1_repo_tag=${sha1_repo_tag}-arm64
     fi
 
-    podman tag ${image_id} ${full_repo_tag}
-    podman tag ${image_id} ${branch_repo_tag}
-    podman tag ${image_id} ${sha1_repo_tag}
+    ${CONTAINER_ENGINE} tag ${image_id} ${full_repo_tag}
+    ${CONTAINER_ENGINE} tag ${image_id} ${branch_repo_tag}
+    ${CONTAINER_ENGINE} tag ${image_id} ${sha1_repo_tag}
 
     if [[ -z "${NO_PUSH}" ]] ; then
-        podman push ${full_repo_tag}
-        podman push ${branch_repo_tag}
-        podman push ${sha1_repo_tag}
+        ${CONTAINER_ENGINE} push ${full_repo_tag}
+        ${CONTAINER_ENGINE} push ${branch_repo_tag}
+        ${CONTAINER_ENGINE} push ${sha1_repo_tag}
         if [[ ${REMOVE_LOCAL_IMAGES} == "true" ]] ; then
-            podman rmi -f ${full_repo_tag} ${branch_repo_tag} ${sha1_repo_tag}
+            ${CONTAINER_ENGINE} rmi -f ${full_repo_tag} ${branch_repo_tag} ${sha1_repo_tag}
         fi
     fi
 else
@@ -215,12 +243,11 @@ else
     #
     version_tag=${repopath}:v${VERSION}-${builddate}
 
-    podman tag ${image_id} ${version_tag}
+    ${CONTAINER_ENGINE} tag ${image_id} ${version_tag}
     if [[ -z "${NO_PUSH}" ]] ; then
-        podman push ${version_tag}
+        ${CONTAINER_ENGINE} push ${version_tag}
         if [[ ${REMOVE_LOCAL_IMAGES} == "true" ]] ; then
-            podman rmi -f ${version_tag}
+            ${CONTAINER_ENGINE} rmi -f ${version_tag}
         fi
     fi
-fi
-
+fi
\ No newline at end of file