میزبانی اجراکننده CI
پاسخ
اجرای خودکار CI Runnerها، خطوط لوله ساخت شما را بر روی سرورهایی که در کنترل شما هستند اجرا میکند، نه روی استخر مشترک ارائهدهنده. یک طرح Incognito VPS VECTOR با هزینه ۱۴ دلار در ماه معمولاً از یک runner میزبانیشده بهتر عمل میکند و در عین حال هزینههای دقیقهای و انتظار در صف را کاملاً حذف میکند.
| سناریو | حداقل |
|---|---|
| پروژه کوچک | 2 vCPU, 4 GB RAM |
| Monorepo معمولی | 6 vCPU, 16 GB RAM |
| کامپایل سنگین (Rust, C++) | 16 vCPU, 64 GB RAM |
| کش لایه Docker | بیش از 140 GB NVMe |
حسابوکتاب معمولاً تعیینکننده است
دقیقههای CI میزبانیشده تا وقتی آنها را نشمارید ارزان به نظر میرسند. تیمی که ماهانه چند صد build را روی runnerهای میزبانیشده ۲ هستهای اجرا میکند، معمولاً بیشتر از هزینه یک VPS اختصاصی ۶ هستهای خرج میکند و در عوض buildهای کندتری هم میگیرد، چون runnerهای میزبانیشده ماشینهای ضعیفی هستند که تحت رقابت قرار دارند.
صرفهجویی دیگر به جای پول، زمان است. یک runner خودمیزبان صف ندارد — کار شما با push شروع میشود. در یک استخر میزبانیشده شلوغ، انتظار چند دقیقهای برای runner عادی است و این تأخیر روی هر توسعهدهنده و هر push تأثیر میگذارد.
کشکردن جایی است که شتاب واقعی نهفته است
NVMe محلی پایدار بیشتر از تعداد هسته خام، اقتصاد CI را تغییر میدهد. لایههای Docker، رجیستری Cargo، node_modules، کشهای Gradle و ccache بین اجراها روی یک runner خودمیزبان باقی میمانند، در حالی که یک runner میزبانیشده تمیز شروع میکند و همه چیز را دوباره دانلود میکند.
برای یک پروژه بزرگ Rust یا C++، این اغلب کاهش پنج تا ده برابری در زمان ساخت واقعی است و کاملاً رایگان است.
ایزولهسازی، چون runnerها کد دلخواه اجرا میکنند
یک runner خودمیزبان هر چیزی را که در خط لوله است اجرا میکند، که برای یک مخزن عمومی یعنی هر چیزی که یک مشارکتکننده در pull request قرار دهد. هرگز یک runner خودمیزبان را بدون اجرای ایزوله و موقت به یک مخزن عمومی متصل نکنید.
از runnerهای موقت در کانتینرها یا VMهای کوتاهعمر استفاده کنید، به runner هیچ اعتبارنامهای که به آن نیاز ندارد ندهید و آن را روی سروری بگذارید که چیز دیگری روی آن نیست. یک ماشین ۱۴ دلاری در هر پروژه بیمه ارزانی در برابر رسیدن یک خط لوله سازشیافته به بقیه زیرساخت شماست.
سوالات متداول
01 کدام طرح برای CI runner مناسب است؟
VECTOR (4 vCPU, 8 GB) برای یک پروژه معمولی؛ BASTION (6 vCPU, 16 GB) برای monorepo یا کامپایل سنگین. کش NVMe پایدار برای اکثر خطوط لوله مهمتر از تعداد هسته است.
02 آیا با GitHub Actions کار میکند؟
بله. ماشین را به عنوان runner خودمیزبان ثبت کنید و با runs-on آن را هدف بگیرید. GitLab، Forgejo، Woodpecker و Drone به همین روش کار میکنند.
03 آیا runner خودمیزبان برای مخازن عمومی امن است؟
بدون ایزولهسازی موقت نه. یک pull request میتواند کد دلخواه روی runner اجرا کند. از کانتینرهای موقت یا VMهای یکبارمصرف استفاده کنید و هرگز اعتبارنامهای را که خط لوله به آن نیاز ندارد اعطا نکنید.
04 چقدر سریعتر است؟
معمولاً دو تا چهار برابر در محاسبات خام، و پنج تا ده برابر در خطوط لوله سنگین کش، چون لایههای Docker و کشهای وابستگی بین اجراها باقی میمانند و دوباره دانلود نمیشوند.
مرتبط