feat(deploy): full staging deployment - 1 replica, parallel Kaniko, all 26 services
Some checks failed
Build & Deploy to K8s / build-and-deploy (push) Failing after 6s
Some checks failed
Build & Deploy to K8s / build-and-deploy (push) Failing after 6s
- Scale all 26 services from 2→1 replicas (fit 8.4 available cores) - HPA min 2→1, max 4→2 for staging - Rewrite Gitea Actions: batch parallel Kaniko builds (5 per batch) - Secure credentials via secrets (REPO_PASSWORD, HARBOR_*) - Kaniko clones from Gitea (already mirrored from GitHub) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
# EN: Build & Deploy GoodGo Platform to K8s staging via Gitea Actions
|
||||
# VI: Build & Deploy GoodGo Platform len K8s staging qua Gitea Actions
|
||||
#
|
||||
# Flow: Push → detect changed services → Kaniko build → push Harbor → kubectl deploy
|
||||
# Runner: act_runner (host mode, in-cluster kubectl + Kaniko Jobs)
|
||||
# Flow: Push → detect changes → batch Kaniko builds (parallel) → Harbor → kubectl deploy
|
||||
# Runner: act_runner (host mode, in-cluster kubectl)
|
||||
# Build: Kaniko Jobs clone from Gitea, build Dockerfiles, push to Harbor
|
||||
|
||||
name: Build & Deploy to K8s
|
||||
|
||||
@@ -14,10 +15,10 @@ jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone source from Gitea
|
||||
- name: Clone source
|
||||
run: |
|
||||
git clone --depth 2 --branch ${{ github.ref_name }} \
|
||||
https://admin:Velik%402026@gitea.techbi.org/admin/pos-system.git .
|
||||
https://admin:${{ secrets.REPO_PASSWORD }}@gitea.techbi.org/admin/pos-system.git .
|
||||
|
||||
- name: Detect changed services
|
||||
run: |
|
||||
@@ -27,16 +28,12 @@ jobs:
|
||||
CHANGED=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "ALL")
|
||||
|
||||
SERVICES=""
|
||||
|
||||
check_change() {
|
||||
local path="$1"
|
||||
local name="$2"
|
||||
if echo "$CHANGED" | grep -q "^${path}/" || echo "$CHANGED" | grep -q "ALL"; then
|
||||
SERVICES="${SERVICES} ${name}"
|
||||
if echo "$CHANGED" | grep -q "^${1}/" || echo "$CHANGED" | grep -q "ALL"; then
|
||||
SERVICES="${SERVICES} ${2}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Core services
|
||||
check_change "services/iam-service-net" "iam-service"
|
||||
check_change "services/merchant-service-net" "merchant-service"
|
||||
check_change "services/order-service-net" "order-service"
|
||||
@@ -52,116 +49,90 @@ jobs:
|
||||
check_change "services/membership-service-net" "membership-service"
|
||||
check_change "services/mining-service-net" "mining-service"
|
||||
check_change "services/mission-service-net" "mission-service"
|
||||
|
||||
# Ads services
|
||||
check_change "services/ads-manager-service-net" "ads-manager-service"
|
||||
check_change "services/ads-serving-service-net" "ads-serving-service"
|
||||
check_change "services/ads-billing-service-net" "ads-billing-service"
|
||||
check_change "services/ads-tracking-service-net" "ads-tracking-service"
|
||||
check_change "services/ads-analytics-service-net" "ads-analytics-service"
|
||||
|
||||
# Marketing services
|
||||
check_change "services/mkt-facebook-service-net" "mkt-facebook-service"
|
||||
check_change "services/mkt-whatsapp-service-net" "mkt-whatsapp-service"
|
||||
check_change "services/mkt-x-service-net" "mkt-x-service"
|
||||
check_change "services/mkt-zalo-service-net" "mkt-zalo-service"
|
||||
|
||||
# Frontend
|
||||
check_change "apps/web-client-tpos-net" "pos-web"
|
||||
|
||||
# If K8s configs changed, flag for config deploy
|
||||
K8S_CONFIG=""
|
||||
if echo "$CHANGED" | grep -q "^deployments/staging/"; then
|
||||
SERVICES="${SERVICES} __k8s_config__"
|
||||
K8S_CONFIG="yes"
|
||||
fi
|
||||
|
||||
echo "CHANGED_SERVICES=${SERVICES}" >> $GITHUB_ENV
|
||||
echo "Changed services: ${SERVICES:-none}"
|
||||
echo "K8S_CONFIG=${K8S_CONFIG}" >> $GITHUB_ENV
|
||||
echo "Changed services:${SERVICES:-none}"
|
||||
echo "K8s config changed: ${K8S_CONFIG:-no}"
|
||||
|
||||
- name: Build and push via Kaniko
|
||||
- name: Setup Kaniko registry secret
|
||||
run: |
|
||||
# Filter out __k8s_config__ to get only real services
|
||||
BUILD_SERVICES=""
|
||||
for svc in $CHANGED_SERVICES; do
|
||||
if [ "$svc" != "__k8s_config__" ]; then
|
||||
BUILD_SERVICES="${BUILD_SERVICES} ${svc}"
|
||||
fi
|
||||
done
|
||||
for svc in $CHANGED_SERVICES; do BUILD_SERVICES="${BUILD_SERVICES} ${svc}"; done
|
||||
if [ -z "$BUILD_SERVICES" ]; then echo "No services to build"; exit 0; fi
|
||||
|
||||
if [ -z "$BUILD_SERVICES" ]; then
|
||||
echo "No services to build, skipping"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
HARBOR="harbor.techbi.org"
|
||||
PROJECT="goodgo"
|
||||
GITHUB_REPO="https://github.com/hongochai10/Microservices-Development.git"
|
||||
BRANCH="${{ github.ref_name }}"
|
||||
NS="staging"
|
||||
|
||||
# Create Harbor docker config secret for Kaniko
|
||||
kubectl create secret docker-registry kaniko-harbor-secret -n "${NS}" \
|
||||
--docker-server="${HARBOR}" \
|
||||
--docker-username="${{ secrets.HARBOR_USERNAME }}" \
|
||||
--docker-password="${{ secrets.HARBOR_PASSWORD }}" \
|
||||
kubectl create secret docker-registry kaniko-harbor-secret -n staging \
|
||||
--docker-server=harbor.techbi.org \
|
||||
--docker-username=${{ secrets.HARBOR_USERNAME }} \
|
||||
--docker-password=${{ secrets.HARBOR_PASSWORD }} \
|
||||
--docker-email=admin@techbi.org \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
- name: Build services via Kaniko (batched parallel)
|
||||
run: |
|
||||
if [ -z "$CHANGED_SERVICES" ]; then echo "No services to build"; exit 0; fi
|
||||
|
||||
HARBOR="harbor.techbi.org"
|
||||
PROJECT="goodgo"
|
||||
GITEA_URL="https://admin:${{ secrets.REPO_PASSWORD }}@gitea.techbi.org/admin/pos-system.git"
|
||||
BRANCH="${{ github.ref_name }}"
|
||||
NS="staging"
|
||||
|
||||
get_context() {
|
||||
case "$1" in
|
||||
iam-service) echo "services/iam-service-net" ;;
|
||||
merchant-service) echo "services/merchant-service-net" ;;
|
||||
order-service) echo "services/order-service-net" ;;
|
||||
fnb-engine) echo "services/fnb-engine-net" ;;
|
||||
catalog-service) echo "services/catalog-service-net" ;;
|
||||
inventory-service) echo "services/inventory-service-net" ;;
|
||||
wallet-service) echo "services/wallet-service-net" ;;
|
||||
storage-service) echo "services/storage-service-net" ;;
|
||||
booking-service) echo "services/booking-service-net" ;;
|
||||
chat-service) echo "services/chat-service-net" ;;
|
||||
social-service) echo "services/social-service-net" ;;
|
||||
promotion-service) echo "services/promotion-service-net" ;;
|
||||
membership-service) echo "services/membership-service-net" ;;
|
||||
mining-service) echo "services/mining-service-net" ;;
|
||||
mission-service) echo "services/mission-service-net" ;;
|
||||
ads-manager-service) echo "services/ads-manager-service-net" ;;
|
||||
ads-serving-service) echo "services/ads-serving-service-net" ;;
|
||||
ads-billing-service) echo "services/ads-billing-service-net" ;;
|
||||
ads-tracking-service) echo "services/ads-tracking-service-net" ;;
|
||||
ads-analytics-service) echo "services/ads-analytics-service-net" ;;
|
||||
mkt-facebook-service) echo "services/mkt-facebook-service-net" ;;
|
||||
mkt-whatsapp-service) echo "services/mkt-whatsapp-service-net" ;;
|
||||
mkt-x-service) echo "services/mkt-x-service-net" ;;
|
||||
mkt-zalo-service) echo "services/mkt-zalo-service-net" ;;
|
||||
pos-web) echo "apps/web-client-tpos-net" ;;
|
||||
iam-service) echo "services/iam-service-net" ;; merchant-service) echo "services/merchant-service-net" ;;
|
||||
order-service) echo "services/order-service-net" ;; fnb-engine) echo "services/fnb-engine-net" ;;
|
||||
catalog-service) echo "services/catalog-service-net" ;; inventory-service) echo "services/inventory-service-net" ;;
|
||||
wallet-service) echo "services/wallet-service-net" ;; storage-service) echo "services/storage-service-net" ;;
|
||||
booking-service) echo "services/booking-service-net" ;; chat-service) echo "services/chat-service-net" ;;
|
||||
social-service) echo "services/social-service-net" ;; promotion-service) echo "services/promotion-service-net" ;;
|
||||
membership-service) echo "services/membership-service-net" ;; mining-service) echo "services/mining-service-net" ;;
|
||||
mission-service) echo "services/mission-service-net" ;; ads-manager-service) echo "services/ads-manager-service-net" ;;
|
||||
ads-serving-service) echo "services/ads-serving-service-net" ;; ads-billing-service) echo "services/ads-billing-service-net" ;;
|
||||
ads-tracking-service) echo "services/ads-tracking-service-net" ;; ads-analytics-service) echo "services/ads-analytics-service-net" ;;
|
||||
mkt-facebook-service) echo "services/mkt-facebook-service-net" ;; mkt-whatsapp-service) echo "services/mkt-whatsapp-service-net" ;;
|
||||
mkt-x-service) echo "services/mkt-x-service-net" ;; mkt-zalo-service) echo "services/mkt-zalo-service-net" ;;
|
||||
pos-web) echo "apps/web-client-tpos-net" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_image_name() {
|
||||
case "$1" in
|
||||
pos-web) echo "web-client-tpos-net" ;;
|
||||
*) echo "${1}-net" ;;
|
||||
esac
|
||||
get_image() {
|
||||
case "$1" in pos-web) echo "web-client-tpos-net" ;; *) echo "${1}-net" ;; esac
|
||||
}
|
||||
|
||||
build_with_kaniko() {
|
||||
create_kaniko_job() {
|
||||
local svc="$1"
|
||||
local context=$(get_context "$svc")
|
||||
local image_name=$(get_image_name "$svc")
|
||||
local full_image="${HARBOR}/${PROJECT}/${image_name}"
|
||||
local job_name="kaniko-build-$(echo ${svc} | tr '_' '-')-${IMAGE_TAG}"
|
||||
local ctx=$(get_context "$svc")
|
||||
local img=$(get_image "$svc")
|
||||
local full="${HARBOR}/${PROJECT}/${img}"
|
||||
local job="kaniko-${svc}-${IMAGE_TAG}"
|
||||
|
||||
echo "=== Building ${svc} via Kaniko ==="
|
||||
|
||||
# Create Kaniko Job
|
||||
cat <<JOBEOF | kubectl apply -f -
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: ${job_name}
|
||||
name: ${job}
|
||||
namespace: ${NS}
|
||||
labels:
|
||||
build-batch: "${IMAGE_TAG}"
|
||||
spec:
|
||||
backoffLimit: 1
|
||||
ttlSecondsAfterFinished: 300
|
||||
ttlSecondsAfterFinished: 600
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
@@ -169,12 +140,12 @@ jobs:
|
||||
image: gcr.io/kaniko-project/executor:latest
|
||||
args:
|
||||
- "--dockerfile=Dockerfile"
|
||||
- "--context=git://${GITHUB_REPO}#refs/heads/${BRANCH}#${context}"
|
||||
- "--destination=${full_image}:${IMAGE_TAG}"
|
||||
- "--destination=${full_image}:latest"
|
||||
- "--cache=true"
|
||||
- "--cache-repo=${full_image}/cache"
|
||||
- "--context=git://${GITEA_URL}#refs/heads/${BRANCH}#${ctx}"
|
||||
- "--destination=${full}:${IMAGE_TAG}"
|
||||
- "--destination=${full}:latest"
|
||||
- "--cache=false"
|
||||
- "--skip-tls-verify"
|
||||
- "--push-retry=2"
|
||||
volumeMounts:
|
||||
- name: docker-config
|
||||
mountPath: /kaniko/.docker
|
||||
@@ -194,45 +165,56 @@ jobs:
|
||||
- key: .dockerconfigjson
|
||||
path: config.json
|
||||
JOBEOF
|
||||
|
||||
echo "Waiting for Kaniko job ${job_name}..."
|
||||
kubectl wait --for=condition=complete job/${job_name} -n ${NS} --timeout=600s 2>/dev/null
|
||||
local result=$?
|
||||
|
||||
if [ $result -ne 0 ]; then
|
||||
echo "ERROR: Kaniko build failed for ${svc}"
|
||||
kubectl logs job/${job_name} -n ${NS} --tail=30 2>/dev/null
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "=== ${svc} built and pushed ==="
|
||||
echo "Created job ${job}"
|
||||
}
|
||||
|
||||
FAILED=0
|
||||
for svc in $BUILD_SERVICES; do
|
||||
if ! build_with_kaniko "$svc"; then
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
# Convert to array and process in batches of 5
|
||||
set -- $CHANGED_SERVICES
|
||||
BATCH=0
|
||||
TOTAL_FAILED=0
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
BATCH=$((BATCH + 1))
|
||||
BATCH_JOBS=""
|
||||
COUNT=0
|
||||
|
||||
# Create up to 5 Kaniko jobs
|
||||
while [ $# -gt 0 ] && [ $COUNT -lt 5 ]; do
|
||||
create_kaniko_job "$1"
|
||||
BATCH_JOBS="${BATCH_JOBS} kaniko-${1}-${IMAGE_TAG}"
|
||||
shift
|
||||
COUNT=$((COUNT + 1))
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Batch ${BATCH}: Waiting for ${COUNT} builds ==="
|
||||
|
||||
# Wait for all jobs in this batch
|
||||
for job in $BATCH_JOBS; do
|
||||
echo "Waiting for ${job}..."
|
||||
if kubectl wait --for=condition=complete "job/${job}" -n ${NS} --timeout=600s 2>/dev/null; then
|
||||
echo " ✅ ${job} succeeded"
|
||||
else
|
||||
echo " ❌ ${job} FAILED"
|
||||
kubectl logs "job/${job}" -n ${NS} --tail=20 2>/dev/null
|
||||
TOTAL_FAILED=$((TOTAL_FAILED + 1))
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if [ $FAILED -gt 0 ]; then
|
||||
echo "ERROR: ${FAILED} service(s) failed to build"
|
||||
echo ""
|
||||
echo "=== Build Summary ==="
|
||||
echo "Total batches: ${BATCH}"
|
||||
echo "Failed: ${TOTAL_FAILED}"
|
||||
|
||||
if [ $TOTAL_FAILED -gt 0 ]; then
|
||||
echo "ERROR: ${TOTAL_FAILED} builds failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Deploy to K8s
|
||||
- name: Apply K8s configs
|
||||
run: |
|
||||
if [ -z "$CHANGED_SERVICES" ]; then
|
||||
echo "No services changed, skipping deploy"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
HARBOR="harbor.techbi.org"
|
||||
PROJECT="goodgo"
|
||||
NS="staging"
|
||||
|
||||
# Apply K8s configs if changed
|
||||
if echo "$CHANGED_SERVICES" | grep -q "__k8s_config__"; then
|
||||
if [ -n "$K8S_CONFIG" ]; then
|
||||
echo "=== Applying K8s configs ==="
|
||||
kubectl apply -f deployments/staging/kubernetes/configmap.yaml
|
||||
kubectl apply -f deployments/staging/kubernetes/redis.yaml
|
||||
@@ -242,67 +224,72 @@ jobs:
|
||||
kubectl apply -f deployments/staging/kubernetes/network-policy.yaml
|
||||
fi
|
||||
|
||||
deploy_service() {
|
||||
local name="$1"
|
||||
local image_name="$2"
|
||||
local manifest="$3"
|
||||
local image="${HARBOR}/${PROJECT}/${image_name}:${IMAGE_TAG}"
|
||||
- name: Deploy services
|
||||
run: |
|
||||
if [ -z "$CHANGED_SERVICES" ] && [ -z "$K8S_CONFIG" ]; then
|
||||
echo "Nothing to deploy"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
HARBOR="harbor.techbi.org"
|
||||
PROJECT="goodgo"
|
||||
NS="staging"
|
||||
|
||||
deploy_svc() {
|
||||
local name="$1" img="$2" manifest="$3"
|
||||
echo "=== Deploying ${name} ==="
|
||||
kubectl apply -f "deployments/staging/kubernetes/${manifest}"
|
||||
kubectl set image "deployment/${name}" "${name}=${image}" -n "${NS}"
|
||||
kubectl set image "deployment/${name}" "${name}=${HARBOR}/${PROJECT}/${img}:${IMAGE_TAG}" -n "${NS}" 2>/dev/null
|
||||
kubectl patch deployment "${name}" -n "${NS}" \
|
||||
-p '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"harbor-pull-secret"}],"containers":[{"name":"'"${name}"'","imagePullPolicy":"Always"}]}}}}'
|
||||
-p '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"harbor-pull-secret"}],"containers":[{"name":"'"${name}"'","imagePullPolicy":"Always"}]}}}}' 2>/dev/null
|
||||
}
|
||||
|
||||
for svc in $CHANGED_SERVICES; do
|
||||
case "$svc" in
|
||||
iam-service) deploy_service "iam-service" "iam-service-net" "iam-service.yaml" ;;
|
||||
merchant-service) deploy_service "merchant-service" "merchant-service-net" "merchant-service.yaml" ;;
|
||||
order-service) deploy_service "order-service" "order-service-net" "order-service.yaml" ;;
|
||||
fnb-engine) deploy_service "fnb-engine" "fnb-engine-net" "fnb-engine.yaml" ;;
|
||||
catalog-service) deploy_service "catalog-service" "catalog-service-net" "catalog-service.yaml" ;;
|
||||
inventory-service) deploy_service "inventory-service" "inventory-service-net" "inventory-service.yaml" ;;
|
||||
wallet-service) deploy_service "wallet-service" "wallet-service-net" "wallet-service.yaml" ;;
|
||||
storage-service) deploy_service "storage-service" "storage-service-net" "storage-service.yaml" ;;
|
||||
booking-service) deploy_service "booking-service" "booking-service-net" "booking-service.yaml" ;;
|
||||
chat-service) deploy_service "chat-service" "chat-service-net" "chat-service.yaml" ;;
|
||||
social-service) deploy_service "social-service" "social-service-net" "social-service.yaml" ;;
|
||||
promotion-service) deploy_service "promotion-service" "promotion-service-net" "promotion-service.yaml" ;;
|
||||
membership-service) deploy_service "membership-service" "membership-service-net" "membership-service.yaml" ;;
|
||||
mining-service) deploy_service "mining-service" "mining-service-net" "mining-service.yaml" ;;
|
||||
mission-service) deploy_service "mission-service" "mission-service-net" "mission-service.yaml" ;;
|
||||
ads-manager-service) deploy_service "ads-manager-service" "ads-manager-service-net" "ads-manager-service.yaml" ;;
|
||||
ads-serving-service) deploy_service "ads-serving-service" "ads-serving-service-net" "ads-serving-service.yaml" ;;
|
||||
ads-billing-service) deploy_service "ads-billing-service" "ads-billing-service-net" "ads-billing-service.yaml" ;;
|
||||
ads-tracking-service) deploy_service "ads-tracking-service" "ads-tracking-service-net" "ads-tracking-service.yaml" ;;
|
||||
ads-analytics-service) deploy_service "ads-analytics-service" "ads-analytics-service-net" "ads-analytics-service.yaml" ;;
|
||||
mkt-facebook-service) deploy_service "mkt-facebook-service" "mkt-facebook-service-net" "mkt-facebook-service.yaml" ;;
|
||||
mkt-whatsapp-service) deploy_service "mkt-whatsapp-service" "mkt-whatsapp-service-net" "mkt-whatsapp-service.yaml" ;;
|
||||
mkt-x-service) deploy_service "mkt-x-service" "mkt-x-service-net" "mkt-x-service.yaml" ;;
|
||||
mkt-zalo-service) deploy_service "mkt-zalo-service" "mkt-zalo-service-net" "mkt-zalo-service.yaml" ;;
|
||||
pos-web) deploy_service "pos-web" "web-client-tpos-net" "pos-web.yaml" ;;
|
||||
iam-service) deploy_svc "iam-service" "iam-service-net" "iam-service.yaml" ;;
|
||||
merchant-service) deploy_svc "merchant-service" "merchant-service-net" "merchant-service.yaml" ;;
|
||||
order-service) deploy_svc "order-service" "order-service-net" "order-service.yaml" ;;
|
||||
fnb-engine) deploy_svc "fnb-engine" "fnb-engine-net" "fnb-engine.yaml" ;;
|
||||
catalog-service) deploy_svc "catalog-service" "catalog-service-net" "catalog-service.yaml" ;;
|
||||
inventory-service) deploy_svc "inventory-service" "inventory-service-net" "inventory-service.yaml" ;;
|
||||
wallet-service) deploy_svc "wallet-service" "wallet-service-net" "wallet-service.yaml" ;;
|
||||
storage-service) deploy_svc "storage-service" "storage-service-net" "storage-service.yaml" ;;
|
||||
booking-service) deploy_svc "booking-service" "booking-service-net" "booking-service.yaml" ;;
|
||||
chat-service) deploy_svc "chat-service" "chat-service-net" "chat-service.yaml" ;;
|
||||
social-service) deploy_svc "social-service" "social-service-net" "social-service.yaml" ;;
|
||||
promotion-service) deploy_svc "promotion-service" "promotion-service-net" "promotion-service.yaml" ;;
|
||||
membership-service) deploy_svc "membership-service" "membership-service-net" "membership-service.yaml" ;;
|
||||
mining-service) deploy_svc "mining-service" "mining-service-net" "mining-service.yaml" ;;
|
||||
mission-service) deploy_svc "mission-service" "mission-service-net" "mission-service.yaml" ;;
|
||||
ads-manager-service) deploy_svc "ads-manager-service" "ads-manager-service-net" "ads-manager-service.yaml" ;;
|
||||
ads-serving-service) deploy_svc "ads-serving-service" "ads-serving-service-net" "ads-serving-service.yaml" ;;
|
||||
ads-billing-service) deploy_svc "ads-billing-service" "ads-billing-service-net" "ads-billing-service.yaml" ;;
|
||||
ads-tracking-service) deploy_svc "ads-tracking-service" "ads-tracking-service-net" "ads-tracking-service.yaml" ;;
|
||||
ads-analytics-service) deploy_svc "ads-analytics-service" "ads-analytics-service-net" "ads-analytics-service.yaml" ;;
|
||||
mkt-facebook-service) deploy_svc "mkt-facebook-service" "mkt-facebook-service-net" "mkt-facebook-service.yaml" ;;
|
||||
mkt-whatsapp-service) deploy_svc "mkt-whatsapp-service" "mkt-whatsapp-service-net" "mkt-whatsapp-service.yaml" ;;
|
||||
mkt-x-service) deploy_svc "mkt-x-service" "mkt-x-service-net" "mkt-x-service.yaml" ;;
|
||||
mkt-zalo-service) deploy_svc "mkt-zalo-service" "mkt-zalo-service-net" "mkt-zalo-service.yaml" ;;
|
||||
pos-web) deploy_svc "pos-web" "web-client-tpos-net" "pos-web.yaml" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Wait for rollouts
|
||||
echo ""
|
||||
echo "=== Waiting for rollouts ==="
|
||||
FAILED=0
|
||||
for svc in $CHANGED_SERVICES; do
|
||||
if [ "$svc" = "__k8s_config__" ]; then continue; fi
|
||||
echo "Waiting for ${svc}..."
|
||||
if ! kubectl rollout status "deployment/${svc}" -n "${NS}" --timeout=180s 2>/dev/null; then
|
||||
echo "WARNING: ${svc} rollout did not complete"
|
||||
echo "⚠️ ${svc} rollout incomplete"
|
||||
FAILED=$((FAILED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Deployment Summary ==="
|
||||
kubectl get pods -n "${NS}" -o wide
|
||||
echo "=== Final Status ==="
|
||||
kubectl get pods -n "${NS}" --sort-by=.metadata.name
|
||||
echo ""
|
||||
kubectl get svc -n "${NS}"
|
||||
kubectl get svc -n "${NS}" | grep -v cm-acme
|
||||
|
||||
if [ $FAILED -gt 0 ]; then
|
||||
echo "WARNING: ${FAILED} service(s) did not complete rollout"
|
||||
exit 1
|
||||
echo "⚠️ ${FAILED} service(s) did not complete rollout"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user