15P by xguru 2022-03-07 | favorite | 댓글과 토론
  • 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 같은 서비스로 취약점 스캐닝할 것