chore: polish health check output
This commit is contained in:
+2
-8
@@ -1,21 +1,15 @@
|
|||||||
FROM ubuntu:latest
|
FROM ubuntu:latest
|
||||||
|
|
||||||
# 更新並安裝必要的工具後清理暫存檔案以減小映像檔大小
|
RUN apt-get update \
|
||||||
RUN apt update \
|
&& apt-get install -y --no-install-recommends curl \
|
||||||
&& apt install -y curl \
|
|
||||||
&& apt clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# 複製私人證書到容器中
|
|
||||||
COPY rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
|
COPY rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
|
||||||
COPY jsc.idv.me+4.pem /usr/local/share/ca-certificates/jsc.idv.me+4.crt
|
COPY jsc.idv.me+4.pem /usr/local/share/ca-certificates/jsc.idv.me+4.crt
|
||||||
|
|
||||||
# 複製入口腳本到容器中
|
|
||||||
COPY entrypoint.sh /entrypoint.sh
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
# 更新 CA 證書以確保系統信任新的證書
|
|
||||||
RUN update-ca-certificates
|
RUN update-ca-certificates
|
||||||
|
|
||||||
RUN chmod +x /entrypoint.sh
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
+53
-26
@@ -1,46 +1,73 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -u
|
||||||
|
|
||||||
# 當 GitHub Actions 手動取消 workflow 時,Runner 會對容器送出終止訊號。
|
timestamp() {
|
||||||
# 透過 trap 可在收到訊號時立即退出,避免無限迴圈持續重試。
|
date -u +"%Y-%m-%dT%H:%M:%SZ"
|
||||||
|
}
|
||||||
|
|
||||||
|
log() {
|
||||||
|
printf '[%s] %s\n' "$(timestamp)" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
section() {
|
||||||
|
printf '\n==================================================\n'
|
||||||
|
printf '%s\n' "$1"
|
||||||
|
printf '%s\n' '--------------------------------------------------'
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
log "[ERROR] $1"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 當 workflow 被取消時,立即結束,避免健康檢查持續重試。
|
||||||
on_terminate() {
|
on_terminate() {
|
||||||
echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] 收到取消訊號,停止健康檢查。"
|
log "[WARN] 收到取消訊號,停止健康檢查。"
|
||||||
exit 130
|
exit 130
|
||||||
}
|
}
|
||||||
|
|
||||||
trap on_terminate TERM INT
|
trap on_terminate TERM INT
|
||||||
|
|
||||||
echo "=================================================="
|
HEALTH_CODE="${HEALTH_CODE:-200}"
|
||||||
|
|
||||||
echo "參數檢查"
|
section "參數檢查"
|
||||||
|
if [ -z "${CHECK_URL:-}" ] || [ "$CHECK_URL" = "null" ]; then
|
||||||
|
fail "CHECK_URL 不可為空。"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "--------------------------------------------------"
|
if [ -z "$HEALTH_CODE" ] || [ "$HEALTH_CODE" = "null" ]; then
|
||||||
|
fail "HEALTH_CODE 不可為空。"
|
||||||
|
fi
|
||||||
|
|
||||||
# 顯示 CHECK_URL 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出
|
log "[INFO] CHECK_URL=$CHECK_URL"
|
||||||
echo "CHECK_URL=$CHECK_URL" && ([ -z "$CHECK_URL" ] || [ "$CHECK_URL" = "null" ]) && exit 1
|
log "[INFO] HEALTH_CODE=$HEALTH_CODE"
|
||||||
|
|
||||||
# 顯示 HEALTH_CODE 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出
|
section "取得狀態碼"
|
||||||
echo "HEALTH_CODE=$HEALTH_CODE" && ([ -z "$HEALTH_CODE" ] || [ "$HEALTH_CODE" = "null" ]) && exit 1
|
log "[INFO] 開始檢查:$CHECK_URL"
|
||||||
|
|
||||||
echo "=================================================="
|
|
||||||
|
|
||||||
echo "取得狀態碼"
|
|
||||||
|
|
||||||
echo "--------------------------------------------------"
|
|
||||||
|
|
||||||
# 使用無窮迴圈持續嘗試,直到成功取得有效狀態碼
|
|
||||||
while true; do
|
while true; do
|
||||||
echo -n "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] $CHECK_URL ... "
|
printf '[%s] [INFO] GET %s ... ' "$(timestamp)" "$CHECK_URL"
|
||||||
|
|
||||||
# 使用 curl 取得狀態碼,最長等待 60 秒,並將結果輸出到環境變數 STATUS_CODE
|
status_code="$(curl -sS --max-time 60 -o /dev/null -w '%{http_code}' "$CHECK_URL" || true)"
|
||||||
STATUS_CODE=$(curl -s --max-time 60 -o /dev/null -w "%{http_code}" "$CHECK_URL")
|
if [ -z "$status_code" ]; then
|
||||||
|
status_code="000"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "$STATUS_CODE" && [ "$STATUS_CODE" == "$HEALTH_CODE" ] && break
|
printf '%s\n' "$status_code"
|
||||||
|
|
||||||
# 如果狀態碼為 "000",表示連線失敗,等待 60 秒後重試
|
if [ "$status_code" = "$HEALTH_CODE" ]; then
|
||||||
|
log "[OK] 狀態碼符合預期:$status_code"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "[WARN] 目前狀態碼 $status_code,預期 $HEALTH_CODE,60 秒後重試。"
|
||||||
sleep 60
|
sleep 60
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "=================================================="
|
section "完成"
|
||||||
|
log "[INFO] 輸出 status_code=$status_code"
|
||||||
# 將狀態碼輸出到環境變數
|
if [ -n "${GITHUB_OUTPUT:-}" ]; then
|
||||||
echo "status_code=$STATUS_CODE" >> "$GITHUB_OUTPUT"
|
echo "status_code=$status_code" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
log "[WARN] GITHUB_OUTPUT 未設定,略過寫入輸出檔。"
|
||||||
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user