macduty

מדריך

Runner בהפעלה עצמית (self-hosted) של GitHub Actions על Mac mini

הקימו Runner בהפעלה עצמית של GitHub Actions על Mac mini ייעודי. התקינו Xcode, רשמו את ה-Runner, הריצו אותו כשירות ושמרו על בילדים מהירים ופרטיים.

⁦30⁩ דק׳ קריאה, עודכן ⁦2026-09-15⁩

ה-Runners של macOS שמתארחים אצל GitHub הם מכונות משותפות. הם נכנסים לתור בשעות עומס, מתחילים קר בכל פעם ומחייבים לפי דקה.

Runner בהפעלה עצמית על Mac mini משלכם מתחיל מיד, שומר את המטמונים שלו בין בילדים ועולה אותו דבר כל חודש.

המדריך הזה לוקח בערך שלושים דקות. תצטרכו:

  • Mac mini עם Apple silicon וגישת SSH
  • הרשאות אדמין ב-repository או בארגון ב-GitHub
  • Apple ID, כדי להוריד את Xcode

1. הכנת ה-Mac

התחברו דרך SSH ומנעו מה-Mac להיכנס למצב שינה:

ssh
sudo pmset -a sleep 0 disksleep 0 displaysleep 0

התקינו את Homebrew:

ssh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

אנחנו ממליצים על משתמש נפרד ל-Runner, כך שבילדים אף פעם לא ירוצו בחשבון האדמין שלכם:

ssh
sudo sysadminctl -addUser runner -fullName "CI Runner" -password -

התחברו כמשתמש הזה לשלבים הבאים.

2. התקנת Xcode

הדרך הפשוטה ביותר דרך SSH היא `xcodes`:

ssh
brew install xcodesorg/made/xcodes
xcodes install --latest
xcodes select

אשרו את הרישיון וסיימו את ההפעלה הראשונה:

ssh
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS

3. רישום ה-Runner

ב-GitHub, פתחו את ה-repository שלכם, ואז Settings, Actions, Runners, New self-hosted runner. בחרו macOS ו-ARM64.

GitHub מציגה את הפקודות המדויקות, עם הגרסה הנוכחית וטוקן. הן נראות כך:

ssh
mkdir actions-runner && cd actions-runner
curl -o actions-runner-osx-arm64.tar.gz -L <download URL from GitHub>
tar xzf ./actions-runner-osx-arm64.tar.gz
./config.sh --url https://github.com/<owner>/<repo> --token <token>

הטוקן פג אחרי שעה, אז בצעו את הרישום מיד. כש-`config.sh` מבקש תוויות (labels), הוסיפו כאלה שתשתמשו בהן ב-workflows, כמו `xcode` או `m4`.

4. הרצה כשירות

ssh
./svc.sh install
./svc.sh start
./svc.sh status
GitHubYour repositoryActions queues the jobMac mini, our rackactions.runner service, launchdXcode, simulators, signing keychainIts own diskDerivedData, SwiftPM and CocoaPods caches stay warmthe runner dials out, HTTPS 443jobs and logs come back on itNothing listens on the Mac.No inbound port, no address to expose.
כשהשירות רץ, כך נראה כל החיווט.

ה-Runner מתחיל עכשיו יחד עם סשן המשתמש. אם ה-jobs שלכם מריצים בדיקות UI או צריכים את צרור המפתחות של ההתחברות (login keychain), הפעילו התחברות אוטומטית למשתמש של ה-Runner בהגדרות המערכת, משתמשים וקבוצות. אפשר לעשות את זה דרך שיתוף מסך. התחברות אוטומטית אינה זמינה כש-FileVault מופעל.

5. שימוש ב-workflow

.github/workflows/ios.yml
name: iOS build

on: [push]

jobs:
  build:
    runs-on: [self-hosted, macOS, ARM64]
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: xcodebuild -scheme MyApp -destination 'generic/platform=iOS Simulator' build

דחפו commit. ה-job מופיע תחת Actions ומתחיל על ה-Mac שלכם תוך שניות.

6. תחזוקה שוטפת

  • רק repositories פרטיים. ב-repository ציבורי, pull request מ-fork יכול להריץ קוד על ה-Mac שלכם. GitHub ממליצה שלא להשתמש ב-Runners בהפעלה עצמית ב-repositories ציבוריים.
  • נקו מדי פעם. DerivedData וסימולטורים ישנים גדלים עם הזמן:
ssh
rm -rf ~/Library/Developer/Xcode/DerivedData
xcrun simctl delete unavailable
  • חתימה. שמרו את התעודות בצרור מפתחות ייעודי, או השתמשו ב-fastlane match.
  • עדכונים. ה-Runner מעדכן את עצמו כברירת מחדל. עדכנו את Xcode לפי לוח הזמנים שלכם, לא באמצע שחרור גרסה.

למה Mac mini ייעודי

  • אף אחד אחר לא עליו. בילדים מתחילים ברגע שאתם דוחפים.
  • מטמונים חמים. DerivedData, חבילות Swift ו-CocoaPods נשארים על הדיסק, כך שבילדים אינקרמנטליים מהירים הרבה יותר.
  • שבבים אמיתיים. בדקו על אותו Apple silicon שיש למשתמשים שלכם.
  • חודש אחד במחיר קבוע. בלי חיוב לפי דקה, בלי הפתעה בסוף ספרינט עמוס.

MacDuty מחזיקה בארונות שרתים באיחוד האירופי מחשבי Mac mini מ-M1 עד M6, עם macOS מותקן. הוסיפו את מפתח ה-SSH שלכם מאזור הלקוח.

במלאי היום

אלה נמצאים בארון עכשיו. בחרו אחד, ראו מה הוא כולל, ופתחו חשבון רק כשאתם מזמינים.

בודקים את הארונות

⁦Mac mini⁩ משלכם

בחרו תצורה. אם היא לא זמינה, השאירו אימייל ונכתוב לכם ביום שהיא מותקנת בארון.

שנתי: לפחות ⁦19%⁩ פחות מתשלום חודשי

  • 16GB

    זיכרון מאוחד, ⁦120 GB/s⁩

    ליבות
    10 CPU, 10 GPU
    אחסון
    זמין
    במלאי
  • הנבחר ביותר
    24GB

    זיכרון מאוחד, ⁦120 GB/s⁩

    ליבות
    10 CPU, 10 GPU
    אחסון
    זמין
    במלאי
  • 32GB

    זיכרון מאוחד, ⁦120 GB/s⁩

    ליבות
    10 CPU, 10 GPU
    אחסון
    זמין
    במלאי
Visa Mastercard העברת ⁦SEPA⁩המחירים במטבע ⁦EUR⁩, מע״מ מתווסף בתשלום כשהוא חל. מינימום חודש אחד, ואז אפשר לבטל בכל חודש.

הבא