• การใช้ :latest ใน Dockerfile ทำลายข้อกำหนดที่สำคัญที่สุดของ CD คือ "การบิลด์แบบ idempotent ที่ทำซ้ำได้"
    → ไม่เพียงทำให้บิลด์ล้มเหลว แต่ยังอาจก่อให้เกิดข้อผิดพลาดในโปรดักชันได้ด้วย
  • การระบุ latest ใน Kubernetes Pod Manifest แย่ยิ่งกว่าอีก
    → ใน Dockerfile ยังพอ rollback ได้ แต่ถ้าทำใน deployment manifest ก็เสี่ยงที่จะทำให้ความเข้ากันได้พังลงได้ทุกช่วงเวลาที่มีการ rollout Pod ใหม่
  • ใน PIP, package.json, Terraform ฯลฯ หากกำหนดเป็นมากกว่าหรือเท่ากับเวอร์ชันหนึ่ง หรือไม่ระบุเวอร์ชันไว้เลย ก็ให้ผลเหมือนกับการใช้ latest
  • ควรใช้ฟีเจอร์อย่าง lockfile ที่เฟรมเวิร์กต่าง ๆ มีให้เสมอ
    • commit lock file ลง source control
    • เมื่อเพิ่มฟีเจอร์ใหม่/แก้บั๊ก/แก้ช่องโหว่ความปลอดภัย ฯลฯ ให้เรียกสิ่งอย่าง terraform init -upgrade แล้ว commit lock file
    • ระหว่าง CI อย่าอัปเดต lock file
    • ประเภทของ lock file
      • Terraform : .terraform.lock.hcl
      • Python : Pipfile โดยใช้ Pipenv
      • Node/Yarn : yarn.lock
      • Go : go.sum และ go.mod
  • ถ้าเป็นไปได้ อย่าทำ dependency pulling ใน runtime
    → ควรทำ dependency ให้เป็น artifact ที่พร้อม deploy และกำหนดเวอร์ชันให้ชัดเจน
  • ควรทำ vulnerability scanning ด้วยบริการอย่าง Twistlock / Grype

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น