diff --git a/Dockerfile.backend b/Dockerfile.backend index f055ae9..ae1861d 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -1,4 +1,4 @@ -FROM python:3.12-slim +FROM registry.bstein.dev/bstein/python:3.12-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 diff --git a/Dockerfile.frontend b/Dockerfile.frontend index a2610e7..160f6cc 100644 --- a/Dockerfile.frontend +++ b/Dockerfile.frontend @@ -1,5 +1,5 @@ # Build stage -FROM node:20-alpine AS build +FROM registry.bstein.dev/bstein/node:20-bookworm AS build WORKDIR /app COPY frontend/package*.json ./ diff --git a/Jenkinsfile b/Jenkinsfile index e70641f..0aed38d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -219,7 +219,7 @@ PY } } - stage('Buildx setup') { + stage('Docker readiness') { steps { container('builder') { sh ''' @@ -239,22 +239,11 @@ PY echo "docker daemon did not become ready on ${DOCKER_HOST}" >&2 docker version || true rc=1 - else - BUILDER_NAME="bstein-builder-${BUILD_NUMBER}" - docker buildx rm "${BUILDER_NAME}" >/dev/null 2>&1 || true - docker buildx create --name "${BUILDER_NAME}" --driver docker-container \ - --driver-opt image=moby/buildkit:buildx-stable-1 \ - --bootstrap --use - rc=$? - if [ "${rc}" -eq 0 ]; then - docker buildx inspect "${BUILDER_NAME}" --bootstrap - rc=$? - fi fi set -e - printf '%s\n' "${rc}" > build/buildx.rc + printf '%s\n' "${rc}" > build/docker-ready.rc if [ "${rc}" -ne 0 ]; then - echo "warning: buildx setup failed; publish stages will fail later" >&2 + echo "warning: docker daemon readiness failed; publish stages will fail later" >&2 fi ''' } @@ -481,15 +470,19 @@ PY container('builder') { sh ''' set -euo pipefail - test "$(cat build/buildx.rc 2>/dev/null || echo 1)" -eq 0 + test "$(cat build/docker-ready.rc 2>/dev/null || echo 1)" -eq 0 VERSION_TAG="$(cut -d= -f2 build.env)" - docker buildx build \ - --platform linux/arm64 \ - --tag "${FRONT_IMAGE}:${VERSION_TAG}" \ - --tag "${FRONT_IMAGE}:latest" \ - --file Dockerfile.frontend \ - --push \ - . + for attempt in 1 2 3; do + if docker build --pull --tag "${FRONT_IMAGE}:${VERSION_TAG}" --tag "${FRONT_IMAGE}:latest" --file Dockerfile.frontend .; then + break + fi + if [ "${attempt}" -eq 3 ]; then + exit 1 + fi + sleep $((attempt * 10)) + done + docker push "${FRONT_IMAGE}:${VERSION_TAG}" + docker push "${FRONT_IMAGE}:latest" ''' } } @@ -500,15 +493,19 @@ PY container('builder') { sh ''' set -euo pipefail - test "$(cat build/buildx.rc 2>/dev/null || echo 1)" -eq 0 + test "$(cat build/docker-ready.rc 2>/dev/null || echo 1)" -eq 0 VERSION_TAG="$(cut -d= -f2 build.env)" - docker buildx build \ - --platform linux/arm64 \ - --tag "${BACK_IMAGE}:${VERSION_TAG}" \ - --tag "${BACK_IMAGE}:latest" \ - --file Dockerfile.backend \ - --push \ - . + for attempt in 1 2 3; do + if docker build --pull --tag "${BACK_IMAGE}:${VERSION_TAG}" --tag "${BACK_IMAGE}:latest" --file Dockerfile.backend .; then + break + fi + if [ "${attempt}" -eq 3 ]; then + exit 1 + fi + sleep $((attempt * 10)) + done + docker push "${BACK_IMAGE}:${VERSION_TAG}" + docker push "${BACK_IMAGE}:latest" ''' } }