add tests and registry
This commit is contained in:
+34
-12
@@ -4,8 +4,6 @@ stages:
|
||||
- deploy
|
||||
|
||||
variables:
|
||||
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
||||
DOCKER_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest
|
||||
DOCKERFILE_PATH: Dockerfile.production
|
||||
# Required: disable TLS so the docker client can reach the dind daemon
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
@@ -75,10 +73,19 @@ build_image:
|
||||
- name: docker:24-dind
|
||||
alias: docker
|
||||
before_script:
|
||||
- test -n "$CI_REGISTRY" || { echo "CI_REGISTRY is not set. Enable GitLab Container Registry or provide registry variables."; exit 1; }
|
||||
- test -n "$CI_REGISTRY_USER" || { echo "CI_REGISTRY_USER is not set."; exit 1; }
|
||||
- test -n "$CI_REGISTRY_PASSWORD" || { echo "CI_REGISTRY_PASSWORD is not set."; exit 1; }
|
||||
- echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
|
||||
# Prefer GitLab's built-in registry variables, but allow explicit fallbacks
|
||||
# so the pipeline can publish to any OCI-compatible registry.
|
||||
- export REGISTRY_HOST="${CI_REGISTRY:-${REGISTRY_HOST:-}}"
|
||||
- export REGISTRY_USER="${CI_REGISTRY_USER:-${REGISTRY_USER:-}}"
|
||||
- export REGISTRY_PASSWORD="${CI_REGISTRY_PASSWORD:-${REGISTRY_PASSWORD:-}}"
|
||||
- export IMAGE_REPOSITORY="${CI_REGISTRY_IMAGE:-${REGISTRY_IMAGE:-}}"
|
||||
- test -n "$REGISTRY_HOST" || { echo "Registry host is not set. Configure CI_REGISTRY or REGISTRY_HOST."; exit 1; }
|
||||
- test -n "$REGISTRY_USER" || { echo "Registry user is not set. Configure CI_REGISTRY_USER or REGISTRY_USER."; exit 1; }
|
||||
- test -n "$REGISTRY_PASSWORD" || { echo "Registry password is not set. Configure CI_REGISTRY_PASSWORD or REGISTRY_PASSWORD."; exit 1; }
|
||||
- test -n "$IMAGE_REPOSITORY" || { echo "Image repository is not set. Configure CI_REGISTRY_IMAGE or REGISTRY_IMAGE."; exit 1; }
|
||||
- export DOCKER_IMAGE="$IMAGE_REPOSITORY:$CI_COMMIT_SHORT_SHA"
|
||||
- export DOCKER_IMAGE_LATEST="$IMAGE_REPOSITORY:latest"
|
||||
- echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY_HOST" -u "$REGISTRY_USER" --password-stdin
|
||||
script:
|
||||
- echo "--- Building Docker Image ---"
|
||||
# NEXT_PUBLIC_* vars are inlined into Next.js bundles at build time — must be passed as ARGs
|
||||
@@ -95,7 +102,10 @@ build_image:
|
||||
- docker push $DOCKER_IMAGE
|
||||
- docker push $DOCKER_IMAGE_LATEST
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "develop"
|
||||
# Skip the container publish step unless either the GitLab registry or an
|
||||
# explicit fallback registry configuration is available.
|
||||
- if: '$CI_COMMIT_BRANCH == "develop" && (($CI_REGISTRY && $CI_REGISTRY_USER && $CI_REGISTRY_PASSWORD && $CI_REGISTRY_IMAGE) || ($REGISTRY_HOST && $REGISTRY_USER && $REGISTRY_PASSWORD && $REGISTRY_IMAGE))'
|
||||
- when: never
|
||||
|
||||
# ====================================
|
||||
# DEPLOY STAGE
|
||||
@@ -106,6 +116,15 @@ deploy_to_vps:
|
||||
needs:
|
||||
- build_image
|
||||
before_script:
|
||||
- export REGISTRY_HOST="${CI_REGISTRY:-${REGISTRY_HOST:-}}"
|
||||
- export REGISTRY_USER="${CI_REGISTRY_USER:-${REGISTRY_USER:-}}"
|
||||
- export REGISTRY_PASSWORD="${CI_REGISTRY_PASSWORD:-${REGISTRY_PASSWORD:-}}"
|
||||
- export IMAGE_REPOSITORY="${CI_REGISTRY_IMAGE:-${REGISTRY_IMAGE:-}}"
|
||||
- test -n "$REGISTRY_HOST" || { echo "Registry host is not set. Configure CI_REGISTRY or REGISTRY_HOST."; exit 1; }
|
||||
- test -n "$REGISTRY_USER" || { echo "Registry user is not set. Configure CI_REGISTRY_USER or REGISTRY_USER."; exit 1; }
|
||||
- test -n "$REGISTRY_PASSWORD" || { echo "Registry password is not set. Configure CI_REGISTRY_PASSWORD or REGISTRY_PASSWORD."; exit 1; }
|
||||
- test -n "$IMAGE_REPOSITORY" || { echo "Image repository is not set. Configure CI_REGISTRY_IMAGE or REGISTRY_IMAGE."; exit 1; }
|
||||
- export DOCKER_IMAGE="$IMAGE_REPOSITORY:$CI_COMMIT_SHORT_SHA"
|
||||
- apk add --no-cache openssh-client
|
||||
# Load the SSH private key stored in the CI variable SSH_PRIVATE_KEY
|
||||
- eval $(ssh-agent -s)
|
||||
@@ -125,15 +144,16 @@ deploy_to_vps:
|
||||
git pull
|
||||
|
||||
echo '-- Logging into registry --'
|
||||
test -n '$CI_REGISTRY' || { echo 'CI_REGISTRY is not set.'; exit 1; }
|
||||
test -n '$CI_REGISTRY_USER' || { echo 'CI_REGISTRY_USER is not set.'; exit 1; }
|
||||
test -n '$CI_REGISTRY_PASSWORD' || { echo 'CI_REGISTRY_PASSWORD is not set.'; exit 1; }
|
||||
echo '$CI_REGISTRY_PASSWORD' | docker login '$CI_REGISTRY' -u '$CI_REGISTRY_USER' --password-stdin
|
||||
test -n '$REGISTRY_HOST' || { echo 'Registry host is not set.'; exit 1; }
|
||||
test -n '$REGISTRY_USER' || { echo 'Registry user is not set.'; exit 1; }
|
||||
test -n '$REGISTRY_PASSWORD' || { echo 'Registry password is not set.'; exit 1; }
|
||||
echo '$REGISTRY_PASSWORD' | docker login '$REGISTRY_HOST' -u '$REGISTRY_USER' --password-stdin
|
||||
|
||||
echo '-- Pulling pre-built image --'
|
||||
docker pull $DOCKER_IMAGE
|
||||
|
||||
echo '-- Restarting services --'
|
||||
APP_IMAGE=$IMAGE_REPOSITORY \
|
||||
APP_VERSION=$CI_COMMIT_SHORT_SHA \
|
||||
docker compose -p rentaldrivego-prod \
|
||||
--env-file .env.docker.production \
|
||||
@@ -144,4 +164,6 @@ deploy_to_vps:
|
||||
docker image prune -f
|
||||
"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "develop"
|
||||
# Deploy only when both registry access and VPS credentials are available.
|
||||
- if: '$CI_COMMIT_BRANCH == "develop" && ((($CI_REGISTRY && $CI_REGISTRY_USER && $CI_REGISTRY_PASSWORD && $CI_REGISTRY_IMAGE) || ($REGISTRY_HOST && $REGISTRY_USER && $REGISTRY_PASSWORD && $REGISTRY_IMAGE)) && $SSH_PRIVATE_KEY && $VPS_IP && $VPS_USER)'
|
||||
- when: never
|
||||
|
||||
Reference in New Issue
Block a user