ci(gitlab-ci): replace manual frontend container build

check if image already exists in the registry and build if not; also rebuild on manual run
This commit is contained in:
Sarah Vaupel 2024-09-04 04:18:53 +02:00
parent d4d18a968c
commit fc57bdffb5

View File

@ -77,28 +77,32 @@ setup:dynamic:
rules:
- when: always
setup:containers:frontend: &containers-frontend
setup:containers:frontend:
stage: setup
needs:
- setup:dynamic
image: ${IMAGE_BUILDER}
script:
- FRONTEND_IMAGE_VERSION=`cat frontend-image-version`
- buildah bud -t frontend/${CI_COMMIT_REF_SLUG}:${FRONTEND_IMAGE_VERSION} --build-arg PROJECT_DIR=${CI_PROJECT_DIR} --volume ${CI_PROJECT_DIR}:/tmp/${CI_PROJECT_DIR} --file docker/frontend/Dockerfile
- buildah push --creds "${CI_REGISTRY_USER}:${CI_JOB_TOKEN}" frontend/${CI_COMMIT_REF_SLUG}:${FRONTEND_IMAGE_VERSION} ${CI_REGISTRY_IMAGE}/frontend/${CI_COMMIT_REF_SLUG}:${FRONTEND_IMAGE_VERSION}
rules:
- changes:
paths:
- docker/frontend/Dockerfile
- package.json
- package-lock.json
- webpack.config.js
interruptible: false
setup:containers:frontend:manual:
<<: *containers-frontend
- IMAGE_TAG=frontend/${CI_COMMIT_REF_SLUG}:${FRONTEND_IMAGE_VERSION}
- REGISTRY_DESTINATION=${CI_REGISTRY_IMAGE}/frontend/${CI_COMMIT_REF_SLUG}:${FRONTEND_IMAGE_VERSION}
- IMAGE_EXISTS=`curl "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/registry/repositories?tags=true" | grep \""${REGISTRY_DESTINATION}"\"`
- ${FORCE_REBUILD_IMAGE} && echo "Force rebuilding container."
- >
if [ ${IMAGE_EXISTS} -a ! ${FORCE_REBUILD_IMAGE} ]; then
echo "Image ${IMAGE_TAG} already exists in the container registry. Skipping build."
else
echo "Building image..."
buildah bud -t ${IMAGE_TAG} --build-arg PROJECT_DIR=${CI_PROJECT_DIR} --volume ${CI_PROJECT_DIR}:/tmp/${CI_PROJECT_DIR} --file docker/frontend/Dockerfile
buildah push --creds "${CI_REGISTRY_USER}:${CI_JOB_TOKEN}" ${IMAGE_TAG} ${REGISTRY_DESTINATION}
rules:
- when: always
variables:
FORCE_REBUILD_IMAGE: false
- when: manual
allow_failure: true
variables:
FORCE_REBUILD_IMAGE: true
interruptible: false
setup:containers:backend: &containers-backend
stage: setup