- Dockerfile 에서 :latest 는 CD의 가장 중요한 요구사항인 "재현 가능한 멱등 빌드"를 깸
→ 빌드를 실패하게 할뿐만 아니라 프로덕션 오류를 발생시키기도 함
- 쿠버네티스 Pod Manifest에서 latest를 지정하는 것은 더 안 좋음
→ Dockerfile에선 롤백이라도 가능하지만, 배포 manifest에서 해버리면 새로운 Pod이 롤아웃되는 아무 시점에나 호환성을 깰 우려가 생김
- PIP, Package.json, Terraform 등에서도 특정버전 이상의 것으로 지정하거나 버전을 명시하지 않으면 latest 사용과 똑같은 효과를 만듬
- 프레임워크들이 제공하는 Lockfile 과 같은 기능은 꼭 사용할 것
- 소스컨트롤에 락 파일 커밋
- 새로운 기능 적용/버그픽스/보안픽스 등 할때 terraform init -upgrade 같은거 호출하고 락파일 커밋할 것
- CI 도중에는 락파일 업데이트 하지 말기
- 락파일 종류
- Terraform : .terraform.lock.hcl
- Python : Pipfile using Pipenv
- Node/Yarn : yarn.lock
- Go : go.sum 과 go.mod
- 가능하면 런타임에서는 종속성 풀링 하지 말 것
→ 종속성을 배포가능한 아티팩트로 만들고, 버저닝 할 것
- Twistlock / Grype 같은 서비스로 취약점 스캐닝할 것