From: bugwz Date: Thu, 18 Dec 2025 07:45:09 +0000 (+0800) Subject: Support build image with docker X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e60db5a1db676b42e855b43b578481074ad8481b;p=ceph.git Support build image with docker Signed-off-by: bugwz --- diff --git a/container/build.sh b/container/build.sh index 40ec4a4d3cff..e6d7b7b8b13c 100755 --- a/container/build.sh +++ b/container/build.sh @@ -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 / 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