فاکتور پنجم: Build, Release, Run
فاکتور پنجم در 12-Factor App بر تفکیک دقیق مراحل ساخت، انتشار و اجرا تمرکز دارد. برای تبدیل یک کدبیس به یک deploy آماده اجرا، سه مرحله اصلی وجود دارد:
- Build (ساخت): مرحلهای که در آن کدبیس به یک بسته اجرایی (build) تبدیل میشود. در این مرحله، نسخه مشخصی از کد انتخاب شده، وابستگیها بارگیری شده و فایلهای باینری و منابع آماده میشوند.
- Release (انتشار): ترکیب build با پیکربندی فعلی deploy. نتیجه یک release است که شامل کد آماده اجرا و پیکربندی مربوطه است و آماده راهاندازی در محیط اجرایی میباشد.
- Run (اجرا): اجرای اپلیکیشن در محیط انتخاب شده، با راهاندازی فرآیندهای مشخص بر اساس release انتخابشده.
در متدولوژی 12-Factor App، این سه مرحله کاملاً از هم جدا هستند. به عنوان مثال، امکان تغییر کد در زمان اجرا وجود ندارد، زیرا هیچ راهی برای بازگرداندن تغییرات به مرحله build وجود ندارد. این باعث میشود محیط اجرا پایدار و قابل پیشبینی باشد.

مدیریت release
ابزارهای deployment معمولاً امکانات مدیریت release را ارائه میدهند، از جمله امکان بازگشت سریع به یک release قبلی. به عنوان مثال، ابزار Capistrano releases را در یک زیرپوشه با نام releases ذخیره میکند و release جاری یک لینک نمادین (symlink) به پوشه مربوطه دارد. دستور rollback به راحتی امکان بازگشت به نسخه قبلی را فراهم میکند.
هر release باید یک شناسه منحصربهفرد داشته باشد، مانند timestamp (2011-04-06-20:32:17) یا یک شماره افزایشی (v100). releaseها به صورت append-only هستند و پس از ایجاد نمیتوان آنها را تغییر داد؛ هر تغییر باید یک release جدید ایجاد کند.
تفاوت مراحل Build و Run
مرحله build توسط توسعهدهندگان هنگام deploy کد جدید آغاز میشود و میتواند شامل مراحل پیچیده باشد، زیرا خطاها در حضور توسعهدهنده رخ میدهند و قابل رفع هستند.
مرحله run یا اجرای اپلیکیشن میتواند به صورت خودکار اتفاق بیفتد، مانند راهاندازی مجدد سرور یا بازسازی فرآیندهای کرش کرده توسط Process Manager. بنابراین، این مرحله باید حداقل پیچیدگی را داشته باشد تا در صورت بروز مشکل در طول شب یا زمانی که توسعهدهنده در دسترس نیست، اپلیکیشن دچار خرابی نشود.
مثال عملی
تصور کنید اپلیکیشن شما تغییراتی دریافت کرده است. ابتدا توسعهدهنده مرحله build را اجرا میکند تا کد جدید بستهبندی شود و تمام وابستگیها آماده شود. سپس release ایجاد میشود که شامل build و پیکربندی است. در نهایت، فرآیند run اپلیکیشن را اجرا میکند. اگر مشکلی پیش بیاید، میتوان به release قبلی بازگشت بدون دستکاری کد جاری.