CI/CD با GitHub Actions برای Next.js و NestJS
پایپلاین عملی: lint، تست، ساخت، پیشنمایش، و دیپلوی کنترلشده بدون صف ساعتساعته و رازهای لو رفته.
علی مرتضوی
بنیانگذار پارادایس کد
CI باید سریع سیگنال بدهد نه نمایش پیچیده
هر دقیقه تأخیر در بازخورد PR، میانبر انسانی میسازد. پایپلاین را لایهبندی کنید: چکهای ارزان اول (format/lint/typecheck)، بعد تست واحد، بعد ساخت، و E2E دود در مسیر جدا یا شرطی. اگر همه چیز سریالی و سنگین است، تیم Actions را mute میکند.
برای مونورپو، فقط پکیجهای تغییرکرده را بسازید/تست کنید. path filter و کش وابستگی هزینه را واقعی کم میکند.
کش و determinism
node_modules یا کش پکیجمنیجر را با کلید قفلفایل بازیابی کنید. ساخت Next را با کش build در چارچوب محدودیتهایتان سبک کنید، اما هرگز به کشِ آلوده وابسته نشوید—قابلیت پاکسازی و بازسازی تمیز لازم است.
نسخه Node را در `.nvmrc`/Volta قفل کنید تا «روی ماشین من سبز» تکرار نشود. همان نسخه در Actions و پروداکشن.
اسرار، محیطها و مجوزها
Secrets را در Environments گیتهاب با approval برای production نگه دارید. به workflow حداقل permission را بدهید (`contents: read`, `id-token` فقط وقتی OIDC لازم است). از چاپ env در لاگ بپرهیزید.
برای Nest و Next، متغیرها را بر اساس محیط جدا کنید: preview نباید به دیتابیس پروداکشن وصل شود—حتی خواندنی.
پیشنمایش و دیپلوی تدریجی
Preview deploy برای فرانت، بازبینی محصول را واقعی میکند. برای API، محیط staging با migrate کنترلشده بهتر از دیپلوی مستقیم روی main است. migrate را در pipeline با قفل و پشتیبان ذهنی طراحی کنید—نه بهعنوان afterthought.
دیپلوی production را به tag یا approval گره بزنید. rollback را تمرین کنید؛ سندی که اجرا نشده وجود ندارد.
کیفیت دروازهٔ ادغام
Branch protection: تست سبز، بررسی کد، و در صورت نیاز وضعیت preview. استثناءهای اضطراری را محدود و audit کنید. «Skip CI» نباید عادت شود.
برای اپهای Next، بودجه باندل یا چک Lighthouse CI روی مسیرهای کلیدی میتواند در همان دروازه بنشیند—به شرطی که پایدار باشد.
مشاهدهپذیری خودِ پایپلاین
زمان هر job را مانیتور کنید و گلوگاه را ماهانه بزنید. نوتیف شکست به کانال تیم با لینک آرتیفکت برسد. پایپلاین پوسیده مثل تست پوسیده اعتماد را میکشد.
هدف نهایی: از push تا اطمینان قابل انتشار در دقیقهها، با مسیر امن برای production—نه سرعت خام بدون ترمز.
سؤالات متداول
matrix مرورگر را در هر PR اجرا کنیم؟
معمولاً خیر. یک مرورگر برای دود PR کافی است؛ matrix را شبانه یا پیش از رلیز بگذارید.
migrate دیتابیس در CI یا در اپ؟
در مرحلهٔ دیپلوی کنترلشده با پشتیبان و قفل، نه در استارت تصادفی چند اینستنس همزمان.
self-hosted runner لازم است؟
وقتی هزینه، شبکه خصوصی یا سختافزار خاص ایجاب کند. وگرنه runners مدیریتشده سادهتر و امنتر شروع میشوند.
دانش و مقالات
نیاز به اجرای همین مفاهیم در محصولتان دارید؟
پارادایس کد از مشاوره تا پیادهسازی کامل کنار شماست.