Langkau ke kandungan

Jalankan pekerja armada

Jalankan cc_worker pada mesin lapang untuk menambah kapasiti pelaksanaan kepada armada anda. Ia ialah binari Dart tulen — tanpa enjin Flutter — yang berganding dengan cc_server, mengisytiharkan keupayaan hosnya, menghantar denyutan, menarik tugas pajakan, melaksanakannya dan menstrim acara proses kembali. Ia tidak memegang sebarang keadaan berkekalan: penyelia memulakannya semula dan ia mendaftar semula.

Anda perlu cc_server yang sedang berjalan dahulu — lihat Jalankan pelayan tanpa kepala.

Pekerja yang berganding akan mendaftar, menghantar denyutan dan menunggu tugas pajakan. Hantar kerja dengan fleet.submitJob. Penghantaran ejen pada pelayan ini tidak melalui armada; isyarat kejayaan untuk panduan ini ialah pekerja muncul dalam panel armada dengan denyutan yang baharu. Pekerja dalam proses yang didaftarkan semasa but mempunyai peta pelaksana yang kosong, jadi tugas yang diletakkan padanya akan memulangkan No local runner for job kind ….

  • Dart SDK. Repo ini meminkan SDK-nya dengan fvm, jadi awalkan perintah dengan fvm.
  • Repositori ini telah di-checkout pada mesin pekerja.
  • cc_server yang boleh dicapai (loopback untuk pembangunan, LAN atau jauh untuk pengeluaran).
  • git pada PATH — pekerja mematerialkan repo dan menjalankan siasatan git.
Tetingkap terminal
cd apps/cc_worker
fvm dart build cli

Ini menghasilkan bundel serba lengkap di ./build/cli/<os_arch>/bundle/bin/cc_worker.

cc_server hanya menerima pekerja yang membentangkan id peranti berpasangan dan kunci pra-kongsi — termasuk pelayan loopback. Tempakannya pada mesin pelayan (pair boleh dijalankan semasa pelayan hidup; peranti baharu dikesan tanpa permulaan semula):

Tetingkap terminal
cc_server pair --data-dir <dir> --device my-worker --label "Build box"

Ia mencetak Device id dan Pairing key — itulah yang diterima oleh --device-id dan --psk / --psk-file / CC_WORKER_PSK.

Dengan pelayan yang berganding:

Tetingkap terminal
./build/cli/<os_arch>/bundle/bin/cc_worker \
--server wss://host:9030 --device-id my-worker --psk-file /path/to/worker.psk

Dengan pelayan loopback (masih berganding — cc_server sentiasa menjalankan jabat tangan PSK):

Tetingkap terminal
fvm dart run cc_worker --server ws://localhost:9030 \
--device-id my-worker --psk-file /path/to/worker.psk
Bendera Keterangan Lalai
--server <url> URL cc_server (ws:///wss://; http(s) dan laluan /rpc yang hilang akan dipaksakan). Wajib. —
--name <name> Nama pekerja yang dipaparkan kepada pengendali. nama hos
--device-id <id> Id peranti berpasangan yang stabil, turut digunakan sebagai id pekerja. cc-worker
--psk-file <path> Fail yang baris pertama tidak kosongnya ialah kunci penggandingan. Diutamakan berbanding --psk. —
--psk <key> Kunci penggandingan pada baris perintah. Kelihatan dalam ps dan sejarah shell — binari memberi amaran. —
--max-jobs <n> Had maksimum mutlak bagi tugas yang dilaksanakan serentak oleh proses ini (integer positif). 4

Susunan penyelesaian untuk kunci ialah --psk-file → CC_WORKER_PSK → --psk. Meninggalkan semua sumber akan melangkau jabat tangan pengesahan pekerja; cc_server sebenar kemudian menolak sesi itu (auth_denied) daripada menerima pekerja tanpa pengesahan. Bendera yang tidak dikenali ialah ralat penggunaan (exit 64) — tidak seperti cc_server, binari ini menggunakan package:args dan tidak mengabaikan salah taip.

CC_WORKER_CACHE mengatasi direktori cache materialisasi worktree (lalai: direktori cc_worker_cache di bawah direktori temp sistem).

Pekerja mendaftar dengan fleet.registerWorker, kemudian menghantar denyutan setiap 20s dan mengundi pajakan setiap 2s. Ia berjalan sehingga SIGINT/SIGTERM; letakkannya di bawah systemd atau launchd supaya ia dimulakan semula dan mendaftar semula selepas ranap atau but semula.

Buka Kebolehcerapan dalam apl desktop atau web, tukar ke tab Langsung dan tatal ke bawah. Pekerja menyenaraikan setiap pekerja yang berdaftar dengan platform, teras, kunci keupayaan dan denyutan terakhirnya; Tugas menyenaraikan tugas yang diagihkan antara mereka.

Pekerja anda muncul di situ dengan denyutan yang terkini ialah pengesahan bahawa penggandingan dan pendaftaran berjaya.

Dari jubin pekerja anda boleh salirkannya (habiskan tugas semasa, tidak mengambil pajakan baharu), sambung semula pekerja yang menyalir, tarik balik kelayakannya, atau buang baris itu.

Baris pekerja dan tugas terletak dalam global.db pelayan — pekerja itu sendiri tidak menulis apa-apa ke cakera selain cache materialisasi.

Semasa pendaftaran, pekerja mengesan keupayaannya secara automatik dan penjadual memadankan tugas dengannya. Anda tidak mengkonfigurasi perkara ini secara manual:

  • OS dan seni bina (macos/linux/windows, arm64/x64) — siasatan tepat, dengan sandaran kepada uname -m / PROCESSOR_ARCHITECTURE
  • Teras dan RAM — bilangan teras tepat; RAM menurun kepada 0 apabila tidak dapat disiasat
  • flutter — ditetapkan apabila SDK Flutter dapat dicapai (flutter kosong, kemudian fvm flutter); tugas render golden memerlukannya
  • sandbox — native-macos pada macOS, native-linux pada Linux. Ini ialah petunjuk penempatan, bukan janji: pekerja menghebahkan bahagian belakang yang ada pada platformnya, tetapi ia tidak membalut tugas yang dilaksanakannya di dalamnya. Tidak seperti cc_server, cc_worker melahirkan tugas pajakan secara langsung
  • always-on dan parallel — cc_worker khusus sentiasa menghebahkan kedua-duanya, jadi ia layak untuk kumpulan eval dan kapasiti selari sekali guna yang lain

Pengesanan dilakukan sebaik mungkin: apa sahaja yang tidak dapat disiasat akan menurun kepada lalai yang selamat dan bukannya menggagalkan permulaan.

Protokol pajakan membawa enam jenis tugas:

Jenis Apakah ia
agentRun Satu larian ejen tunggal (penghantaran)
pipelineStep Pelaksanaan langkah pipeline
codeIndex Pembinaan indeks kod repo
goldenRender Render golden visual UI (memerlukan flutter)
benchmark Larian benchmark prestasi
evalBatch Kumpulan eval (mengutamakan kapasiti parallel)

Pelaksanaan ialah pelaksanaan penstriman subproses sebenar, bukan masa jalan ejen terbenam yang penuh. Apabila pajakan membawa repoRemote, pekerja melakukan git clone --depth 1 ke direktori cache yang dikunci mengikut remote dan SHA, kemudian git fetch dan git checkout. Untuk agentRun, ia menjalankan perintah dalam CC_JOB_COMMAND env pajakan di direktori kerja, menstrim stdout dan stderr kembali sebagai acara; tanpa CC_JOB_COMMAND ia menggema gesaan supaya pengangkutan itu tetap diuji dari hujung ke hujung. Jenis lain menjalankan perintah sebenar yang kecil (git rev-parse HEAD, git --version) sebagai siasatan yang jujur. Kelayakan berskop tugas dalam env pajakan disuntik ke dalam setiap subproses dan tidak pernah ditulis ke log.

Acara dikumpulkan dan dikosongkan setiap 250ms atau setiap 32 acara; setiap tugas berakhir dengan acara selesai dan laporan penyiapan. Modelnya ialah denyutan serta pajakan TTL pendek: jika pekerja hilang hubungan, pajakannya tamat tempoh dan pelayan menuai tugas itu untuk cubaan semula. Tiada keadaan berkekalan pada pekerja dan tiada konsensus atau kecurian kerja antara pekerja.