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