Files
health-check/entrypoint.sh

49 lines
1.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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" != "000" ] && break
# 如果狀態碼為 "000",表示連線失敗,等待 60 秒後重試
sleep 60
done
echo "=================================================="
# 將狀態碼輸出到環境變數
echo "status_code=$STATUS_CODE" >> "$GITHUB_OUTPUT"
# 檢查狀態碼是否正確
[ "$STATUS_CODE" = "$HEALTH_CODE" ] && exit 0 || exit 1