Files
health-check/entrypoint.sh
T
2026-03-31 07:24:41 +00:00

46 lines
1.6 KiB
Bash

#!/bin/bash
# 當 GitHub Actions 手動取消 workflow 時,Runner 會對容器送出終止訊號。
# 透過 trap 可在收到訊號時立即退出,避免無限迴圈持續重試。
on_terminate() {
echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] 收到取消訊號,停止健康檢查。"
exit 130
}
trap on_terminate TERM INT
echo "=================================================="
echo "參數檢查"
echo "--------------------------------------------------"
# 顯示 CHECK_URL 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出
echo "CHECK_URL=$CHECK_URL" && ([ -z "$CHECK_URL" ] || [ "$CHECK_URL" = "null" ]) && exit 1
# 顯示 HEALTH_CODE 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出
echo "HEALTH_CODE=$HEALTH_CODE" && ([ -z "$HEALTH_CODE" ] || [ "$HEALTH_CODE" = "null" ]) && exit 1
echo "=================================================="
echo "取得狀態碼"
echo "--------------------------------------------------"
# 使用無窮迴圈持續嘗試,直到成功取得有效狀態碼
while true; do
echo -n "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] $CHECK_URL ... "
# 使用 curl 取得狀態碼,最長等待 60 秒,並將結果輸出到環境變數 STATUS_CODE
STATUS_CODE=$(curl -s --max-time 60 -o /dev/null -w "%{http_code}" "$CHECK_URL")
echo "$STATUS_CODE" && [ "$STATUS_CODE" == "$HEALTH_CODE" ] && break
# 如果狀態碼為 "000",表示連線失敗,等待 60 秒後重試
sleep 60
done
echo "=================================================="
# 將狀態碼輸出到環境變數
echo "status_code=$STATUS_CODE" >> "$GITHUB_OUTPUT"