Compare commits

...

23 Commits

Author SHA1 Message Date
kris ebc960abb5 Update .gitlab-ci.yml file 2025-11-11 04:32:51 +00:00
kris af4926b1d7 Update .gitlab-ci.yml file 2025-11-11 04:26:32 +00:00
kris 3d134d7b8e Update .gitlab-ci.yml file 2025-11-11 04:20:32 +00:00
kris ea5ab83795 Update .gitlab-ci.yml file 2025-11-11 04:08:07 +00:00
kris 132ce52f23 Update .gitlab-ci.yml file 2025-11-11 03:59:20 +00:00
kris b1482fb586 Update .gitlab-ci.yml file 2025-11-10 09:48:36 +00:00
Mitra Berlian Unggas 56b75af69f Update .gitlab-ci.yml file 2025-11-10 09:31:50 +00:00
kris e05db3c0c4 Update .gitlab-ci.yml file 2025-11-10 09:05:07 +00:00
kris 695b7d64ec Update .gitlab-ci.yml file 2025-11-10 08:57:15 +00:00
kris f2c581fcc2 Update .gitlab-ci.yml file 2025-11-10 08:52:09 +00:00
kris f761a12137 Update .gitlab-ci.yml file 2025-11-10 08:44:55 +00:00
kris fef1b59138 Update .gitlab-ci.yml file 2025-11-10 08:34:58 +00:00
kris 472ff1d3da Update .gitlab-ci.yml file 2025-11-10 08:26:05 +00:00
kris 90de8f4e4d Update .gitlab-ci.yml file 2025-11-10 08:22:49 +00:00
kris 8912a82dba Update .gitlab-ci.yml file 2025-11-10 08:06:34 +00:00
kris 3ae5a0f9b7 Update .gitlab-ci.yml file 2025-11-10 08:05:40 +00:00
kris 2aaaf9a442 Update .gitlab-ci.yml file 2025-11-10 08:04:37 +00:00
kris caf406a383 Update .gitlab-ci.yml file 2025-11-10 06:59:47 +00:00
kris 10ed17b0ed Update .gitlab-ci.yml file 2025-11-10 06:44:05 +00:00
kris fd47a3b407 Update .gitlab-ci.yml file 2025-11-10 06:36:25 +00:00
kris 5cab1a072d Update .gitlab-ci.yml file 2025-11-10 06:32:29 +00:00
kris 288c675de7 Update .gitlab-ci.yml file 2025-11-10 06:24:44 +00:00
kris d8f16558a3 Update .gitlab-ci.yml file 2025-11-10 06:20:57 +00:00
+137 -50
View File
@@ -2,61 +2,148 @@ stages:
- build - build
- deploy - deploy
variables: # ====== TEMPLATE: BUILD STATIC NEXT.JS ======
DOCKER_BUILDKIT: "1" .build_template: &build_template
COMPOSE_DOCKER_CLI_BUILD: "1"
DOCKER_DRIVER: overlay2
BUILDKIT_PROGRESS: plain
IMAGE_NAME: "$CI_REGISTRY_IMAGE/web-lti:development_${CI_COMMIT_SHORT_SHA}"
NODE_ENV: "production"
HUSKY_SKIP_INSTALL: "1"
NEXT_PUBLIC_API_BASE_URL: "${NEXT_PUBLIC_API_BASE_URL}"
NEXT_PUBLIC_LTI_API_START_URL: "${NEXT_PUBLIC_LTI_API_START_URL}"
build-image:
stage: build stage: build
image: docker:27.0.3 image: node:20-alpine
services: cache:
- docker:dind key: npm-cache
paths:
before_script: - node_modules/
- echo "Login to registry" variables:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" NPM_CONFIG_PRODUCTION: "false"
NODE_ENV: ""
script: script:
- | - echo "Installing dependencies..."
docker build \ - npm ci --no-audit --no-fund
--build-arg NEXT_PUBLIC_API_BASE_URL="$NEXT_PUBLIC_API_BASE_URL" \ - echo "Building Next.js static export..."
--build-arg NEXT_PUBLIC_LTI_API_START_URL="$NEXT_PUBLIC_LTI_API_START_URL" \ - npx next build
--build-arg NODE_ENV="$NODE_ENV" \ artifacts:
--build-arg HUSKY_SKIP_INSTALL="$HUSKY_SKIP_INSTALL" \ name: "out-$CI_COMMIT_SHORT_SHA"
--cache-from "$CI_REGISTRY_IMAGE/web-lti:latest" \ paths:
-t "$IMAGE_NAME" . - out/
- docker push "$IMAGE_NAME" expire_in: 1 week
- docker image prune -af --filter "until=72h"
after_script: "echo 'Build complete: $IMAGE_NAME' && docker system prune -af || true && docker volume prune -f || true" .deploy_template: &deploy_template
rules:
- if: '$CI_COMMIT_BRANCH == "development"'
deploy-dev:
stage: deploy stage: deploy
image: alpine:3.20 image:
name: amazon/aws-cli:latest
before_script: entrypoint: ["/bin/sh", "-c"]
- apk add --no-cache openssh curl
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | base64 -d > ~/.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: script:
- ssh -o StrictHostKeyChecking=no \"$SERVER_USER@$SERVER_IP\" \"docker stop dev-web-lti || true && docker rm dev-web-lti || true && docker pull $CI_REGISTRY_IMAGE/web-lti:development_${CI_COMMIT_SHORT_SHA} && docker run -d --name dev-web-lti --network dev-lti-network -p 3002:3000 $CI_REGISTRY_IMAGE/web-lti:development_${CI_COMMIT_SHORT_SHA}\" - set -e
- aws --version
- echo "Cleaning up newline characters in AWS credentials..."
- export AWS_ACCESS_KEY_ID=$(echo $AWS_ACCESS_KEY_ID | tr -d '\r\n')
- export AWS_SECRET_ACCESS_KEY=$(echo $AWS_SECRET_ACCESS_KEY | tr -d '\r\n')
- echo "Deploying to s3://$S3_BUCKET in region $AWS_REGION"
- aws s3api head-bucket --bucket "$S3_BUCKET" --region "$AWS_REGION" || aws s3api create-bucket --bucket "$S3_BUCKET" --region "$AWS_REGION" --create-bucket-configuration LocationConstraint="$AWS_REGION"
- aws s3 sync ./out "s3://$S3_BUCKET" --delete --region "$AWS_REGION" --endpoint-url "https://s3.ap-southeast-3.amazonaws.com"
after_script: "echo 'Deploy finished for $IMAGE_NAME'" # CloudFront invalidation
- |
STATUS="success"
if [ -n "$CLOUDFRONT_DISTRIBUTION_ID" ]; then
echo "Invalidating CloudFront cache..."
if ! aws cloudfront create-invalidation --distribution-id "$CLOUDFRONT_DISTRIBUTION_ID" --paths "/*"; then
echo "CloudFront invalidation failed."
STATUS="failed"
fi
else
echo "No CloudFront distribution specified — skipping invalidation"
fi
# Notifikasi Discord
- |
RUN_URL="${CI_PROJECT_URL}/-/pipelines/${CI_PIPELINE_ID}"
# Tentukan nama environment
if [ "$CI_COMMIT_BRANCH" = "devops-s3" ]; then
ENVIRONMENT_NAME="WEB-LTI-DEV"
elif [ "$CI_COMMIT_BRANCH" = "master" ]; then
ENVIRONMENT_NAME="WEB-LTI-PROD"
else
ENVIRONMENT_NAME="UNKNOWN"
fi
if [ "$STATUS" = "success" ]; then
COLOR=3066993
TITLE="✅ Deployment ${ENVIRONMENT_NAME} Succeeded"
DESC="Deployment job on branch \`${CI_COMMIT_REF_NAME}\` completed successfully."
else
COLOR=15158332
TITLE="❌ Deployment ${ENVIRONMENT_NAME} Failed"
DESC="Deployment job on branch \`${CI_COMMIT_REF_NAME}\` encountered issues."
fi
jq -n \
--arg title "$TITLE" \
--arg desc "$DESC" \
--arg color "$COLOR" \
--arg repo "$CI_PROJECT_PATH" \
--arg actor "$GITLAB_USER_LOGIN" \
--arg commit "$CI_COMMIT_SHA" \
--arg run_url "$RUN_URL" \
'{
username: "CI Bot - LTI WEB",
embeds: [{
title: $title,
description: $desc,
color: ($color|tonumber),
fields: [
{name: "Repository", value: $repo, inline: true},
{name: "Actor", value: $actor, inline: true},
{name: "Commit", value: $commit, inline: false},
{name: "Pipeline", value: ("[Open run](" + $run_url + ")"), inline: false}
]
}]
}' > payload.json
curl -sS -H "Content-Type: application/json" -d @payload.json "$DISCORD_WEBHOOK_URL"
# ====== DEVELOPMENT (Branch devops-s3) ======
build:dev:
<<: *build_template
rules: rules:
- if: '$CI_COMMIT_BRANCH == "development"' - if: '$CI_COMMIT_BRANCH == "devops-s3"'
environment:
name: devops-s3
variables:
NEXT_PUBLIC_API_BASE_URL: "https://dev-api-lti.mbugroup.id"
NEXT_PUBLIC_SSO_LOGIN_URL: "https://dev-api-sso.mbugroup.id"
deploy:dev:
<<: *deploy_template
needs: ["build:dev"]
rules:
- if: '$CI_COMMIT_BRANCH == "devops-s3"'
variables:
S3_BUCKET: "dev-lti-erp.mbugroup.id"
AWS_REGION: "ap-southeast-3"
CLOUDFRONT_DISTRIBUTION_ID: "E1Z8XTA8XF1GIV"
environment:
name: devops-s3
url: https://dev-lti-erp.mbugroup.id
# ====== PRODUCTION ======
# build:production:
# <<: *build_template
# rules:
# # pilih salah satu: pakai branch master ATAU pakai tags rilis
# - if: '$CI_COMMIT_BRANCH == "master"'
# # - if: '$CI_COMMIT_TAG' # kalau mau rilis via tag, uncomment ini dan hapus baris di atas
# environment:
# name: production
# deploy:production:
# <<: *deploy_template
# needs: ["build:production"]
# rules:
# - if: '$CI_COMMIT_BRANCH == "master"'
# # - if: '$CI_COMMIT_TAG' # selaras dengan rule di build:production
# variables:
# S3_BUCKET: "lti-erp.mbugroup.id"
# CLOUDFRONT_DISTRIBUTION_ID: "ddfd"
# environment:
# name: production
# url: https://royalgoldcapital.com