- การใช้
: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
ยังไม่มีความคิดเห็น