อย่าใช้ `:latest`
(platformers.dev)- การใช้
: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
- Terraform :
- ถ้าเป็นไปได้ อย่าทำ dependency pulling ใน runtime
→ ควรทำ dependency ให้เป็น artifact ที่พร้อม deploy และกำหนดเวอร์ชันให้ชัดเจน - ควรทำ vulnerability scanning ด้วยบริการอย่าง Twistlock / Grype
ยังไม่มีความคิดเห็น