Crear una plantilla de pipeline
Las plantillas de pipeline se crean en los ajustes del espacio de trabajo. La entrada Pipelines de la barra lateral del espacio de trabajo es la cola de ejecuciones, no la lista de plantillas: no tiene ninguna acción «crear plantilla».
Para saber qué significa cada tipo de paso, cada clave de cuerpo y cada campo de configuración, consulta la referencia de pasos de pipeline.
Crear una plantilla
Sección titulada «Crear una plantilla»- Ve a Ajustes → Espacio de trabajo → Plantillas de pipeline
(
/workspaces/<workspace-id>/settings/pipelines). - Pulsa Nueva plantilla.
No hay ningún diálogo de id. El editor se abre de inmediato en un esqueleto
predefinido llamado Nuevo pipeline, con un id asignado automáticamente
(pipeline_1, luego pipeline_2, …). Haz clic en el título de la cabecera para
cambiarle el nombre.
El lienzo no está vacío: un nodo de entrada Trigger, un nodo de agente de prompt con la etiqueta Step y un centinela terminal que da por terminada la ejecución. El centinela no se dibuja. El editor reconecta ese terminal oculto a cada sumidero alcanzable, de modo que el trabajo que conectes después de Step sigue ejecutándose.
Añadir nodos
Sección titulada «Añadir nodos»La barra lateral Biblioteca de nodos ocupa de forma permanente la izquierda del editor. Fíltrala con el cuadro Buscar nodos y arrastra una entrada al lienzo: el nodo aterriza donde lo sueltes, sin ninguna conexión entrante.
| Nodo de la paleta | Tipo de paso | Qué hace |
|---|---|---|
| Bash script | listen | Ejecuta un script de shell con sustitución de {{state}}; no se despacha ningún agente |
| Open conversation | listen | Abre el único espacio visible de la ejecución y su checkout; los nodos de agente se unen a esta sala |
| Clone PR branch | listen | Descubre la rama head de la PR mediante gh pr view y la clona en el directorio de la ejecución |
| Post PR comment | listen | Publica los hallazgos consolidados en la PR como comentario de revisión de GitHub |
| Reviewer (prompt) | listen | Despacha un agente revisor especializado; se suspende hasta que el agente envía su resultado |
| Consolidate (join) | join | Espera a varias ramas anteriores y luego pide a un agente que consolide sus salidas |
| Custom prompt | listen | Nodo genérico guiado por prompt, enrutado a través del cuerpo promptAgent |
| Post to space | listen | Envía un mensaje a un espacio de mensajería |
| Condition / switch (router) | router | Ramifica el flujo según un valor de estado |
| If file exists (router) | router | Enruta "true" cuando existe una ruta bajo el clon; si no, "false" |
| Any file exists (OR router) | router | Enruta "true" cuando existe cualquiera de las rutas indicadas |
| All conditions (AND router) | router | Enruta "true" solo cuando existen todas las rutas indicadas |
| Team dispatch | listen | Despacha un equipo completo y se suspende hasta que termina |
| Approval gate | listen | Se detiene a la espera de una decisión de aprobación |
| For each (map) | forEach | Renderiza un prompt por elemento y luego despacha el agente una vez con esos prompts unidos |
| Call sub-pipeline | listen | Ejecuta otra plantilla como paso anidado |
| Clean up worktrees | listen | Elimina worktrees aislados obsoletos; determinista, no se despacha ningún agente |
La biblioteca los agrupa en Flujo y lógica, Revisión de PR, Agentes, Mensajería y Código. No hay ningún grupo Demo.
Conectar nodos entre sí
Sección titulada «Conectar nodos entre sí»Cada nodo de trabajo tiene un puerto de salida circular en su borde derecho.
Arrastra desde ese puerto hasta otro nodo para conectarlos. Los disparadores
iniciales funcionan igual: cada uno tiene su propio puerto, así que una conexión
desde Programación no sale también de Ejecución manual. Pulsa Añadir
paso (+) justo después de un nodo para insertar un tipo a continuación. Pasa
el cursor por el punto medio de una arista existente y pulsa × para
desconectarla.
Las conexiones también se editan desde el nodo que las recibe:
- Selecciona el nodo posterior. Su panel de configuración se abre a la derecha.
- Desplázate hasta Disparadores desde y toca el chip de cada nodo anterior al que este deba escuchar. Si tocas un chip seleccionado, se elimina la conexión.
- Si un nodo anterior es un enrutador, bajo los chips aparece un bloque
Claves de ruta con un campo Clave de ruta desde <nodo> por cada
arista del enrutador. Introduce la clave con la que se activa esa arista:
trueofalseen los enrutadores de existencia de archivos, o el nombre del caso en un conmutador.
Cada nodo disparador es un punto de entrada. Un nodo puede escuchar a varios nodos anteriores (fan-in) y alimentar a varios posteriores (fan-out), y el grafo debe mantenerse acíclico: nada en el editor te impide crear un ciclo, así que revisa tu trabajo.
El centinela terminal queda filtrado fuera del lienzo, así que no se puede seleccionar. El editor lo reconecta a cada sumidero alcanzable cada vez que cambia el grafo, de modo que el trabajo que conectes después del Step predefinido sigue ejecutándose. Un grafo vacío (un disparador sin pasos de trabajo posteriores) incluye el propio disparador para que la ejecución termine de inmediato.
Configurar un nodo
Sección titulada «Configurar un nodo»Selecciona un nodo para abrir su panel de configuración. Los campos que aparecen dependen del cuerpo del nodo.
Todos los nodos tienen Etiqueta, Claves de entrada (separadas por comas) (claves de estado que se leen en tiempo de ejecución) y, en Avanzado, Reductor, Tiempo de espera (ms), Reintentos, Continuar si este paso falla y Esquema de salida (JSON). Los nodos listen y join también pueden cambiar su Tipo entre ambos.
Open conversation
Sección titulada «Open conversation»Añade un selector Repositorios a clonar (qué repos del espacio de trabajo se descargan; vacío significa ninguno), un Nombre del espacio y una casilla Abrir una conversación en ella. Con esa casilla activada, un campo Nombre de la conversación da nombre al hilo con el que se abre la sala. Los nodos de agente se unen a esta sala: no abren una propia.
Agente de prompt
Sección titulada «Agente de prompt»Añade Agente (qué agente despachar), Plantilla del prompt (usa {{key}}
para referenciar entradas o salidas de nodos anteriores) y Clave de salida.
Tiempo de espera (ms) está en milisegundos, no en segundos: 900000 son
15 minutos. Si introduces 900, el paso dispone de 0,9 segundos.
El modo de conversación con el que se ejecuta un nodo de agente de prompt no
tiene ningún campo en el editor del nodo de agente. Viaja en extras['mode']
(chat, plan o review) en el nodo Open conversation que creó la sala
(valor predeterminado review). Si lo estableces en un paso de agente, se
ignora. La clave se compara de forma exacta: cualquier otra grafía se ignora en
silencio.
Bash script
Sección titulada «Bash script»Añade Script bash. No hay campos de directorio de trabajo ni de entorno, porque ninguno de los dos es configurable:
- Todos los pasos bash de una ejecución comparten el cwd
<cc_root>/pipelines/<runId>/. GITHUB_TOKENse inyecta desde el almacén de credenciales, así queghygit clone https://x-access-token:$GITHUB_TOKEN@…funcionan sin ninguna configuración.- El script se lanza como el ejecutable literal
bash, así quebashdebe estar en elPATHdel host del servidor. Es algo que hay que tener en cuenta en Windows.
Enrutador
Sección titulada «Enrutador»Un enrutador evalúa una condición y devuelve una clave de ruta; el motor solo activa la arista posterior cuya clave de ruta coincide y marca las demás ramas como omitidas.
Al seleccionar un enrutador, el editor de condiciones sustituye el campo Clave de salida. Elige uno de sus cuatro modos:
- Archivo(s) existe(n) — alguno — enruta
"true"cuando existe alguna de las rutas indicadas. - Archivos existen — todos — enruta
"true"solo cuando existen todas las rutas indicadas. - Comparación — compara un valor de estado con un literal.
- Conmutador — enruta según el valor de una clave de estado, con un caso por defecto.
Después, establece las claves de ruta correspondientes en las aristas salientes (consulta Conectar nodos entre sí).
El cuerpo admite grupos booleanos and / or / not, pero no se pueden crear
desde este formulario: requieren un árbol de predicados escrito a mano en
extras.predicate. El vocabulario completo de predicados y operadores está en
la referencia de pasos de pipeline.
No tiene configuración propia: espera a todos sus pasos anteriores.
Approval gate
Sección titulada «Approval gate»La puerta despacha el agente aprobador a una conversación oculta con el prompt
de la puerta y se suspende. El aprobador te pide la decisión en la conversación
y la envía con submit_output como { "decision": "approved" | "rejected", "reason": "..." }.
La decisión queda en la clave de salida (valor predeterminado
approval_decision), de modo que un enrutador de tipo conmutador posterior
puede ramificar a partir de ella.
Establece Agente como el aprobador y Plantilla del prompt como la
pregunta de la puerta. La puerta se resuelve mediante submit_output como
{ "decision": "approved" | "rejected", "reason": "..." }. Los nodos Reviewer (prompt) envían el resultado del
mismo modo.
Team dispatch
Sección titulada «Team dispatch»Añade ID de equipo y Modo de despacho. El selector ofrece exactamente dos modos:
allParallel— una tarea por miembro; se suspende hasta que todas terminan.manager— despacha al líder, que delega.
Cualquier otro valor almacenado se comporta como allParallel. Establece
Reductor en append para reunir el resultado de cada miembro en una lista
bajo la clave de salida.
For each y Call sub-pipeline
Sección titulada «For each y Call sub-pipeline»For each itera sobre la clave de estado items de forma predeterminada
(extras.iterableKey / extras.itemKey en el nodo). Renderiza su prompt una vez
por elemento ({{item}} de forma predeterminada) y despacha el agente una
sola vez con esos prompts concatenados. Una colección vacía termina de
inmediato con una lista vacía. No es un despacho paralelo por elemento.
Call sub-pipeline se suspende hasta que la ejecución hija alcanza un estado
terminal y luego fusiona el estado final del hijo bajo la clave de salida (valor
predeterminado subflow_result). Apúntalo a un hijo con extras.templateId.
Una plantilla no puede llamarse a sí misma; un hijo fallido o cancelado hace
fallar el paso padre, que entonces aplica la política de reintentos y de
continuar en caso de fallo de ese paso.
Declarar entradas y permitir ejecuciones manuales
Sección titulada «Declarar entradas y permitir ejecuciones manuales»Ambas cosas se encuentran detrás de Ejecución manual, en la cabecera del editor.
- Pulsa Ejecución manual.
- Activa Permitir ejecución manual. Este interruptor se guarda de
inmediato: crea (o elimina) la fila de disparador
manualque hace aparecer la plantilla en el lanzador de ejecuciones. - Establece Ejecuciones paralelas máx. si quieres poner un límite (déjalo
vacío para ilimitado). Los inicios adicionales esperan en estado
queuedhasta que se libera un hueco. - Pulsa Añadir entrada por cada campo de formulario que deba recoger una ejecución manual:
| Campo | Descripción |
|---|---|
| Clave | Clave de estado bajo la que se guarda el valor; referénciala como {{key}} |
| Etiqueta | Etiqueta mostrada (por defecto, la clave) |
| Tipo | Texto, Texto multilínea, Número, Interruptor, Selección, Repositorio |
| Opciones (separadas por comas) | Opciones separadas por comas, solo para Selección |
| Valor predeterminado | Valor previamente rellenado |
| Marcador de posición | Texto de sugerencia dentro del campo vacío |
| Texto de ayuda | Texto de ayuda bajo el campo |
| Obligatorio | Si el formulario de ejecución se bloquea con un valor vacío |
Una entrada de tipo Repositorio muestra un selector sobre los repos del
espacio de trabajo y rellena repo_id, repo_local_path, repo_full_name y
—cuando el repo tiene un remoto de GitHub— repo_owner y repo_name en la
carga útil de la ejecución.
- Pulsa Guardar en el diálogo. Las ediciones de las entradas se incorporan al borrador y se conservan cuando guardas la plantilla.
Guardar y activar
Sección titulada «Guardar y activar»- Pulsa Guardar en la cabecera del editor. Hasta que lo hagas, la cabecera muestra «Cambios sin guardar».
- Vuelve a Ajustes → Espacio de trabajo → Plantillas de pipeline y comprueba que el interruptor de la fila de la plantilla está activado. El motor se niega a iniciar una plantilla desactivada, y una plantilla desactivada nunca aparece en el lanzador de ejecuciones.
- Para iniciarla automáticamente, arrastra un disparador desde la biblioteca de nodos al lienzo; consulta Configurar disparadores de pipeline.
Guías relacionadas
Sección titulada «Guías relacionadas»- Ejecutar un pipeline manualmente
- Configurar disparadores de pipeline
- Supervisar ejecuciones de pipeline
- Tipos de pasos de pipeline