stages: - build variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" build-and-push: stage: build image: docker:24 services: - docker:24-dind rules: - if: $CI_COMMIT_BRANCH == "main" - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/ - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_PIPELINE_SOURCE == "web" before_script: - apk add --no-cache jq - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - | export VERSION=$(jq -r .version package.json) echo "VERSION=$VERSION" >> build.env script: - source build.env - | SHORT_SHA=$CI_COMMIT_SHORT_SHA PRIMARY_TAG="$CI_REGISTRY_IMAGE:$SHORT_SHA" # Build the image docker build -f ./Dockerfile -t $PRIMARY_TAG . # Tag with additional tags docker tag $PRIMARY_TAG $CI_REGISTRY_IMAGE:latest if [ -n "$VERSION" ] && [ "$VERSION" != "null" ]; then docker tag $PRIMARY_TAG $CI_REGISTRY_IMAGE:v$VERSION fi # Push all tags (only if not a merge request) if [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then docker push $PRIMARY_TAG docker push $CI_REGISTRY_IMAGE:latest if [ -n "$VERSION" ] && [ "$VERSION" != "null" ]; then docker push $CI_REGISTRY_IMAGE:v$VERSION fi fi after_script: - docker logout $CI_REGISTRY || true