diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b7ad3839..603dc72d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,6 @@ stages: - build + - deploy variables: DOCKER_BUILDKIT: "1" @@ -13,6 +14,9 @@ cache: paths: - .npm/ +# ========================= +# 🏗️ BUILD STAGE +# ========================= build-image: stage: build image: docker:27.0.3 @@ -25,12 +29,43 @@ build-image: script: - echo "Building optimized Docker image..." - - docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $CI_REGISTRY_IMAGE/web-lti:latest -t "$IMAGE_NAME" . + - docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from "$CI_REGISTRY_IMAGE/web-lti:latest" -t "$IMAGE_NAME" . - docker push "$IMAGE_NAME" - - echo "Cleaning old images (keep last 3)..." + - echo "Cleaning old images..." - docker image prune -af --filter "until=72h" - after_script: "echo 'Build complete: $IMAGE_NAME'" + rules: + - if: '$CI_COMMIT_BRANCH == "development"' + +# ========================= +# 🚀 DEPLOY STAGE +# ========================= +deploy-dev: + stage: deploy + image: alpine:3.20 + + before_script: + - echo "Installing dependencies..." + - apk add --no-cache openssh curl + - mkdir -p ~/.ssh + - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - eval $(ssh-agent -s) + - ssh-add ~/.ssh/id_rsa + - ssh-keyscan -H "$SERVER_IP" >> ~/.ssh/known_hosts + + script: + - echo "Deploying image to $SERVER_USER@$SERVER_IP" + - > + ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_IP" " + docker pull $CI_REGISTRY_IMAGE/web-lti:development_${CI_COMMIT_SHORT_SHA} && + docker stop dev-web-lti || true && + docker rm dev-web-lti || true && + docker run -d --name dev-web-lti \ + --network dev-lti-network \ + -p 3002:3000 \ + $CI_REGISTRY_IMAGE/web-lti:development_${CI_COMMIT_SHORT_SHA} + " rules: - if: '$CI_COMMIT_BRANCH == "development"' \ No newline at end of file