GitHub Actions धीमा क्यों है, और हर जॉब का सेटअप कैसे बचाएं
धीमी GitHub Actions जॉब का ज़्यादातर समय पहला टेस्ट चलने से पहले ही निकल जाता है। Node सेट अप करना, डिपेंडेंसी डाउनलोड करना, Docker इमेज बनाना: हर push पर वही मिनट, जबकि आपकी टीम का कोई हरे चेक का इंतज़ार कर रहा होता है। प्रति मिनट बिलिंग पर आप उन मिनटों के पैसे भी चुकाते हैं।
Skipbox ऐसा GitHub Actions रनर है जो जॉब के बीच अपनी मशीन बनाए रखता है, इसलिए एक जॉब ने जो इंस्टॉल किया वह अगली जॉब के लिए डिस्क पर रहता है। एक लाइन बदलें, runs-on: skipbox, और जॉब आपकी अपनी मशीन पर चलती है, हर महीने तय $39 में, अनलिमिटेड मिनट के साथ।
हर जॉब खाली VM से शुरू होती है
GitHub-होस्टेड रनर हर जॉब के लिए एक नई वर्चुअल मशीन है। पिछली जॉब ने जो डाउनलोड किया या बनाया, उसमें से कुछ भी उस पर नहीं होता, इसलिए हर जॉब वही सब फिर से बनाती है:
| स्टेप | GitHub-होस्टेड रनर | Skipbox |
|---|---|---|
| Node, Python, Java सेट अप करना | टूलचेन डाउनलोड करता है | पिछली जॉब के टूल कैश में पा लेता है |
| डिपेंडेंसी इंस्टॉल करना | कैश आर्काइव डाउनलोड और अनपैक करता है; कैश न मिले तो रजिस्ट्री से पूरा डाउनलोड | पैकेज मैनेजर का कैश डिस्क से पढ़ता है |
| Docker इमेज बनाना | बिना किसी लेयर के शुरू करता है और हर स्टेप फिर से बनाता है | पिछले बिल्ड की लेयर दोबारा इस्तेमाल करता है |
| टेस्ट चलाना | प्राइवेट रिपॉज़िटरी के ubuntu-latest पर 2 CPU | 4 vCPU और ज़्यादा |
पहली तीन पंक्तियां कुछ नया नहीं बनातीं। वे बस मशीन को वहीं ले आती हैं जहां वह कल थी।
GitHub का कैश इसे थोड़ा आसान करता है, बदलता नहीं। वह हर रिपॉज़िटरी के लिए 10 GB रखता है, जिन एंट्री को 7 दिन तक किसी जॉब ने नहीं पढ़ा उन्हें डिलीट कर देता है, और एक नई फ़ीचर ब्रांच किसी दूसरी फ़ीचर ब्रांच का कैश नहीं पढ़ सकती। कैश हिट होने पर भी हर रन में एक आर्काइव डाउनलोड और अनपैक होता है।
इंतज़ार की आपको क्या कीमत पड़ती है
मान लीजिए हर जॉब में सेटअप 3 मिनट लेता है और आपकी टीम हर दिन 100 जॉब चलाती है। यानी हर दिन रनर के 300 मिनट मशीन को वापस पहले जैसा करने में जाते हैं, और हर पुल रिक्वेस्ट अपने हिस्से का इंतज़ार करती है। रिव्यू देर से शुरू होते हैं, मर्ज देर से होते हैं, और इंतज़ार में इंजीनियर किसी और काम पर चले जाते हैं।
प्रति मिनट बिलिंग पर वे मिनट इनवॉइस में आते हैं। 4 vCPU रनर, हर महीने के मिनटों के हिसाब से:
| हर महीने के मिनट (4 vCPU) | GitHub | Skipbox S | आपकी मासिक बचत |
|---|---|---|---|
| 10,000 | $102 | $39 | $63 |
| 20,000 | $222 | $39 | $183 |
| 30,000 | $342 | $39 | $303 |
GitHub के आंकड़े GitHub Team के शामिल इस्तेमाल के बाद का बिल हैं। अपने मिनट होम पेज के कैलकुलेटर में डालें; साइन इन की ज़रूरत नहीं।
और रन की संख्या सिर्फ़ बढ़ती है:
- AI कोडिंग एजेंट। एजेंट का हर push CI शुरू करता है। इंतज़ार और बिल लोगों के नहीं, push के हिसाब से बढ़ते हैं।
- ज़्यादा टेस्ट। एक E2E सुइट या मैट्रिक्स अपनी जोड़ी हर जॉब में सेटअप दोहराता है।
- बजट। GitHub बजट से बिल पर सीमा लगाएं, और महीने के बीच में जॉब शुरू होनी बंद हो जाती हैं, जिससे मर्ज रुक जाते हैं।
इसे खुद तेज़ करना एक पूरा प्रोजेक्ट है
GitHub-होस्टेड रनर रखकर उन्हें तेज़ बनाने का मतलब है इस तरह का काम अपने ऊपर लेना:
- lockfile के हैश पर कैश key बनाना और
restore-keysको तब तक ट्यून करना जब तक कैश हिट न होने लगे - buildx जोड़ना और
cache-toसे Docker का कैश एक्सपोर्ट करना, उसी 10 GB में - टेस्ट को शार्ड करना, जहां हर शार्ड सेटअप दोहराता है और बिल वाले मिनट बढ़ते हैं
- या अपना सेल्फ़-होस्टेड रनर चलाना: मशीन तैयार करना, OS अपडेट, जॉब के बीच सफ़ाई, और बंद होने पर उसे ठीक करना
हर उपाय ऐसी मशीन के इर्द-गिर्द काम करता है जो सब कुछ भूल जाती है। Skipbox मशीन बनाए रखता है, इसलिए इनमें से किसी की ज़रूरत नहीं पड़ती।
Skipbox पर क्या बदलता है
सेटअप डिस्क पर रहता है। आपकी जॉब आपके अकाउंट की अपनी मशीन पर चलती हैं, और वह जॉब के बीच बनी रहती है। Docker इमेज, लेयर और बिल्ड कैश; npm, pip, Gradle वगैरह के पैकेज कैश; setup-node जैसे ऐक्शन से इंस्टॉल होने वाले टूल। GitHub के कैश स्पेस का कम से कम 7×, 7 दिन बाद कोई एक्सपायरी नहीं और ब्रांच का कोई नियम नहीं।
तय कीमत पर बड़ी मशीनें। कंपाइलर और टेस्ट रनर हर कोर पर एक वर्कर शुरू करते हैं, इसलिए ज़्यादा कोर CPU पर टिके स्टेप छोटे कर देते हैं।
| प्लान | मशीन | कीमत |
|---|---|---|
| S | 4 vCPU · 16 GB | हर महीने $39 |
| M | 8 vCPU · 16 GB | हर महीने $79 |
| L | 16 vCPU · 32 GB | हर महीने $149 |
हर प्लान पर मिनट अनलिमिटेड हैं। Skipbox की जॉब कोई GitHub मिनट इस्तेमाल नहीं करतीं, इसलिए GitHub बजट उन्हें कभी नहीं रोकता।
देखभाल के लिए कोई मशीन नहीं। Skipbox मशीन तैयार करता है, OS और टूल अपडेट करता है, हर जॉब के बाद सफ़ाई करता है, हेल्थ चेक चलाता है, और जो मशीन उसमें फ़ेल हो उसे फिर से बनाता है।
आना बस एक लाइन का काम है
jobs:
build:
runs-on: skipbox # was ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
- GitHub से Skipbox में साइन इन करें।
- Skipbox GitHub App इंस्टॉल करें और रिपॉज़िटरी चुनें।
runs-onबदलें और push करें।
पहली जॉब जो इंस्टॉल करती है, वह दूसरी जॉब के लिए डिस्क पर रहता है।
सुरक्षा
- मशीन सिर्फ़ आपके अकाउंट की है। किसी दूसरी कंपनी की जॉब उस पर नहीं चलतीं।
- हर जॉब के बाद रनर के क्रेडेंशियल, प्रोसेस और कंटेनर मिटा दिए जाते हैं। 13 नवंबर 2026 से आपका चेकआउट और उसका बिल्ड आउटपुट (Cargo का
target/) आपकी अगली जॉब के लिए आपकी अपनी मशीन पर बने रहते हैं; “हर जॉब नई VM पर” हर जॉब को नई मशीन देता है। - बिना write एक्सेस वाले लोगों का कोड (जैसे फ़ोर्क से आई पुल रिक्वेस्ट) एक नई, इस्तेमाल के बाद हटाई जाने वाली मशीन पर चलता है।
पूरी जानकारी जॉब को अलग कैसे रखा जाता है में है।
अपनी सबसे धीमी जॉब पर आज़माएं
ट्रायल 7 दिन या 3,000 जॉब-मिनट तक मुफ़्त है, जो भी पहले पूरा हो, और कार्ड की ज़रूरत नहीं। अपनी सबसे धीमी जॉब को runs-on: skipbox पर ले जाएं, उसे लगातार दो बार चलाएं, और स्टेप के समय GitHub के समय के साथ रखकर देखें।
अक्सर पूछे जाने वाले सवाल
GitHub Actions इतना धीमा क्यों है?
GitHub-होस्टेड रनर पर हर जॉब एक नई VM पर शुरू होती है जिसमें पिछले रन का कुछ नहीं होता, इसलिए आपके टेस्ट शुरू होने से पहले वह अपने टूल डाउनलोड करती है, डिपेंडेंसी फिर से इंस्टॉल करती है और Docker इमेज फिर से बनाती है। Skipbox आपकी जॉब आपके अकाउंट की अपनी मशीन पर चलाता है और वह सब उसकी डिस्क पर रखता है, इसलिए अगली जॉब वहीं से शुरू होती है जहां पिछली रुकी थी।
मैंने actions/cache जोड़ा। फिर भी मेरा वर्कफ़्लो धीमा क्यों है?
कैश हिट होने पर भी हर जॉब में एक आर्काइव डाउनलोड और अनपैक होता है, क्योंकि VM हर बार नई होती है। और GitHub का कैश हर रिपॉज़िटरी के लिए 10 GB रखता है, 7 दिन से इस्तेमाल न हुई एंट्री हटा देता है, और उसे किसी दूसरी समानांतर ब्रांच से पढ़ा नहीं जा सकता। Skipbox पर पैकेज कैश और Docker लेयर पहले से मशीन की डिस्क पर होते हैं, और कोई key संभालनी नहीं पड़ती।
GitHub Actions में Docker बिल्ड तेज़ कैसे करें?
बिल्ड को पिछले बिल्ड की लेयर दें। GitHub-होस्टेड रनर पर इसका मतलब है buildx से कैश एक्सपोर्ट करना और हर रन में उसे इंपोर्ट करना, उसी 10 GB की सीमा में। Skipbox पर Docker की इमेज और बिल्ड कैश जॉब के बीच मशीन पर बने रहते हैं, इसलिए docker build अपने आप लेयर दोबारा इस्तेमाल करता है।
क्या Skipbox इस्तेमाल करने के लिए मुझे अपने वर्कफ़्लो फिर से लिखने होंगे?
नहीं। Linux जॉब के लिए runs-on को skipbox में बदलें। मशीन पर Ubuntu 24.04 चलता है, Docker, Node.js और Python के साथ, और आपके स्टेप और ऐक्शन जैसे हैं वैसे ही चलते हैं।
क्या मैं अपनी धीमी जॉब पर इसे मुफ़्त में आज़मा सकता हूं?
हां। ट्रायल 7 दिन या 3,000 जॉब-मिनट का है, जो भी पहले पूरा हो, और कार्ड की ज़रूरत नहीं। अपनी सबसे धीमी जॉब को runs-on: skipbox पर ले जाएं, उसे लगातार दो बार चलाएं, और स्टेप के समय की तुलना GitHub से करें।
11 नवंबर 2026 को अपडेट किया गया