Laravel 驗證循環 是做什麼的?
請在 Pull Request 之前、重大變更之後以及部署前執行。
使用時機
- 在為 Laravel 專案發起 Pull Request 之前
- 在進行重大重構或依賴升級之後
- 在準備部署至 staging 或 production 環境之前
- 執行完整的格式化 -> 測試 -> 安全 -> 部署就緒管道
運作方式
- 按照環境檢查到部署就緒的順序,依序執行各階段,使每一層都建立在前一層的基礎上。
- 環境與 Composer 檢查是所有後續步驟的閘門;若它們失敗,則立即停止。
- 在執行完整測試與覆蓋率之前,應先完成格式化/靜態分析。
- 安全與遷移審查在測試之後進行,以便在進行資料或發佈步驟前先驗證行為。
- 建置/部署就緒與佇列/排程器檢查是最終閘門;任何失敗都會封鎖發佈。
階段 1:環境檢查
php -v
composer --version
php artisan --version
- 確認
.env檔案存在且必要的金鑰已設定 - 確認生產環境中
APP_DEBUG=false - 確認
APP_ENV與目標部署環境相符(production、staging)
若在本機使用 Laravel Sail:
./vendor/bin/sail php -v
./vendor/bin/sail artisan --version
階段 1.5:Composer 與自動載入
composer validate
composer dump-autoload -o
階段 2:格式化與靜態分析
vendor/bin/pint --test
vendor/bin/phpstan analyse
若您的專案使用 Psalm 而非 PHPStan:
vendor/bin/psalm
階段 3:測試與覆蓋率
php artisan test
覆蓋率(CI 環境):
XDEBUG_MODE=coverage php artisan test --coverage
CI 範例(格式化 -> 靜態分析 -> 測試):
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
階段 4:安全性與依賴檢查
composer audit
階段 5:資料庫與遷移
php artisan migrate --pretend
php artisan migrate:status
- 仔細審查可能造成破壞的遷移
- 確保遷移檔案名稱遵循
Y_m_d_His_*格式(例如2025_03_14_154210_create_orders_table.php),並清楚描述變更內容 - 確保可以進行回滾
- 驗證
down()方法,並避免在沒有明確備份的情況下造成不可逆的資料損失
階段 6:建置與部署就緒
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
- 確保在生產環境設定中快取熱身成功
- 驗證佇列工作者與排程器已正確設定
- 確認目標環境中
storage/與bootstrap/cache/目錄可寫入
階段 7:佇列與排程器檢查
php artisan schedule:list
php artisan queue:failed
若使用 Horizon:
php artisan horizon:status
若 queue:monitor 指令可用,請使用它來檢查積壓情況,而不實際處理任務:
php artisan queue:monitor default --max=100
主動驗證(僅限 staging 環境):將一個空操作任務分派到專用佇列,並執行單一工作者來處理它(確保已設定非 sync 佇列連線)。
php artisan tinker --execute="dispatch((new App\\Jobs\\QueueHealthcheck())->onQueue('healthcheck'))"
php artisan queue:work --once --queue=healthcheck
驗證任務產生了預期的副作用(日誌條目、健康檢查表格記錄或指標)。
僅在非生產環境且安全處理測試任務時執行此操作。
範例
最小流程:
php -v
composer --version
php artisan --version
composer validate
vendor/bin/pint --test
vendor/bin/phpstan analyse
php artisan test
composer audit
php artisan migrate --pretend
php artisan config:cache
php artisan queue:failed
CI 風格管道:
composer validate
composer dump-autoload -o
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
composer audit
php artisan migrate --pretend
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan schedule:list