Dokumentasi

Tidak memakai GitHub? Mac yang sama bekerja dengan semua CI besar.

Kami menyiapkan GitHub Actions untuk Anda dan mendukungnya secara langsung. Namun mesin Anda adalah Mac mini biasa dengan akses SSH. GitLab, Bitbucket, Buildkite, CircleCI, Azure Pipelines, dan Jenkins semuanya punya agen yang berjalan di macOS. Pasang yang Anda pakai. Bagian lain dari mesin tetap sama: Xcode yang dikunci versinya, cache yang hangat, sesi login yang terus aktif untuk simulator, dan satu pelanggan per mesin.

Sebelum memulai

  • +Setiap agen di atas terhubung keluar ke CI Anda. Tidak ada yang butuh port masuk, jadi mesin tetap tidak terbuka ke internet publik, persis seperti sekarang.
  • +Jalankan agen sebagai pengguna runner, akun yang sama dengan yang dipakai GitHub Actions. Akun itu yang memiliki Xcode, simulator, dan cache.
  • +Jaga agar tetap berjalan. Jalankan sebagai service (brew services, svc.sh) atau di dalam sesi tmux. Pengguna runner login otomatis, jadi ada sesi GUI untuk simulator dan UI test.
  • +Xcode sudah terpasang dan dikunci versinya. Pilih versi di dalam job Anda dengan xcode-select atau DEVELOPER_DIR, sama seperti di GitHub.
  • +Hapus runner GitHub jika tidak akan Anda pakai, atau biarkan menganggur. Runner itu tidak memakan biaya saat tidak ada job.

Pertama, hubungkan lewat Tailscale dan SSH sebagai runner, persis seperti di dokumentasi setup, langkah 1.

GitLab

Runner macOS yang di-host GitLab ditagih beberapa kali lipat tarif Linux. Mac khusus dengan GitLab Runner adalah versi harga tetap dari hal yang sama.

  1. 01

    Pasang binary resmi. GitLab tidak mengelola formula Homebrew dan menyarankan cara ini.

    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
  2. 02

    Di proyek atau grup Anda, buka pengaturan CI/CD, buat runner, dan salin token-nya. Lalu daftarkan di Mac.

    gitlab-runner register --url https://gitlab.com --token <runner-token> --executor shell
  3. 03

    Pasang dan jalankan sebagai service untuk pengguna runner. Lakukan dari terminal di sesi desktop (screen sharing), bukan lewat SSH.

    cd ~
    gitlab-runner install
    gitlab-runner start
  4. 04

    Beri tag pada runner (misalnya macos, xcode) dan pakai tag itu di job .gitlab-ci.yml Anda.

Baca panduan lengkap GitLab

Bitbucket Pipelines

Atlassian sama sekali tidak menyediakan runner macOS yang di-host. Siapa pun yang build iOS di Bitbucket harus self-host Mac, dan inilah tepatnya layanan itu.

  1. 01

    Runner butuh Java. Pasang dengan Homebrew.

    brew install openjdk@17
  2. 02

    Di Bitbucket, buka Repository settings (atau Workspace settings), lalu Runners, dan tambahkan runner bertipe macOS. Bitbucket menampilkan perintah start berisi ID akun, repositori, dan runner Anda, serta OAuth client. Salin persis seperti yang ditampilkan.

  3. 03

    Jalankan perintah itu di Mac di dalam sesi tmux, atau bungkus dalam LaunchAgent agar berjalan saat login.

    tmux new -s bitbucket
    # paste the start command Bitbucket gave you
  4. 04

    Di bitbucket-pipelines.yml, beri step tersebut runs-on: [self.hosted, macos] ditambah label apa pun yang Anda pilih.

Buildkite

Buildkite memang dirancang agar Anda membawa compute sendiri. Mac khusus adalah yang diharapkan oleh pipeline iOS di Buildkite.

  1. 01

    Pasang agen dari Homebrew tap milik Buildkite. Homebrew versi terbaru meminta Anda memercayai tap pihak ketiga terlebih dahulu.

    brew tap buildkite/buildkite
    brew trust buildkite/buildkite
    brew install buildkite/buildkite/buildkite-agent
  2. 02

    Masukkan token agen Anda ke file konfigurasi, lalu jalankan sebagai service.

    sed -i '' 's/xxx/<your-agent-token>/' "$(brew --prefix)/etc/buildkite-agent/buildkite-agent.cfg"
    brew services start buildkite/buildkite/buildkite-agent@3
  3. 03

    Tambahkan aturan queue atau tag di file konfigurasi yang sama, lalu targetkan dari step pipeline Anda.

Baca panduan lengkap Buildkite

CircleCI

macOS yang di-host CircleCI ditagih per menit seperti GitHub. Machine runner self-hosted mereka berjalan di macOS dan terhubung keluar.

  1. 01

    Di CircleCI, buat resource class untuk runner self-hosted dan buat token runner.

  2. 02

    Pasang machine runner dari Homebrew tap milik CircleCI. Ikuti langkah konfigurasi macOS yang ditampilkan UI mereka, yang mengatur token dan resource class di file konfigurasi runner.

  3. 03

    Jalankan runner sebagai service, lalu targetkan resource class itu dari job config.yml Anda.

CircleCI sering mengubah alur instalasi runner. Ikuti perintah persis di halaman instalasi runner self-hosted untuk macOS dari mereka.

Baca panduan lengkap CircleCI

Azure Pipelines

Agen macOS yang di-host Microsoft terbatas dalam paralelisme. Agen macOS self-hosted adalah opsi kelas satu.

  1. 01

    Di Azure DevOps, buka Organization settings, Agent pools, lalu tambahkan agen. Unduh paket agen macOS yang ditawarkan.

  2. 02

    Ekstrak di home milik runner, lalu konfigurasikan dengan personal access token yang punya scope Agent Pools read and manage.

    mkdir ~/azagent && cd ~/azagent && tar zxvf ~/Downloads/vsts-agent-osx-arm64-*.tar.gz
    ./config.sh
  3. 03

    Pasang dan jalankan sebagai service.

    ./svc.sh install
    ./svc.sh start
  4. 04

    Arahkan pipeline Anda ke pool tersebut: pool: { name: <your-pool> }.

Jenkins

Tim yang memakai Jenkins sudah menjalankan agen sendiri. Pakai inbound agent agar Mac terhubung keluar ke controller Anda dan tidak butuh port masuk.

  1. 01

    Pasang Java 21. Rilis Jenkins LTS saat ini juga butuh Java 21 atau 25 di agen.

    brew install openjdk@21
  2. 02

    Di Jenkins, tambahkan node baru dengan metode peluncuran Launch agent by connecting it to the controller. Jenkins menampilkan unduhan agent.jar dan perintah run yang persis, lengkap dengan secret Anda.

  3. 03

    Jalankan perintah itu di Mac di dalam tmux, atau sebagai LaunchAgent agar tersambung lagi setelah reboot.

    tmux new -s jenkins
    curl -sO https://<your-jenkins>/jnlpJars/agent.jar
    # then the java -jar agent.jar ... command Jenkins gave you
  4. 04

    Beri label macos pada node, lalu batasi job terkait ke label itu.

Baca panduan lengkap Jenkins

Mesin yang sama, harga yang sama.

Pilih sistem CI Anda di formulir pendaftaran. URL bersifat opsional, kecuali untuk pemeriksaan penipuan, yang lebih lancar jika URL diisi.