02. I. Código base
02. I. Código base
Un código base bajo control de versiones, con múltiples despliegues.
La regla: uno a uno
Una aplicación twelve-factor siempre se rastrea en un sistema de control de versiones (Git, Mercurial, Subversion). Existe una relación uno a uno entre el código base y la aplicación:
- Si hay un código base → hay una aplicación (con múltiples despliegues posibles).
- Si hay varios códigos base → no es una aplicación, es un sistema distribuido. Cada componente de ese sistema es su propia app y debe cumplir los 12 factores de forma independiente.
flowchart LR
subgraph App["Una aplicación"]
Repo["Repositorio único"]
Dev["Despliegue: dev"]
Staging["Despliegue: staging"]
Prod["Despliegue: producción"]
Repo --> Dev
Repo --> Staging
Repo --> Prod
end
Código compartido = extraerlo a librería
Si dos aplicaciones necesitan el mismo código, la solución no es compartir un repositorio entre ellas ni copiar/pegar archivos. La solución correcta es extraer ese código a una librería independiente, declararla como dependencia (ver Factor II) y versionarla con su propio changelog.
Esto evita el anti-patrón de “monolito distribuido”: varias apps que en realidad comparten estado y ciclo de vida a través de código copiado, pero se despliegan como si fueran independientes.
Despliegues múltiples, mismo código base
Un único código base puede tener muchos despliegues corriendo simultáneamente:
- El entorno de producción.
- Uno o varios entornos de staging/QA.
- El entorno local de cada desarrollador.
Todos ellos identifican la misma aplicación, aunque no necesariamente ejecuten exactamente el mismo commit en un momento dado — es normal que staging tenga cambios que todavía no llegaron a producción. Lo que los une no es “correr el mismo código en este instante”, sino compartir el mismo origen histórico.
Checklist del factor I
- La aplicación vive en un único repositorio de control de versiones.
- No hay código copiado/pegado entre este repo y otro: lo compartido está extraído a una librería versionada.
- Puedo nombrar todos los despliegues activos de este código base (dev, staging, prod, …) sin ambigüedad.
- Un sistema con varios repos independientes está tratado explícitamente como varias aplicaciones, cada una con sus propios 12 factores.
El siguiente factor, Dependencias, define cómo cada despliegue instala exactamente lo que necesita sin asumir nada del sistema anfitrión.