stages: - build - deploy - cleanup # ============================== # ๐Ÿ—๏ธ BUILD IMAGE (Overwrite :dev) # ============================== build_image: stage: build image: docker:latest services: - docker:dind variables: DOCKER_TLS_CERTDIR: "/certs" script: - echo "๐Ÿ”ง Building Docker image for :dev..." - docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY" - docker build -f Dockerfile.local -t registry.gitlab.com/mbugroup/sso-mbugroup/lti-api:dev . - docker push registry.gitlab.com/mbugroup/sso-mbugroup/lti-api:dev only: - development # ============================== # ๐Ÿš€ DEPLOY TO DEV SERVER # ============================== deploy_lti: stage: deploy image: alpine:latest before_script: - apk add --no-cache openssh-client bash curl - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H "$SERVER_IP" >> ~/.ssh/known_hosts script: - echo "๐Ÿš€ Deploy ke ${SERVER_USER}@${SERVER_IP} menggunakan image :dev" - | ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} bash -s </dev/null 2>&1 || true docker rm -f "\${APP_NAME}" >/dev/null 2>&1 || true echo "๐Ÿงน Membersihkan container zombie di port \${PORT}..." OLD_ID=\$(docker ps -aq --filter "publish=\${PORT}") if [ -n "\${OLD_ID}" ]; then echo "โš ๏ธ Container lain masih pakai port \${PORT}, hapus..." docker stop \${OLD_ID} >/dev/null 2>&1 || true docker rm -f \${OLD_ID} >/dev/null 2>&1 || true fi echo "๐Ÿณ Pull image baru..." docker pull "\${DOCKER_IMAGE}" echo "๐Ÿš€ Run container baru..." docker run -d --name "\${APP_NAME}" --restart always \ --env-file "\${ENV_PATH}" \ -p \${PORT}:8081 \ --network "\${NETWORK_NAME}" \ "\${DOCKER_IMAGE}" echo "โœ… Deployment selesai di port \${PORT}" REMOTE only: - development