- Dockerfile で
:latest を使うと、CD の最も重要な要件である「再現可能で冪等なビルド」を壊してしまう
→ ビルドを失敗させるだけでなく、本番障害の原因にもなる
- Kubernetes の 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 のようなサービスで脆弱性スキャンを行うこと
まだコメントはありません。