چرا GitHub Actions کند است و چطور هر جاب را از صفر نسازیم
بیشتر زمان یک جاب کند GitHub Actions پیش از اجرای اولین تست میگذرد. راهاندازی Node، دانلود وابستگیها، ساختن ایمیج Docker: همان دقیقهها، با هر push، در حالی که کسی در تیم شما منتظر تیک سبز است. با صورتحساب دقیقهای، پول همین دقیقهها را هم میدهید.
Skipbox رانر GitHub Actions است که ماشینش را بین جابها نگه میدارد، پس هر چه یک جاب نصب کرده برای جاب بعدی هنوز روی دیسک است. یک خط را به runs-on: skipbox تغییر دهید تا جاب روی ماشین اختصاصی شما با قیمت ثابت ماهانه $۳۹ و دقیقههای نامحدود اجرا شود.
هر جاب از یک ماشین مجازی خالی شروع میشود
رانر میزبانیشده GitHub برای هر جاب یک ماشین مجازی تازه است. هیچ چیزی که جاب قبلی دانلود یا بیلد کرده روی آن نیست، پس هر جاب همان وضعیت را دوباره میسازد:
| گام | رانر میزبانیشده GitHub | Skipbox |
|---|---|---|
| راهاندازی Node، Python، Java | toolchain را دانلود میکند | آن را در کش ابزارهای جاب قبلی پیدا میکند |
| نصب وابستگیها | آرشیو کش را دانلود و باز میکند؛ اگر کش نباشد، همه را از registry دانلود میکند | کش package manager را از دیسک میخواند |
| ساختن ایمیج Docker | بدون هیچ لایهای شروع میکند و همه گامها را دوباره میسازد | لایههای بیلد قبلی را دوباره استفاده میکند |
| اجرای تستها | 2 CPU روی ubuntu-latest یک مخزن خصوصی | از ۴ vCPU به بالا |
سه ردیف اول هیچ چیز تازهای تولید نمیکنند. فقط ماشین را به همان جایی برمیگردانند که دیروز بود.
کش GitHub این را نرمتر میکند، بیآنکه تغییرش دهد. برای هر مخزن ۱۰ GB جا دارد، ورودیهایی را که ۷ روز هیچ جابی نخوانده حذف میکند و یک شاخه feature تازه نمیتواند کش شاخه feature دیگری را بخواند. حتی وقتی کش پیدا شود، هر اجرا یک آرشیو را دانلود و باز میکند.
این انتظار چقدر برایتان تمام میشود
فرض کنید راهاندازی 3 دقیقه از هر جاب را میگیرد و تیم شما روزی 100 جاب اجرا میکند. یعنی روزی 300 دقیقه از زمان رانر صرف برگرداندن ماشین به حالت قبل میشود و هر pull request سهم خودش را منتظر میماند. بازبینیها دیرتر شروع میشوند، mergeها دیرتر انجام میشوند و مهندسها در این فاصله سراغ کار دیگری میروند.
با صورتحساب دقیقهای، این دقیقهها در فاکتور هستند. یک رانر 4 vCPU، بر اساس دقیقههای ماهانه:
| دقیقه در ماه (4 vCPU) | GitHub | Skipbox S | صرفهجویی ماهانه شما |
|---|---|---|---|
| 10,000 | $۱۰۲ | $۳۹ | $۶۳ |
| 20,000 | $۲۲۲ | $۳۹ | $۱۸۳ |
| 30,000 | $۳۴۲ | $۳۹ | $۳۰۳ |
اعداد GitHub صورتحساب بعد از کسر سهمیه شامل طرح GitHub Team هستند. دقیقههای خودتان را در محاسبهگر صفحه اصلی وارد کنید؛ ورود لازم نیست.
و تعداد اجراها فقط بالا میرود:
- ایجنتهای کدنویسی هوش مصنوعی. هر push یک ایجنت، CI را راه میاندازد. انتظار و صورتحساب با pushها بزرگ میشوند، نه با تعداد نفرات.
- تستهای بیشتر. یک مجموعه تست E2E یا یک matrix راهاندازی را در هر جابی که اضافه میکند تکرار میکند.
- بودجهها. صورتحساب را با بودجه GitHub مهار کنید تا جابها وسط ماه دیگر شروع نشوند و mergeها متوقف شوند.
سریع کردن آن به دست خودتان یک پروژه است
ماندن روی رانرهای میزبانیشده GitHub و سریع کردنشان یعنی پذیرفتن کارهایی مثل اینها:
- ساختن کلید کش از hash فایلهای lock و تنظیم
restore-keysتا وقتی کش پیدا شود - اضافه کردن buildx و صادر کردن کش Docker با
cache-to، داخل همان ۱۰ GB - تقسیم تستها به shardها، که در آن هر shard راهاندازی را تکرار میکند و دقیقههای صورتحساب بالا میرود
- یا اداره رانر خودمیزبان (self-hosted) خودتان: آماده کردن ماشین، بهروزرسانی سیستمعامل، پاکسازی بین جابها و تعمیر آن وقتی از کار میافتد
هر کدام راهی برای دور زدن ماشینی است که همه چیز را فراموش میکند. Skipbox ماشین را نگه میدارد، پس به هیچکدام نیازی نیست.
روی Skipbox چه چیزی تغییر میکند
راهاندازی روی دیسک میماند. جابهای شما روی ماشین اختصاصی حسابتان اجرا میشوند و این ماشین بین جابها میماند. ایمیجها، لایهها و کش بیلد Docker؛ کش پکیجهای npm، pip، Gradle و بیشتر؛ ابزارهایی که setup-node و اکشنهای مشابه نصب میکنند. دستکم ۷ برابر فضای کش GitHub، بدون انقضا بعد از ۷ روز و بدون قاعده شاخه.
ماشینهای بزرگتر با قیمت ثابت. کامپایلرها و اجراکنندههای تست برای هر هسته یک worker راه میاندازند، پس هستههای بیشتر گامهایی را که به CPU وابستهاند کوتاهتر میکنند.
| طرح | ماشین | قیمت |
|---|---|---|
| S | ۴ vCPU · ۱۶ GB | ماهانه $۳۹ |
| M | ۸ vCPU · ۱۶ GB | ماهانه $۷۹ |
| L | ۱۶ vCPU · ۳۲ GB | ماهانه $۱۴۹ |
دقیقهها در همه طرحها نامحدودند. جابهای Skipbox هیچ دقیقهای از GitHub مصرف نمیکنند، پس بودجه GitHub هرگز متوقفشان نمیکند.
ماشینی برای نگهداری ندارید. Skipbox ماشین را آماده میکند، سیستمعامل و ابزارها را بهروز میکند، بعد از هر جاب پاکسازی میکند، بررسی سلامت اجرا میکند و ماشینی را که از آن رد نشود از نو میسازد.
انتقال فقط یک خط است
jobs:
build:
runs-on: skipbox # was ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
- با GitHub وارد Skipbox شوید.
- اپ GitHub مربوط به Skipbox را نصب کنید و مخزنها را انتخاب کنید.
runs-onرا تغییر دهید و push کنید.
هر چه جاب اول نصب کند، برای جاب دوم روی دیسک است.
امنیت
- ماشین فقط مال حساب شماست. جابهای هیچ شرکت دیگری روی آن اجرا نمیشوند.
- بعد از هر جاب، اعتبارنامهها، پردازهها و کانتینرهای رانر پاک میشوند. از 13 نوامبر 2026، checkout شما و خروجی بیلد آن (
target/ در Cargo) برای جابهای بعدی روی ماشین اختصاصی خودتان میمانند؛ «ماشین تازه برای هر جاب» به هر جاب یک ماشین تازه میدهد. - کد افرادی که دسترسی نوشتن ندارند (مثل pull requestها از forkها) روی یک ماشین تازه و یکبارمصرف اجرا میشود.
جزئیات در جابها چطور از هم جدا نگه داشته میشوند آمده است.
روی کندترین جابتان امتحانش کنید
دوره آزمایشی برای ۷ روز یا ۳٬۰۰۰ دقیقه جاب رایگان است، هر کدام زودتر برسد، و کارت نمیخواهد. کندترین جابتان را به runs-on: skipbox ببرید، دو بار پشت سر هم اجرایش کنید و زمان گامها را کنار زمانهای GitHub بگذارید.
پرسشهای متداول
چرا GitHub Actions اینقدر کند است؟
هر جاب روی رانر میزبانیشده GitHub روی یک ماشین مجازی تازه شروع میشود که هیچ چیزی از اجرای قبلی ندارد، پس پیش از شروع تستها ابزارهایش را دانلود میکند، وابستگیها را دوباره نصب میکند و ایمیجهای Docker را دوباره میسازد. Skipbox جابهای شما را روی ماشین اختصاصی حسابتان اجرا میکند و این وضعیت را روی دیسک آن نگه میدارد، پس جاب بعدی از همان جایی شروع میشود که جاب قبلی تمام کرد.
actions/cache را اضافه کردم. چرا ورکفلوی من هنوز کند است؟
حتی وقتی کش پیدا شود، هر جاب یک آرشیو را دانلود و باز میکند، چون ماشین مجازی هر بار تازه است. کش GitHub هم برای هر مخزن ۱۰ GB جا دارد، ورودیهایی را که ۷ روز استفاده نشدهاند حذف میکند و از یک شاخه همسطح خوانده نمیشود. روی Skipbox کش پکیجها و لایههای Docker از قبل روی دیسک ماشین هستند، بدون کلیدی برای مدیریت.
چطور بیلدهای Docker را در GitHub Actions سریعتر کنم؟
لایههای بیلد قبلی را به بیلد بدهید. روی رانرهای میزبانیشده GitHub یعنی کش را با buildx صادر کنید و در هر اجرا وارد کنید، داخل همان سقف ۱۰ GB. روی Skipbox ایمیجها و کش بیلد Docker بین جابها روی ماشین میمانند، پس docker build خودش لایهها را دوباره استفاده میکند.
برای استفاده از Skipbox باید ورکفلوهایم را بازنویسی کنم؟
نه. برای جابهای Linux، runs-on را به skipbox تغییر دهید. ماشین روی Ubuntu 24.04 با Docker، Node.js و Python است و گامها و اکشنهای شما همانطور که هستند اجرا میشوند.
میتوانم آن را رایگان روی جاب کند خودم امتحان کنم؟
بله. دوره آزمایشی ۷ روز یا ۳٬۰۰۰ دقیقه جاب است، هر کدام زودتر برسد، و کارت نمیخواهد. کندترین جابتان را به runs-on: skipbox ببرید، دو بار پشت سر هم اجرایش کنید و زمان گامها را با GitHub مقایسه کنید.
بهروزرسانی: ۲۰ آبان ۱۴۰۵