
Gitlab-ci กล้วยๆ: คำสั่งตรวจสอบว่า Container มีสถานะ healthy หรือยัง
ใน dockerfile เราสามารถเขียน healthcheck ได้เพื่อให้มันตรวจสอบสถานะแอปพลิเคชั่นว่ามันยังใช้งานได้อยู่ไหม เมื่อเราทำการพิมพ์ docker ps
มันจะแสดงประมาณนี้

จะสังเกตุว่ามีคำว่า healthy อยู่แสดงว่าแอปพลิเคชั่นยังใช้งานได้ปกติ
ซึ่งผมจะเอาไปใช้งานร่วมกับตอนเขียน gitlab-ci ในช่วงของ deploy job ซึ่งหลังจากเรา deploy ไปแล้ว เราต้องการทราบว่า container ตัวที่เราพึ่ง deploy ไปมันพร้อมใช้งานแล้วหรือยัง?
ปัญหาคือ ผมจะรู้ค่า healthy ของ container ได้ยังไงผ่าน gitlab-ci เพื่อไปเขียนว่าถ้ามัน healthy ให้ pipeline success ถ้าไม่ก็ pipeline fail ออกมาเลย
คำสั่งดูว่า Container มี status อะไร
ฉะนั้นสิ่งแรกเราต้องการทราบก่อนว่า Container มัน healthy ยังให้ใช้คำสั่ง
docker inspect --format "{{json .State.Health }}" "$CONTAINER_NAME" | jq '.Status'
เราจะได้ค่า healthcheck ออกมา เช่น "healthy"

ใช้ร่วมกับ Gitlab-ci
เมื่อเราได้คำสั่งข้างต้นมาแล้ว ให้มาเขียน check-docker-health.sh
ไว้ตรวจสอบก่อน
#!/bin/bash
CONTAINER_NAME="stu-line-message-api-api-1"
HEALTH_STATUS=$(docker inspect --format "{{json .State.Health }}" "$CONTAINER_NAME" | jq -r '.Status')
docker inspect --format "{{json .State.Health }}" "$CONTAINER_NAME" | jq '.Status'
if [[ "$HEALTH_STATUS" == "healthy" ]]; then
echo "Pipeline passed: Docker container is healthy"
exit 0 # สิ้นสุด script ด้วยสถานะสำเร็จ (สีเขียว)
else
echo "Pipeline failed: Docker container is not healthy"
exit 1 # สิ้นสุด script ด้วยสถานะล้มเหลว (สีแดง)
fi
จากคำสั่งข้างต้นคือให้มันตรวจสอบ container ที่เราระบุไว้ว่ามี status เป็น healthy หรือยัง ถ้าใช่ก็ให้มัน exit 0
ออกมา ถ้าเป็นคำอื่นนอกเหนือจาก healthy ก็ให้มัน exit 1
ออกมา
จากนั้นมาเขียน Gitlab-ci ไว้ใช้งานกัน
dev-deploy:
script:
- $PROD_SSH "app deploy command"
- $PROD_SSH "./check-docker-health.sh"
นำไปประยุกต์ใช้งานกันตามสะดวก...