Sari la conținut

Creează un șablon de pipeline

Șabloanele de pipeline se redactează în setările spațiului de lucru. Intrarea Pipeline-uri din bara laterală a spațiului de lucru este coada de rulare, nu lista de șabloane — nu are nicio acțiune de „creare șablon”.

Pentru ce înseamnă fiecare tip de pas, cheie de corp și câmp de configurare, vezi referința tipurilor de pași din pipeline.

  1. Mergi la Setări → Spațiu de lucru → Șabloane pipeline (/workspaces/<workspace-id>/settings/pipelines).
  2. Apasă Șablon nou.

Nu există niciun dialog pentru id. Editorul se deschide imediat pe un schelet precompletat numit Pipeline nou, cu un id alocat automat (pipeline_1, apoi pipeline_2, …). Fă clic pe titlul din antet ca să-l redenumești.

Pânza nu este goală: un nod de intrare Trigger, un nod de agent cu prompt etichetat Step și o sentinelă terminală care încheie rularea. Sentinela nu este desenată. Editorul recablează acel terminal ascuns către fiecare destinație accesibilă, așa că munca pe care o atașezi după Step rulează oricum.

Bara laterală Bibliotecă de noduri stă permanent în partea stângă a editorului. Filtrează-o cu caseta Caută noduri și trage o intrare pe pânză — nodul ajunge exact acolo unde îl lași, fără nicio conexiune de intrare.

Nod din paletă Tip de pas Ce face
Bash script listen Rulează un script shell cu substituție de {{state}}; nu se trimite niciun agent
Open conversation listen Deschide singurul spațiu vizibil al rulării și checkout-ul lui; nodurile de agent se alătură acestei săli
Clone PR branch listen Descoperă ramura head a PR-ului prin gh pr view și o clonează în directorul rulării
Post PR comment listen Publică constatările consolidate pe PR ca un comentariu de revizuire GitHub
Reviewer (prompt) listen Trimite un agent revizor specialist; suspendă până când agentul își trimite rezultatul
Consolidate (join) join Așteaptă mai multe ramuri din amonte, apoi cere unui agent să le consolideze ieșirile
Custom prompt listen Nod generic condus de un prompt, rutat prin corpul promptAgent
Post to space listen Trimite un mesaj într-un spațiu de mesagerie
Condition / switch (router) router Ramifică fluxul în funcție de o valoare de stare
If file exists (router) router Rutează "true" când o cale există în clone, altfel "false"
Any file exists (OR router) router Rutează "true" când există oricare dintre căile listate
All conditions (AND router) router Rutează "true" doar când există toate căile listate
Team dispatch listen Trimite o echipă întreagă și suspendă până când aceasta termină
Approval gate listen Face o pauză pentru o decizie de aprobare
For each (map) forEach Redă un prompt pentru fiecare element, apoi trimite agentul o singură dată cu acele prompturi concatenate
Call sub-pipeline listen Rulează alt șablon ca pas imbricat
Clean up worktrees listen Elimină worktree-urile izolate învechite; determinist, nu se trimite niciun agent

Biblioteca le grupează sub Flux și logică, Revizuire PR, Agenți, Mesagerie și Cod. Nu există un grup Demo.

Fiecare nod de lucru are un port de ieșire circular pe marginea din dreapta. Trage din acel port pe alt nod ca să le conectezi. Declanșatorii de pornire funcționează la fel: fiecare își are propriul port, așa că un fir din Program nu pleacă și din Rulare manuală. Apasă Adaugă pas (+) imediat după un nod ca să inserezi un tip în urma lui. Treci cu mouse-ul peste mijlocul unei muchii existente și apasă × ca să o deconectezi.

Conexiunile se editează și din nodul care le primește:

  1. Selectează nodul din aval. Panoul lui de configurare se deschide în dreapta.
  2. Derulează până la Triggers from și atinge cipul fiecărui nod din amonte pe care acesta trebuie să-l asculte. Atingerea unui cip selectat elimină conexiunea.
  3. Dacă un nod din amonte este un router, sub cipuri apare un bloc Chei de rută cu câte un câmp Cheie de rută de la <nod> pentru fiecare muchie de router. Introdu cheia pe care se declanșează acea muchie — true sau false pentru routerele de tip „există fișier”, ori numele cazului pentru un switch.

Fiecare nod de declanșare este un punct de intrare. Un nod poate asculta mai multe noduri din amonte (fan-in) și poate alimenta mai multe noduri din aval (fan-out), iar graful trebuie să rămână aciclic — nimic din editor nu te oprește să cablezi un ciclu, așa că verifică-ți munca.

Sentinela terminală este filtrată din pânză, așa că nu poate fi selectată. Editorul o recablează către fiecare destinație accesibilă de fiecare dată când graful se schimbă, așa că munca pe care o atașezi după Step-ul precompletat rulează oricum. Un graf gol (un declanșator fără succesori de lucru) listează declanșatorul însuși, ca o rulare să se încheie imediat.

Selectează un nod ca să-i deschizi panoul de configurare. Ce câmpuri apar depinde de corpul nodului.

Fiecare nod are Etichetă, Chei de intrare (chei de stare separate prin virgule, citite la momentul execuției) și, sub Avansat, Reducer, Timeout (ms), Încercări de reîncercare, Continuă dacă acest pas eșuează și Schemă de ieșire. Nodurile listen și join își pot comuta și Tipul între cele două.

Adaugă un selector de domeniu de depozite (ce depozite ale spațiului de lucru se extrag; gol înseamnă niciunul), un Nume spațiu și o casetă de selectare Deschide o conversație în el. Când caseta este bifată, un câmp Nume conversație denumește fluxul cu care se deschide sala. Nodurile de agent se alătură acestei săli — nu deschid una proprie.

Adaugă Agent (ce agent se trimite), Prompt (folosește {{key}} pentru a face referire la intrări sau la ieșiri din amonte) și Cheie de ieșire.

Timeout (ms) este în milisecunde, nu în secunde — 900000 înseamnă 15 minute. Dacă introduci 900, pasul primește 0,9 secunde.

Modul de conversație sub care rulează un nod de agent cu prompt nu are niciun câmp în editor pe nodul de agent. El călătorește în extras['mode'] (chat, plan sau review) pe nodul Open conversation care a creat sala (implicit review). Dacă îl setezi pe un pas de agent, este ignorat. Cheia se potrivește exact: orice altă scriere este ignorată în silență.

Adaugă Script Bash. Nu există câmpuri pentru director de lucru sau mediu, pentru că niciunul nu este configurabil:

  • Toate nodurile bash dintr-o rulare folosesc același director curent, <cc_root>/pipelines/<runId>/.
  • GITHUB_TOKEN este injectat din depozitul de credențiale, așa că gh și git clone https://x-access-token:$GITHUB_TOKEN@… funcționează fără configurare.
  • Scriptul este lansat ca executabilul literal bash, deci bash trebuie să fie în PATH-ul gazdei serverului. Aceasta este o considerație pentru Windows.

Un router evaluează o condiție și returnează o cheie de rută; motorul declanșează doar muchia din aval a cărei cheie de rută se potrivește și marchează celelalte ramuri ca sărite.

Selectarea unui router înlocuiește câmpul Cheie de ieșire cu editorul de condiții. Alege unul dintre cele patru moduri:

  • Fișier(e) există — oricare — rutează "true" când există oricare dintre căile listate.
  • Fișierele există — toate — rutează "true" doar când există toate căile listate.
  • Comparație — compară o valoare de stare cu un literal.
  • Switch — rutează după valoarea unei chei de stare, cu un caz implicit.

Apoi setează cheile de rută corespunzătoare pe muchiile de ieșire (vezi Leagă nodurile între ele).

Grupurile booleene and / or / not sunt acceptate de corp, dar nu pot fi create din acest formular — au nevoie de un arbore de predicate scris manual sub extras.predicate. Vocabularul complet de predicate și operatori se află în referința tipurilor de pași din pipeline.

Nu are configurare proprie: așteaptă toți pașii săi din amonte.

Poarta trimite agentul aprobator într-o conversație ascunsă, cu promptul porții, și suspendă. Aprobatorul îți cere decizia în conversație și o trimite cu submit_output ca { "decision": "approved" | "rejected", "reason": "..." }. Decizia ajunge sub cheia de ieșire (implicit approval_decision), așa că un router de tip switch din aval poate ramifica pe baza ei.

Setează Agent pe aprobator și Prompt pe întrebarea porții. Poarta se rezolvă prin submit_output ca { "decision": "approved" | "rejected", "reason": "..." }. Nodurile Reviewer (prompt) trimit la fel.

Adaugă ID echipă și Mod de dispatch. Selectorul oferă exact două moduri:

  • allParallel — o sarcină per membru, suspendă până când toate se termină.
  • manager — trimite liderul, care deleagă.

Orice altă valoare stocată se comportă ca allParallel. Setează Reducer pe append pentru a colecta rezultatul fiecărui membru într-o listă sub cheia de ieșire.

For each iterează implicit peste cheia de stare items (extras.iterableKey / extras.itemKey pe nod). Redă promptul o dată pentru fiecare element ({{item}} implicit) și trimite agentul o singură dată, cu acele prompturi concatenate. O colecție goală se încheie imediat, cu o listă goală. Nu este o trimitere paralelă per element.

Call sub-pipeline suspendă până când rularea copil ajunge într-o stare terminală, apoi fuzionează starea finală a copilului sub cheia de ieșire (implicit subflow_result). Indică spre un copil cu extras.templateId. Un șablon nu se poate apela pe sine; un copil eșuat sau anulat face să eșueze pasul părinte, care alimentează apoi politica de reîncercare și de continuare-la-eșec a acelui pas.

Ambele se află în spatele butonului Rulare manuală din antetul editorului.

  1. Apasă Rulare manuală.
  2. Activează Permite rulare manuală. Acest comutator se salvează imediat — creează (sau șterge) rândul de declanșator manual care face șablonul să apară în lansatorul de rulări.
  3. Setează Max. rulări paralele dacă vrei o limită (lasă gol pentru nelimitat). Pornirile suplimentare așteaptă într-o stare queued până când se eliberează un loc.
  4. Apasă Adaugă intrare pentru fiecare câmp de formular pe care o rulare manuală ar trebui să îl colecteze:
Câmp Descriere
Cheie Cheia de stare sub care se stochează valoarea; fă referire la ea ca {{key}}
Etichetă Eticheta afișată (implicit, cheia)
Tip Text, Text pe mai multe linii, Număr, Comutator, Selectare, Depozit
Opțiuni Alegeri separate prin virgulă, doar pentru Selectare
Valoare implicită Valoare precompletată
Placeholder Text indicativ în interiorul câmpului gol
Text de ajutor Text auxiliar sub câmp
Obligatoriu Dacă formularul de rulare blochează la o valoare goală

O intrare Depozit afișează un selector peste depozitele spațiului de lucru și populează repo_id, repo_local_path, repo_full_name și — când depozitul are un remote GitHub — repo_owner și repo_name în payload-ul rulării.

  1. Apasă Salvează în dialog. Modificările intrărilor sunt incluse în ciornă; ele persistă când salvezi șablonul.
  1. Apasă Salvează în antetul editorului. Antetul afișează „Modificări nesalvate” până când faci asta.
  2. Întoarce-te la Setări → Spațiu de lucru → Șabloane pipeline și verifică dacă comutatorul din rândul șablonului este activat. Motorul refuză să pornească un șablon dezactivat, iar un șablon dezactivat nu apare niciodată în lansatorul de rulări.
  3. Ca să-l pornești automat, trage un declanșator din biblioteca de noduri pe pânză — vezi Configurează trigger-ele pipeline-urilor.