Factor 01
Codebase
یک Codebase، چند Deploy
هر App باید یک Codebase اصلی داشته باشد؛ معمولاً یک Git repo. همین Codebase میتواند در local، staging و production به شکل Deployهای مختلف اجرا شود.
چرا مهم است؟
وقتی برای هر محیط یا هر مشتری کد جدا داشته باشیم، بعد از مدتی چند نسخه از حقیقت داریم. Bug fixها جا میمانند، Release سخت میشود و تیم به جای ساخت محصول، با نسخهها کشتی میگیرد.
برداشت برای Kubernetes / Docker
در Kubernetes هر Service باید Image مشخصی داشته باشد که از همان Codebase ساخته شده. تفاوت dev/staging/prod باید در ConfigMap، Secret، Helm values یا GitOps values باشد، نه در سورسکد.
مثال بد
- برای production یک repo جدا داشته باشیم.
- برای staging یک branch دائمی با تغییرات خاص محیط نگه داریم.
- برای یک مشتری خاص، کد را copy کنیم و دستی تغییر بدهیم.
مثال خوب
- یک repo اصلی برای هر App داشته باشیم.
- تفاوت محیطها با Config و Release مدیریت شود، نه با تغییر کد.
- کد مشترک بین چند App به package/library جدا تبدیل شود.