GitHub पर नहीं हैं? यही Mac हर बड़े CI के साथ चलता है।
हम आपके लिए GitHub Actions सेट करते हैं और उसे सीधे सपोर्ट करते हैं। पर आपकी मशीन SSH एक्सेस वाला एक सामान्य Mac mini है। GitLab, Bitbucket, Buildkite, CircleCI, Azure Pipelines और Jenkins, सभी के agent macOS पर चलते हैं। जो आप इस्तेमाल करते हैं, उसे इंस्टॉल करें। बाकी मशीन बिल्कुल वैसी ही रहती है: pinned Xcode, गरम कैश, simulators के लिए चालू रखा गया login सेशन, और हर बॉक्स पर एक ही ग्राहक।
शुरू करने से पहले
- +ऊपर का हर agent खुद आपके CI से कनेक्ट करता है। किसी inbound port की ज़रूरत नहीं। इसलिए मशीन public internet से वैसे ही दूर रहती है, जैसे आज है।
- +Agent को runner यूज़र से चलाएँ। GitHub Actions भी यही खाता इस्तेमाल करता है। Xcode, simulators और कैश इसी के हैं।
- +इसे चालू रखें। इसे service की तरह शुरू करें (brew services, svc.sh), या tmux सेशन के अंदर। runner यूज़र अपने आप लॉग इन होता है, इसलिए simulators और UI tests के लिए GUI सेशन मौजूद रहता है।
- +Xcode इंस्टॉल और pinned है। अपने job में xcode-select या DEVELOPER_DIR से वर्ज़न चुनें, जैसे GitHub पर करते हैं।
- +अगर GitHub runner इस्तेमाल नहीं करेंगे, तो उसे हटा दें, या खाली छोड़ दें। जब कोई job नहीं आता, तो उसकी कोई लागत नहीं।
पहले Tailscale से कनेक्ट करें और runner के रूप में SSH करें, बिल्कुल सेटअप डॉक्स के स्टेप 1 की तरह।
GitLab
GitLab के hosted macOS runner, Linux रेट से कई गुना महँगे हैं। GitLab Runner वाला डेडिकेटेड Mac उसी चीज़ का फ़्लैट कीमत वाला रूप है।
- 01
Official binary इंस्टॉल करें। GitLab, Homebrew formula को maintain नहीं करता और इसी की सलाह देता है।
sudo mkdir -p /usr/local/bin sudo curl --output /usr/local/bin/gitlab-runner \ "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-arm64" sudo chmod +x /usr/local/bin/gitlab-runner
- 02
अपने project या group में CI/CD settings खोलें। एक runner बनाएँ और उसका token कॉपी करें। फिर Mac पर रजिस्टर करें।
gitlab-runner register --url https://gitlab.com --token <runner-token> --executor shell
- 03
इसे runner यूज़र के लिए service की तरह इंस्टॉल करके शुरू करें। यह desktop सेशन (screen sharing) के terminal से करें, SSH से नहीं।
cd ~ gitlab-runner install gitlab-runner start
- 04
Runner को tag दें (जैसे macos, xcode), और वही tag अपने .gitlab-ci.yml jobs में इस्तेमाल करें।
Bitbucket Pipelines
Atlassian कोई hosted macOS runner नहीं देता। Bitbucket पर iOS बिल्ड करने वाले हर किसी को Mac self-host करना पड़ता है। यह ठीक वही है।
- 01
Runner को Java चाहिए। इसे Homebrew से इंस्टॉल करें।
brew install openjdk@17
- 02
Bitbucket में Repository settings (या Workspace settings) खोलें, फिर Runners। macOS टाइप का runner जोड़ें। Bitbucket एक start कमांड दिखाता है, जिसमें आपके account, repository और runner ids और एक OAuth client होते हैं। इसे जैसा दिखे वैसा ही कॉपी करें।
- 03
वह कमांड Mac पर tmux सेशन के अंदर चलाएँ। या उसे LaunchAgent में रखें, ताकि वह login पर शुरू हो।
tmux new -s bitbucket # paste the start command Bitbucket gave you
- 04
bitbucket-pipelines.yml में step को runs-on: [self.hosted, macos] दें, और आपने जो label चुना हो वह भी।
Buildkite
Buildkite डिज़ाइन से ही अपना compute खुद लाने वाला सिस्टम है। Buildkite की iOS pipeline को डेडिकेटेड Mac ही चाहिए।
- 01
Buildkite के Homebrew tap से agent इंस्टॉल करें। नया Homebrew पहले third-party tap पर भरोसा करने को कहता है।
brew tap buildkite/buildkite brew trust buildkite/buildkite brew install buildkite/buildkite/buildkite-agent
- 02
अपना agent token config फ़ाइल में डालें, फिर इसे service की तरह शुरू करें।
sed -i '' 's/xxx/<your-agent-token>/' "$(brew --prefix)/etc/buildkite-agent/buildkite-agent.cfg" brew services start buildkite/buildkite/buildkite-agent@3
- 03
उसी config फ़ाइल में queue या tag के नियम जोड़ें, और अपने pipeline steps से उन्हें target करें।
CircleCI
CircleCI का hosted macOS भी GitHub की तरह मीटर पर चलता है। उनका self-hosted machine runner macOS पर चलता है और outbound कनेक्ट करता है।
- 01
CircleCI में self-hosted runners के लिए एक resource class बनाएँ और runner token बनाएँ।
- 02
CircleCI के Homebrew tap से machine runner इंस्टॉल करें। फिर उनके UI में macOS के लिए दिखे configuration स्टेप पूरे करें। ये runner config फ़ाइल में token और resource class सेट करते हैं।
- 03
Runner को service की तरह शुरू करें, और अपने config.yml jobs से resource class को target करें।
CircleCI अपना runner इंस्टॉल तरीका अक्सर बदलता है। macOS के लिए उनके self-hosted runner installation पेज की सही कमांड ही चलाएँ।
CircleCI की पूरी गाइड पढ़ेंAzure Pipelines
Microsoft के hosted macOS agents में parallelism सीमित है। self-hosted macOS agent एक पूरी तरह सपोर्टेड विकल्प है।
- 01
Azure DevOps में Organization settings, फिर Agent pools खोलें और एक agent जोड़ें। वहाँ दिया गया macOS agent package डाउनलोड करें।
- 02
इसे runner के home में unpack करें। फिर ऐसे personal access token से configure करें, जिसके पास Agent Pools का read और manage scope हो।
mkdir ~/azagent && cd ~/azagent && tar zxvf ~/Downloads/vsts-agent-osx-arm64-*.tar.gz ./config.sh
- 03
इसे service की तरह इंस्टॉल करके शुरू करें।
./svc.sh install ./svc.sh start
- 04
अपनी pipeline को pool पर भेजें: pool: { name: <your-pool> }।
Jenkins
Jenkins इस्तेमाल करने वाली टीमें पहले से अपने agents चलाती हैं। inbound agent इस्तेमाल करें, ताकि Mac खुद आपके controller से कनेक्ट करे और उसे कोई inbound port न चाहिए।
- 01
Java 21 इंस्टॉल करें। Jenkins LTS के मौजूदा रिलीज़ को agents पर भी Java 21 या 25 चाहिए।
brew install openjdk@21
- 02
Jenkins में नया node जोड़ें, launch method Launch agent by connecting it to the controller रखें। Jenkins agent.jar का डाउनलोड और आपके secret के साथ सही run कमांड दिखाता है।
- 03
वह कमांड Mac पर tmux के अंदर चलाएँ, या LaunchAgent की तरह, ताकि reboot के बाद वह फिर कनेक्ट हो जाए।
tmux new -s jenkins curl -sO https://<your-jenkins>/jnlpJars/agent.jar # then the java -jar agent.jar ... command Jenkins gave you
- 04
Node को macos label दें, और संबंधित jobs को उसी label तक सीमित करें।
वही मशीन, वही कीमत।
साइनअप फ़ॉर्म पर अपना CI सिस्टम चुनें। URL देना ज़रूरी नहीं है। बस fraud check के लिए इसका होना बेहतर रहता है।