feat: 新增條件式容器重建邏輯,減少 502 停機時間
This commit is contained in:
@@ -48,8 +48,26 @@ jobs:
|
|||||||
docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true
|
docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. 啟動或重建容器(502 最容易發生在這裡的瞬間)
|
# 2. 檢查是否需要重建容器(只有 Dockerfile 或 compose.yaml 變動時才重建)
|
||||||
- name: Step 2 - Container Up & Health Check
|
- name: Step 2 - Check if Rebuild Needed
|
||||||
|
id: check_rebuild
|
||||||
|
uses: appleboy/ssh-action@master
|
||||||
|
with:
|
||||||
|
host: 192.168.0.103
|
||||||
|
port: 22
|
||||||
|
username: amba
|
||||||
|
key: ${{ secrets.DEMO_SSH_KEY }}
|
||||||
|
script: |
|
||||||
|
cd /home/amba/koori-erp
|
||||||
|
# 檢查最近的 commit 是否包含 Dockerfile 或 compose.yaml 的變更
|
||||||
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
||||||
|
echo "REBUILD_NEEDED=true"
|
||||||
|
else
|
||||||
|
echo "REBUILD_NEEDED=false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 啟動或重建容器(根據檢查結果決定是否加 --build)
|
||||||
|
- name: Step 3 - Container Up & Health Check
|
||||||
uses: appleboy/ssh-action@master
|
uses: appleboy/ssh-action@master
|
||||||
with:
|
with:
|
||||||
host: 192.168.0.103
|
host: 192.168.0.103
|
||||||
@@ -59,11 +77,20 @@ jobs:
|
|||||||
script: |
|
script: |
|
||||||
cd /home/amba/koori-erp
|
cd /home/amba/koori-erp
|
||||||
chown -R 1000:1000 .
|
chown -R 1000:1000 .
|
||||||
|
|
||||||
|
# 檢查是否需要重建
|
||||||
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
||||||
|
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
||||||
|
else
|
||||||
|
echo "⚡ 無 Docker 檔案變更,僅重新啟動容器..."
|
||||||
|
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait
|
||||||
|
fi
|
||||||
|
|
||||||
echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel"
|
echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel"
|
||||||
|
|
||||||
|
|
||||||
- name: Step 3 - Composer & NPM Build
|
- name: Step 4 - Composer & NPM Build
|
||||||
run: |
|
run: |
|
||||||
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
|
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
|
||||||
# 1. 後端依賴 (Demo 環境建議加上 --no-interaction 避免卡住)
|
# 1. 後端依賴 (Demo 環境建議加上 --no-interaction 避免卡住)
|
||||||
@@ -81,8 +108,8 @@ jobs:
|
|||||||
"
|
"
|
||||||
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
|
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
|
||||||
|
|
||||||
# 4. 關閉維護模式(部署完成,恢復服務)
|
# 5. 關閉維護模式(部署完成,恢復服務)
|
||||||
- name: Step 4 - Disable Maintenance Mode
|
- name: Step 5 - Disable Maintenance Mode
|
||||||
uses: appleboy/ssh-action@master
|
uses: appleboy/ssh-action@master
|
||||||
with:
|
with:
|
||||||
host: 192.168.0.103
|
host: 192.168.0.103
|
||||||
@@ -132,8 +159,26 @@ jobs:
|
|||||||
docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true
|
docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. 啟動或重建容器(502 最容易發生在這裡的瞬間)
|
# 2. 檢查是否需要重建容器(只有 Dockerfile 或 compose.yaml 變動時才重建)
|
||||||
- name: Step 2 - Container Up & Health Check
|
- name: Step 2 - Check if Rebuild Needed
|
||||||
|
id: check_rebuild_prod
|
||||||
|
uses: appleboy/ssh-action@master
|
||||||
|
with:
|
||||||
|
host: erp.koori.tw
|
||||||
|
port: 2224
|
||||||
|
username: root
|
||||||
|
key: ${{ secrets.PROD_SSH_KEY }}
|
||||||
|
script: |
|
||||||
|
cd /var/www/koori-erp-prod
|
||||||
|
# 檢查最近的 commit 是否包含 Dockerfile 或 compose.yaml 的變更
|
||||||
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
||||||
|
echo "REBUILD_NEEDED=true"
|
||||||
|
else
|
||||||
|
echo "REBUILD_NEEDED=false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 啟動或重建容器(根據檢查結果決定是否加 --build)
|
||||||
|
- name: Step 3 - Container Up & Health Check
|
||||||
uses: appleboy/ssh-action@master
|
uses: appleboy/ssh-action@master
|
||||||
with:
|
with:
|
||||||
host: erp.koori.tw
|
host: erp.koori.tw
|
||||||
@@ -143,7 +188,16 @@ jobs:
|
|||||||
script: |
|
script: |
|
||||||
cd /var/www/koori-erp-prod
|
cd /var/www/koori-erp-prod
|
||||||
chown -R 1000:1000 .
|
chown -R 1000:1000 .
|
||||||
|
|
||||||
|
# 檢查是否需要重建
|
||||||
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
||||||
|
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
||||||
|
else
|
||||||
|
echo "⚡ 無 Docker 檔案變更,僅重新啟動容器..."
|
||||||
|
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait
|
||||||
|
fi
|
||||||
|
|
||||||
echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel"
|
echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel"
|
||||||
|
|
||||||
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
|
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
|
||||||
@@ -158,8 +212,8 @@ jobs:
|
|||||||
"
|
"
|
||||||
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
|
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
|
||||||
|
|
||||||
# 3. 關閉維護模式(部署完成,恢復服務)
|
# 4. 關閉維護模式(部署完成,恢復服務)
|
||||||
- name: Step 3 - Disable Maintenance Mode
|
- name: Step 4 - Disable Maintenance Mode
|
||||||
uses: appleboy/ssh-action@master
|
uses: appleboy/ssh-action@master
|
||||||
with:
|
with:
|
||||||
host: erp.koori.tw
|
host: erp.koori.tw
|
||||||
|
|||||||
Reference in New Issue
Block a user