Εκτέλεση εργάτη στόλου
Εκτελέστε το cc_worker σε ένα εφεδρικό μηχάνημα για να προσθέσετε ικανότητα
εκτέλεσης στον στόλο σας. Είναι ένα δυαδικό σε καθαρή Dart — χωρίς μηχανή Flutter
— που συζεύγνυται με έναν cc_server, δηλώνει τις δυνατότητες του ξενιστή,
στέλνει heartbeat, τραβά μισθωμένες εργασίες, τις εκτελεί και μεταδίδει πίσω
γεγονότα διεργασίας. Δεν κρατά μόνιμη κατάσταση: ένας επόπτης το επανεκκινεί και
αυτό καταχωρίζεται ξανά.
Χρειάζεστε πρώτα έναν ενεργό cc_server — δείτε Εκτέλεση headless διακομιστή.
Ένας συζευγμένος εργάτης καταχωρίζεται, στέλνει heartbeat και περιμένει μισθωμένες
εργασίες. Υποβάλετε εργασία με το fleet.submitJob. Η αποστολή πράκτορα σε αυτόν
τον διακομιστή δεν δρομολογείται μέσω του στόλου· το σήμα επιτυχίας για αυτόν τον
οδηγό είναι ο εργάτης να εμφανίζεται στον πίνακα του στόλου με πρόσφατο heartbeat.
Ο εργάτης εντός διεργασίας που καταχωρίζεται κατά την εκκίνηση έχει κενό χάρτη
εκτελεστών, οπότε μια εργασία που τοποθετείται σε αυτόν επιστρέφει No local runner for job kind ….
Προαπαιτούμενα
Ενότητα με τίτλο «Προαπαιτούμενα»- Το Dart SDK. Αυτό το αποθετήριο καρφιτσώνει το SDK του με το fvm, οπότε βάλτε πρόθεμα
fvmστις εντολές. - Αυτό το αποθετήριο κατεβασμένο στο μηχάνημα του εργάτη.
- Ένας προσβάσιμος
cc_server(loopback για ανάπτυξη, LAN ή απομακρυσμένος για παραγωγή). - Το
gitστοPATH— ο εργάτης υλοποιεί τοπικά τα αποθετήρια και εκτελεί ανιχνεύσεις μεgit.
Βήμα 1: Χτίστε το δυαδικό
Ενότητα με τίτλο «Βήμα 1: Χτίστε το δυαδικό»cd apps/cc_workerfvm dart build cliΑυτό παράγει ένα αυτοτελές πακέτο στο ./build/cli/<os_arch>/bundle/bin/cc_worker.
Βήμα 2: Εκδώστε το διαπιστευτήριο του εργάτη
Ενότητα με τίτλο «Βήμα 2: Εκδώστε το διαπιστευτήριο του εργάτη»Ένας cc_server δέχεται μόνο εργάτη που παρουσιάζει αναγνωριστικό συζευγμένης
συσκευής και προκοινόχρηστο κλειδί — ακόμη και έναν διακομιστή loopback. Εκδώστε τα
στο μηχάνημα του διακομιστή (το pair μπορεί να εκτελεστεί όσο ο διακομιστής
είναι ενεργός· η νέα συσκευή εντοπίζεται χωρίς επανεκκίνηση):
cc_server pair --data-dir <dir> --device my-worker --label "Build box"Τυπώνει ένα Device id και ένα Pairing key — αυτά είναι που δέχονται τα
--device-id και --psk / --psk-file / CC_WORKER_PSK.
Βήμα 3: Εκκινήστε τον εργάτη
Ενότητα με τίτλο «Βήμα 3: Εκκινήστε τον εργάτη»Με έναν συζευγμένο διακομιστή:
./build/cli/<os_arch>/bundle/bin/cc_worker \ --server wss://host:9030 --device-id my-worker --psk-file /path/to/worker.pskΜε διακομιστή loopback (ακόμη συζευγμένο — ο cc_server εκτελεί πάντα τη χειραψία
PSK):
fvm dart run cc_worker --server ws://localhost:9030 \ --device-id my-worker --psk-file /path/to/worker.psk| Σημαία | Περιγραφή | Προεπιλογή |
|---|---|---|
--server <url> |
URL του cc_server (ws:///wss://· το http(s) και μια διαδρομή /rpc που λείπει διορθώνονται αυτόματα). Απαιτείται. |
— |
--name <name> |
Όνομα εργάτη που βλέπει ο χειριστής. | όνομα ξενιστή |
--device-id <id> |
Σταθερό αναγνωριστικό συζευγμένης συσκευής, που χρησιμοποιείται και ως αναγνωριστικό εργάτη. | cc-worker |
--psk-file <path> |
Αρχείο του οποίου η πρώτη μη κενή γραμμή είναι το κλειδί σύζευξης. Προτιμάται έναντι του --psk. |
— |
--psk <key> |
Κλειδί σύζευξης στη γραμμή εντολών. Ορατό στο ps και στο ιστορικό του φλοιού — το δυαδικό προειδοποιεί. |
— |
--max-jobs <n> |
Αυστηρό ανώτατο όριο στις εργασίες που εκτελεί ταυτόχρονα αυτή η διεργασία (θετικός ακέραιος). | 4 |
Η σειρά επίλυσης για το κλειδί είναι --psk-file → CC_WORKER_PSK → --psk. Η
παράλειψη κάθε πηγής παρακάμπτει τη χειραψία ταυτοποίησης του εργάτη· ένας
πραγματικός cc_server τότε απορρίπτει τη συνεδρία (auth_denied) αντί να δεχτεί
εργάτη χωρίς ταυτοποίηση. Οι άγνωστες σημαίες είναι σφάλμα χρήσης (exit 64) — σε
αντίθεση με το cc_server, αυτό το δυαδικό χρησιμοποιεί το package:args και δεν
αγνοεί τα τυπογραφικά λάθη.
Το CC_WORKER_CACHE παρακάμπτει τον κατάλογο cache υλοποίησης των worktree
(προεπιλογή: ένας κατάλογος cc_worker_cache κάτω από τον κατάλογο προσωρινών
αρχείων του συστήματος).
Ο εργάτης καταχωρίζεται με το fleet.registerWorker, μετά στέλνει heartbeat κάθε
20 δευτερόλεπτα και ελέγχει για μισθώσεις κάθε 2 δευτερόλεπτα. Εκτελείται μέχρι
SIGINT/SIGTERM· βάλτε το κάτω από systemd ή launchd, ώστε να επανεκκινείται και
να καταχωρίζεται ξανά μετά από κατάρρευση ή επανεκκίνηση.
Βήμα 4: Επαληθεύστε το στον πίνακα του στόλου
Ενότητα με τίτλο «Βήμα 4: Επαληθεύστε το στον πίνακα του στόλου»Ανοίξτε την Παρατηρησιμότητα στην εφαρμογή υπολογιστή ή web, μεταβείτε στην καρτέλα Ζωντανά και κυλήστε στο κάτω μέρος. Οι Εργάτες παραθέτουν κάθε καταχωρισμένο εργάτη με την πλατφόρμα, τους πυρήνες, τα κλειδιά δυνατοτήτων και το τελευταίο heartbeat του· οι Εργασίες παραθέτουν τις εργασίες που είναι κατανεμημένες σε αυτούς.
Η εμφάνιση του εργάτη σας εκεί με πρόσφατο heartbeat είναι η επιβεβαίωση ότι η σύζευξη και η καταχώριση λειτούργησαν.
Από το πλακίδιο ενός εργάτη μπορείτε να τον αδειάσετε (ολοκληρώνει τις τρέχουσες εργασίες, δεν αναλαμβάνει νέες μισθώσεις), να συνεχίσετε έναν εργάτη που αδειάζει, να ανακαλέσετε το διαπιστευτήριό του ή να αφαιρέσετε τη γραμμή.
Οι γραμμές εργατών και εργασιών ζουν στο global.db του διακομιστή — ο ίδιος ο
εργάτης δεν γράφει τίποτα στον δίσκο πέρα από την cache υλοποίησης.
Τι διαφημίζει ο εργάτης
Ενότητα με τίτλο «Τι διαφημίζει ο εργάτης»Κατά την καταχώριση, ο εργάτης ανιχνεύει αυτόματα τις δυνατότητές του και ο χρονοπρογραμματιστής αντιστοιχίζει εργασίες με αυτές. Δεν τις ρυθμίζετε χειροκίνητα:
- Λειτουργικό σύστημα και αρχιτεκτονική (
macos/linux/windows,arm64/x64) — ακριβείς ανιχνεύσεις, με εφεδρικές τιμές σταuname -m/PROCESSOR_ARCHITECTURE - Πυρήνες και RAM — ακριβής αριθμός πυρήνων· η RAM υποβαθμίζεται σε
0όταν δεν μπορεί να ανιχνευθεί flutter— ορίζεται όταν ένα Flutter SDK είναι προσβάσιμο (σκέτοflutterκαι μετάfvm flutter)· οι εργασίες golden-render το απαιτούνsandbox—native-macosστο macOS,native-linuxστο Linux. Αυτή είναι υπόδειξη τοποθέτησης, όχι υπόσχεση: ο εργάτης διαφημίζει το υποσύστημα που διαθέτει η πλατφόρμα του, αλλά δεν τυλίγει σε αυτό τις εργασίες που εκτελεί. Σε αντίθεση με τοcc_server, τοcc_workerεκκινεί απευθείας μια μισθωμένη εργασίαalways-onκαιparallel— ένας αποκλειστικόςcc_workerδιαφημίζει πάντα και τα δύο, ώστε να είναι επιλέξιμος για παρτίδες αξιολόγησης και άλλη αναλώσιμη παράλληλη χωρητικότητα
Η ανίχνευση γίνεται κατά το δυνατόν: ό,τι δεν μπορεί να ανιχνευθεί υποβαθμίζεται σε ασφαλή προεπιλογή αντί να αποτύχει η εκκίνηση.
Τι θα εκτελούσε ο εργάτης
Ενότητα με τίτλο «Τι θα εκτελούσε ο εργάτης»Το πρωτόκολλο μίσθωσης μεταφέρει έξι τύπους εργασιών:
| Τύπος | Τι είναι |
|---|---|
agentRun |
Μία μεμονωμένη εκτέλεση πράκτορα (αποστολή) |
pipelineStep |
Εκτέλεση βήματος pipeline |
codeIndex |
Χτίσιμο ευρετηρίου κώδικα αποθετηρίου |
goldenRender |
Οπτική golden απόδοση διεπαφής (απαιτεί flutter) |
benchmark |
Εκτέλεση benchmark επιδόσεων |
evalBatch |
Παρτίδα αξιολόγησης (προτιμά χωρητικότητα parallel) |
Η εκτέλεση είναι πραγματική υλοποίηση ροής υποδιεργασιών, όχι πλήρες ενσωματωμένο
περιβάλλον εκτέλεσης πράκτορα. Όταν μια μίσθωση μεταφέρει repoRemote, ο εργάτης
εκτελεί git clone --depth 1 σε έναν κατάλογο cache με κλειδί που βασίζεται στο
απομακρυσμένο και στο SHA, και μετά git fetch και git checkout. Για το
agentRun εκτελεί την εντολή στο CC_JOB_COMMAND του περιβάλλοντος της μίσθωσης,
στον κατάλογο εργασίας, μεταδίδοντας πίσω το stdout και το stderr ως γεγονότα· χωρίς
CC_JOB_COMMAND επαναλαμβάνει την προτροπή, ώστε να ασκείται ακόμη η μεταφορά από
άκρη σε άκρη. Οι άλλοι τύποι εκτελούν μικρές πραγματικές εντολές
(git rev-parse HEAD, git --version) ως ειλικρινείς ανιχνεύσεις. Τα
διαπιστευτήρια με εμβέλεια εργασίας στο περιβάλλον της μίσθωσης εγχέονται σε κάθε
υποδιεργασία και δεν γράφονται ποτέ σε αρχείο καταγραφής.
Τα γεγονότα ομαδοποιούνται και εκκενώνονται κάθε 250ms ή κάθε 32 γεγονότα· κάθε εργασία τελειώνει με ένα γεγονός τερματισμού και μια αναφορά ολοκλήρωσης. Το μοντέλο είναι heartbeat συν μισθώσεις με σύντομο TTL: αν ένας εργάτης χάσει την επαφή, η μίσθωσή του λήγει και ο διακομιστής περισυλλέγει την εργασία για επανάληψη. Δεν υπάρχει μόνιμη κατάσταση στον εργάτη ούτε συναίνεση ή κλοπή εργασίας μεταξύ εργατών.