- En el Dockerfile,
:latest rompe el requisito más importante de CD: las "builds idempotentes reproducibles"
→ No solo puede hacer que la build falle, sino también provocar errores en producción
- Es aún peor especificar
latest en el manifiesto de un Pod de Kubernetes
→ En un Dockerfile al menos es posible hacer rollback, pero si lo haces en el manifiesto de despliegue, existe el riesgo de romper compatibilidad en cualquier momento en que se haga rollout de nuevos Pods
- En PIP,
package.json, Terraform, etc., si se especifica una versión mínima o no se indica una versión, el efecto es básicamente el mismo que usar latest
- Asegúrate de usar funciones como los lockfiles que ofrecen los frameworks
- Haz commit del archivo de lock en el control de código fuente
- Al aplicar nuevas funciones, bug fixes o security fixes, ejecuta algo como
terraform init -upgrade y haz commit del lockfile
- No actualices el lockfile durante CI
- Tipos de lockfile
- Terraform :
.terraform.lock.hcl
- Python :
Pipfile usando Pipenv
- Node/Yarn :
yarn.lock
- Go :
go.sum y go.mod
- Si es posible, no hagas dependency pulling en runtime
→ Convierte las dependencias en artefactos desplegables y asígnales versionado
- Haz vulnerability scanning con servicios como Twistlock / Grype
Aún no hay comentarios.