From cb9d696cc4530a1cca5939475360fdabcdeb9bfb Mon Sep 17 00:00:00 2001 From: namdh Date: Sun, 13 Sep 2026 19:00:03 +0700 Subject: [PATCH] feat: add ci --- .gitlab-ci.yml | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..43d43aa --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,58 @@ +stages: + - build + - push + - deploy + +variables: + DOCKERHUB_REPO: "mws-frontend" + CONTAINER_NAME: "mws-frontend" + HOST_PORT: "80" + CONTAINER_PORT: "80" + DEPLOY_SSH_PORT: "8686" + VITE_API_BASE_URL: "https://mws-api.koda.id.vn" + +default: + tags: + - deploy + - build + +workflow: + rules: + - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "master"' + - when: never + +build: + stage: build + script: + - IMAGE_BASE="$REGISTRY_USER/$DOCKERHUB_REPO" + - docker build --build-arg VITE_API_BASE_URL="$VITE_API_BASE_URL" -t "$IMAGE_BASE:$CI_COMMIT_SHORT_SHA" -t "$IMAGE_BASE:latest" . + +push: + stage: push + script: + - IMAGE_BASE="$REGISTRY_USER/$DOCKERHUB_REPO" + - echo "$REGISTRY_PASSWORD" | docker login -u "$REGISTRY_USER" --password-stdin + - docker push "$IMAGE_BASE:$CI_COMMIT_SHORT_SHA" + - docker push "$IMAGE_BASE:latest" + - docker logout + +deploy: + stage: deploy + environment: + name: production + before_script: + - command -v ssh-agent >/dev/null 2>&1 || (apt-get update -y && apt-get install -y openssh-client) + - eval "$(ssh-agent -s)" + - chmod 600 "$SSH_PRIVATE_KEY" + - ssh-add "$SSH_PRIVATE_KEY" + - mkdir -p ~/.ssh && chmod 700 ~/.ssh + - ssh-keyscan -p "$DEPLOY_SSH_PORT" -H "$DEPLOYER_HOST" >> ~/.ssh/known_hosts 2>/dev/null + - chmod 644 ~/.ssh/known_hosts + script: + - IMAGE_BASE="$REGISTRY_USER/$DOCKERHUB_REPO" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "echo '$REGISTRY_PASSWORD' | docker login -u '$REGISTRY_USER' --password-stdin" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "docker pull '$IMAGE_BASE:$CI_COMMIT_SHORT_SHA'" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "docker stop '$CONTAINER_NAME' 2>/dev/null || true" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "docker rm '$CONTAINER_NAME' 2>/dev/null || true" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "docker run -d --name '$CONTAINER_NAME' --restart unless-stopped -p '$HOST_PORT:$CONTAINER_PORT' '$IMAGE_BASE:$CI_COMMIT_SHORT_SHA'" + - ssh -p "$DEPLOY_SSH_PORT" "$DEPLOYER_USER@$DEPLOYER_HOST" "docker logout"