From a5720be77b14333c1e54e58c77f11789ed856514 Mon Sep 17 00:00:00 2001 From: izuddin Date: Wed, 26 Aug 2026 02:55:20 +0000 Subject: [PATCH] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..20b0a4c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,132 @@ +stages: + - build + - deploy + +variables: + IMAGE: 10.15.39.186:8083/eosbpkd/sidata + TAG: $CI_COMMIT_SHORT_SHA + KUBE_NAMESPACE: sidata-prod + HELM_RELEASE: sidata + BUILDAH_ISOLATION: "chroot" + STORAGE_DRIVER: "vfs" + + http_proxy: "http://10.15.3.20:80" + https_proxy: "http://10.15.3.20:80" + HTTP_PROXY: "http://10.15.3.20:80" + HTTPS_PROXY: "http://10.15.3.20:80" + no_proxy: "127.0.0.1,localhost,10.15.39.186,10.15.39.0/24,10.42.0.0/16,10.43.0.0/16,.jakarta.go.id" + NO_PROXY: "127.0.0.1,localhost,10.15.39.186,10.15.39.0/24,10.42.0.0/16,10.43.0.0/16,.jakarta.go.id" + +# ========================================================= +# BUILD IMAGE VIA BUILDAH +# ========================================================= +build: + stage: build + image: quay.io/buildah/stable:latest + tags: + - sidata + script: + - echo '1. MENERAPKAN PENGATURAN REGISTRY' + - mkdir -p ~/.config/containers + - | + cat < ~/.config/containers/registries.conf + unqualified-search-registries = ["docker.io", "10.15.39.186:8084"] + + [[registry]] + location = "10.15.39.186:8083" + insecure = true + + [[registry]] + location = "10.15.39.186:8084" + insecure = true + + [[registry]] + location = "docker.io" + insecure = false + EOF + + - echo '2. LOGIN TO NEXUS REGISTRY' + - echo "$NEXUS_PASSWORD" | buildah login --tls-verify=false -u "$NEXUS_USERNAME" --password-stdin 10.15.39.186:8083 + + - echo '3. STARTING BUILDAH BUILD' + - buildah bud --tls-verify=false --storage-driver=vfs --isolation=chroot --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy -t $IMAGE:$TAG -t $IMAGE:latest . + + - echo '4. PUSHING TO NEXUS' + - buildah push --tls-verify=false --storage-driver=vfs $IMAGE:$TAG + - buildah push --tls-verify=false --storage-driver=vfs $IMAGE:latest + +# ========================================================= +# DEPLOY VIA HELM & KUBECTL +# ========================================================= +deploy: + stage: deploy + image: + name: alpine/k8s:1.29.1 + entrypoint: [""] + tags: + - skpp + script: + - echo '1. SETUP KUBECONFIG LOKAL & BYPASS PROXY' + - unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY + - export NO_PROXY="*" + - export no_proxy="*" + - mkdir -p ./kubeconfig-dir + - echo "$KUBECONFIG_B64" | base64 -d > ./kubeconfig-dir/config + - chmod 600 ./kubeconfig-dir/config + - export KUBECONFIG=$(pwd)/kubeconfig-dir/config + + - echo '2. TEST CONNECTION TO RKE2' + - kubectl version --client + - kubectl get nodes + - kubectl create namespace $KUBE_NAMESPACE --dry-run=client -o yaml | kubectl apply -f - + + - echo '3. VALIDASI TEMPLATE HELM (DEBUG)' + - helm template $HELM_RELEASE ./helm/skpp --namespace $KUBE_NAMESPACE --debug + + - echo '4. DEPLOYING APPS VIA HELM' + - | + helm upgrade --install $HELM_RELEASE ./helm/skpp \ + --namespace $KUBE_NAMESPACE \ + --set image.repository=$IMAGE \ + --set image.tag=$TAG \ + --set-string podAnnotations.rolloutTimestamp="$(date +%s)" \ + --set service.type=NodePort \ + --set service.nodePort=32180 \ + --set-string extraEnv.APP_ENV="production" \ + --set-string extraEnv.APP_DEBUG="false" \ + --set-string extraEnv.FORCE_HTTPS="true" \ + --set-string extraEnv.APP_KEY="base64:HiyJqrnWz8zB6WUCXTVb6lZsC3EraX/vFIn66Hx/dVM=" \ + --set-string extraEnv.APP_URL="https://dashboard-bpkd.drc-bpkd.data-center.id/skpp" \ + --set-string extraEnv.ASSET_URL="https://dashboard-bpkd.drc-bpkd.data-center.id/skpp" \ + --set-string extraEnv.SESSION_DRIVER="file" \ + --set-string extraEnv.SESSION_SECURE_COOKIE="true" + + - echo '5. CHECK REAL NODEPORT STATUS' + - kubectl get svc -n $KUBE_NAMESPACE + + - echo '6. CHECK STATUS ROLLOUT' + - kubectl rollout status deployment/$HELM_RELEASE -n $KUBE_NAMESPACE --timeout=180s || kubectl rollout status deployment/$HELM_RELEASE-skpp -n $KUBE_NAMESPACE --timeout=180s + + - echo '7. AUTO CLEAR LARAVEL CACHE ON POD' + - | + # Berikan jeda 5 detik agar pod baru benar-benar stabil sebelum dieksekusi artisan commands + sleep 5 + + POD_NAME=$(kubectl get pods -n $KUBE_NAMESPACE -l app=$HELM_RELEASE --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || true) + if [ -z "$POD_NAME" ]; then + POD_NAME=$(kubectl get pods -n $KUBE_NAMESPACE -l app.kubernetes.io/instance=$HELM_RELEASE --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || true) + fi + + if [ -n "$POD_NAME" ]; then + echo "Executing Artisan Clear Cache on Pod: $POD_NAME" + kubectl exec -n $KUBE_NAMESPACE $POD_NAME -- php artisan config:clear || true + kubectl exec -n $KUBE_NAMESPACE $POD_NAME -- php artisan route:clear || true + kubectl exec -n $KUBE_NAMESPACE $POD_NAME -- php artisan cache:clear || true + kubectl exec -n $KUBE_NAMESPACE $POD_NAME -- php artisan view:clear || true + else + echo "Warning: No running pod found for Artisan commands execution, skipping." + fi + + after_script: + - echo "Cleaning up sensitive temporary files..." + - rm -rf ./kubeconfig-dir \ No newline at end of file