From d736bf9802d6603f5b0904c2c944ffba9285af79 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Mon, 12 Jan 2026 10:22:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=A2=9D=E4=BB=B6?= =?UTF-8?q?=E5=BC=8F=E5=AE=B9=E5=99=A8=E9=87=8D=E5=BB=BA=E9=82=8F=E8=BC=AF?= =?UTF-8?q?=EF=BC=8C=E6=B8=9B=E5=B0=91=20502=20=E5=81=9C=E6=A9=9F=E6=99=82?= =?UTF-8?q?=E9=96=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy.yaml | 76 ++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 23610a6..6f2ab07 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -48,8 +48,26 @@ jobs: docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true fi - # 2. 啟動或重建容器(502 最容易發生在這裡的瞬間) - - name: Step 2 - Container Up & Health Check + # 2. 檢查是否需要重建容器(只有 Dockerfile 或 compose.yaml 變動時才重建) + - 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 with: host: 192.168.0.103 @@ -59,11 +77,20 @@ jobs: script: | cd /home/amba/koori-erp chown -R 1000:1000 . - WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait + + # 檢查是否需要重建 + 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 + else + echo "⚡ 無 Docker 檔案變更,僅重新啟動容器..." + WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait + fi + echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel" - - name: Step 3 - Composer & NPM Build + - name: Step 4 - Composer & NPM Build run: | docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c " # 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 - # 4. 關閉維護模式(部署完成,恢復服務) - - name: Step 4 - Disable Maintenance Mode + # 5. 關閉維護模式(部署完成,恢復服務) + - name: Step 5 - Disable Maintenance Mode uses: appleboy/ssh-action@master with: host: 192.168.0.103 @@ -132,8 +159,26 @@ jobs: docker exec koori-erp-laravel php artisan down --refresh=15 --retry=60 || true fi - # 2. 啟動或重建容器(502 最容易發生在這裡的瞬間) - - name: Step 2 - Container Up & Health Check + # 2. 檢查是否需要重建容器(只有 Dockerfile 或 compose.yaml 變動時才重建) + - 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 with: host: erp.koori.tw @@ -143,7 +188,16 @@ jobs: script: | cd /var/www/koori-erp-prod chown -R 1000:1000 . - WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait + + # 檢查是否需要重建 + 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 + else + echo "⚡ 無 Docker 檔案變更,僅重新啟動容器..." + WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait + fi + echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel" 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 - # 3. 關閉維護模式(部署完成,恢復服務) - - name: Step 3 - Disable Maintenance Mode + # 4. 關閉維護模式(部署完成,恢復服務) + - name: Step 4 - Disable Maintenance Mode uses: appleboy/ssh-action@master with: host: erp.koori.tw