콘텐츠로 이동

파이프라인 템플릿 만들기

파이프라인 템플릿은 워크스페이스 설정에서 작성합니다. 워크스페이스 사이드바의 파이프라인 항목은 _실행 큐_이며 템플릿 목록이 아닙니다. 여기에는 “템플릿 만들기” 동작이 없습니다.

각 단계 종류, 본문 키, 구성 필드가 무엇을 뜻하는지는 파이프라인 단계 레퍼런스를 참고하십시오.

  1. 설정 → 워크스페이스 → 파이프라인 템플릿 (/workspaces/<workspace-id>/settings/pipelines)으로 이동합니다.
  2. 새 템플릿을 누릅니다.

ID 대화상자는 없습니다. 편집기는 새 파이프라인이라는 이름의 기본 제공 스켈레톤으로 즉시 열리고, ID는 자동으로 할당됩니다(pipeline_1, 그다음 pipeline_2, …). 헤더의 제목을 클릭하면 이름을 바꿀 수 있습니다.

캔버스는 비어 있지 않습니다. 트리거 진입 노드, Step이라는 레이블이 붙은 프롬프트 에이전트 노드 하나, 그리고 실행을 끝내는 터미널 센티널이 있습니다. 센티널은 그려지지 않습니다. 편집기는 이 숨겨진 터미널을 도달 가능한 모든 싱크에 다시 연결하므로, Step 뒤에 붙인 작업도 실행됩니다.

노드 라이브러리 사이드바는 편집기 왼쪽에 항상 표시됩니다. 노드 검색 상자로 걸러 내고 항목을 캔버스로 끌어다 놓습니다. 노드는 놓은 자리에 들어가며 들어오는 연결은 없습니다.

팔레트 노드 단계 종류 하는 일
Bash script listen {{state}} 치환과 함께 셸 스크립트를 실행합니다. 에이전트는 디스패치되지 않습니다
Open conversation listen 실행의 유일한 표시 스페이스와 그 체크아웃을 엽니다. 에이전트 노드가 이 방에 참여합니다
Clone PR branch listen gh pr view로 PR 헤드 브랜치를 찾아 실행 디렉터리로 클론합니다
Post PR comment listen 취합한 결과를 GitHub 리뷰 댓글로 PR에 게시합니다
Reviewer (prompt) listen 전문 리뷰어 에이전트를 디스패치하고, 에이전트가 결과를 제출할 때까지 중단합니다
Consolidate (join) join 여러 업스트림 분기를 기다린 뒤 에이전트에게 그 출력을 취합하도록 요청합니다
Custom prompt listen promptAgent 본문을 거치는 범용 프롬프트 기반 노드
Post to space listen 메시징 스페이스에 메시지를 보냅니다
Condition / switch (router) router 상태 값에 따라 흐름을 분기합니다
If file exists (router) router 클론 아래에 경로가 있으면 "true", 없으면 "false"로 라우팅합니다
Any file exists (OR router) router 나열된 경로 중 하나라도 있으면 "true"로 라우팅합니다
All conditions (AND router) router 나열된 경로가 모두 있을 때만 "true"로 라우팅합니다
Team dispatch listen 팀 전체를 디스패치하고 끝날 때까지 중단합니다
Approval gate listen 승인 결정을 기다리며 일시 중지합니다
For each (map) forEach 항목마다 프롬프트를 렌더링한 뒤, 그 프롬프트를 이어 붙여 에이전트를 한 번 디스패치합니다
Call sub-pipeline listen 다른 템플릿을 중첩 단계로 실행합니다
Clean up worktrees listen 오래된 격리 워크트리를 제거합니다. 결정적이며 에이전트는 디스패치되지 않습니다

라이브러리는 이들을 흐름 및 로직, PR 리뷰, 에이전트, 메시징, 코드 아래에 묶습니다. Demo 그룹은 없습니다.

각 작업 노드의 오른쪽 가장자리에는 원형 출력 포트가 있습니다. 그 포트에서 다른 노드로 끌어 연결합니다. 시작 트리거도 같습니다. 각자 자기 포트를 가지므로 일정에서 나간 연결이 수동 실행에서도 나가지 않습니다. 노드 바로 뒤에서 단계 추가(+)를 눌러 그 뒤에 종류를 삽입합니다. 기존 엣지의 중간 지점에 커서를 올리고 ×를 누르면 연결이 끊어집니다.

연결은 그것을 받는 노드에서도 편집합니다.

  1. 다운스트림 노드를 선택합니다. 오른쪽에 구성 패널이 열립니다.
  2. Triggers from까지 스크롤해, 이 노드가 리슨해야 할 업스트림 노드마다 칩을 탭합니다. 선택된 칩을 탭하면 연결이 제거됩니다.
  3. 업스트림 노드가 라우터라면 칩 아래에 라우트 키 블록이 나타나며, 라우터 엣지마다 <node>의 라우트 키 필드가 하나씩 있습니다. 그 엣지가 발화할 키를 입력합니다. 파일 존재 라우터라면 true나 false, 스위치라면 케이스 이름입니다.

각 트리거 노드는 진입 지점입니다. 노드는 여러 업스트림을 리슨하고(팬인) 여러 다운스트림을 먹일 수 있으며(팬아웃), 그래프는 비순환을 유지해야 합니다. 편집기에는 순환 연결을 막는 장치가 없으니 직접 확인하십시오.

터미널 센티널은 캔버스에서 걸러지므로 선택할 수 없습니다. 편집기는 그래프가 바뀔 때마다 그것을 도달 가능한 모든 싱크에 다시 연결하므로, 기본 제공 Step 뒤에 붙인 작업도 실행됩니다. 빈 그래프(작업 후속이 없는 트리거)는 트리거 자체를 나열하므로 실행이 즉시 완료됩니다.

노드를 선택하면 구성 패널이 열립니다. 어떤 필드가 나타나는지는 노드의 본문에 따라 다릅니다.

모든 노드에는 레이블, 입력 키(실행 시 읽는 쉼표로 구분된 상태 키)가 있고, 고급 아래에 리듀서, 시간 제한 (ms), 재시도 횟수, 이 단계가 실패해도 계속, 출력 스키마가 있습니다. listen과 join 노드는 종류를 둘 사이에서 전환할 수도 있습니다.

클론할 저장소 피커(어느 워크스페이스 저장소를 체크아웃할지, 비어 있으면 없음), 스페이스 이름, 여기서 대화 열기 체크박스를 추가합니다. 이 체크박스가 켜져 있으면 대화 이름 필드가 방이 열릴 때의 스트림 이름을 정합니다. 에이전트 노드는 이 방에 참여하며 자기 방을 따로 열지 않습니다.

에이전트(디스패치할 에이전트), 프롬프트 템플릿({{key}}로 입력이나 업스트림 출력을 참조합니다), 출력 키를 추가합니다.

**시간 제한 (ms)**은 초가 아니라 밀리초 단위입니다. 900000은 15분입니다. 900을 입력하면 단계에 0.9초가 주어집니다.

프롬프트 에이전트 노드가 실행되는 대화 모드는 에이전트 노드의 편집기 필드에 없습니다. 방을 만든 Open conversation 노드의 extras['mode'](chat, plan, review)로 전달됩니다(기본값 review). 에이전트 단계에서 설정해도 무시됩니다. 키는 정확히 일치해야 하며, 다른 표기는 조용히 무시됩니다.

Bash 스크립트를 추가합니다. 작업 디렉터리나 환경 필드는 없습니다. 둘 다 구성할 수 없기 때문입니다.

  • 한 실행의 모든 bash 단계는 작업 디렉터리 <cc_root>/pipelines/<runId>/를 공유합니다.
  • GITHUB_TOKEN은 자격 증명 저장소에서 주입되므로 gh와 git clone https://x-access-token:$GITHUB_TOKEN@…가 별도 설정 없이 동작합니다.
  • 스크립트는 문자 그대로 bash 실행 파일로 스폰되므로 서버 호스트의 PATH에 bash가 있어야 합니다. 이는 Windows에서 고려할 사항입니다.

라우터는 조건을 평가해 라우트 키를 반환합니다. 엔진은 라우트 키가 일치하는 다운스트림 엣지만 발화하고 다른 분기는 건너뜀으로 표시합니다.

라우터를 선택하면 출력 키 필드가 조건 편집기로 바뀝니다. 네 가지 모드 중 하나를 고릅니다.

  • 파일 존재 — 하나라도 — 나열된 경로 중 하나라도 있으면 "true"로 라우팅합니다.
  • 파일 존재 — 모두 — 나열된 경로가 모두 있을 때만 "true"로 라우팅합니다.
  • 비교 — 상태 값을 리터럴과 비교합니다.
  • 스위치 — 상태 키의 값으로 라우팅하며 기본 케이스가 있습니다.

그런 다음 나가는 엣지에 일치하는 라우트 키를 설정합니다 (노드 연결하기 참고).

불리언 and / or / not 그룹은 본문에서 지원하지만 이 양식에서는 작성할 수 없습니다. extras.predicate 아래에 손으로 작성한 술어 트리가 필요합니다. 전체 술어와 연산자 어휘는 파이프라인 단계 레퍼런스에 있습니다.

자체 구성은 없습니다. 모든 업스트림 단계를 기다립니다.

게이트는 승인자 에이전트를 게이트 프롬프트와 함께 숨겨진 대화로 디스패치하고 중단합니다. 승인자는 그 대화에서 결정을 구하고, submit_output으로 { "decision": "approved" | "rejected", "reason": "..." } 형태로 제출합니다. 결정은 출력 키(기본값 approval_decision) 아래에 들어가므로, 다운스트림의 스위치 라우터가 그것으로 분기할 수 있습니다.

에이전트에 승인자를, 프롬프트 템플릿에 게이트 질문을 설정합니다. 게이트는 submit_output을 통해 { "decision": "approved" | "rejected", "reason": "..." } 형태로 해결됩니다. Reviewer (prompt) 노드도 같은 방식으로 제출합니다.

팀 ID와 디스패치 모드를 추가합니다. 피커가 제공하는 모드는 정확히 두 가지입니다.

  • allParallel — 멤버마다 작업 하나를 실행하고 모두 완료될 때까지 중단합니다.
  • manager — 리더를 디스패치하고, 리더가 위임합니다.

다른 값이 저장돼 있으면 allParallel로 동작합니다. 리듀서를 append로 설정하면 각 멤버의 결과가 출력 키 아래 목록으로 모입니다.

For each는 기본적으로 items 상태 키를 매핑합니다(노드의 extras.iterableKey / extras.itemKey). 항목마다 프롬프트를 한 번 렌더링하고({{item}} 기본값), 그 프롬프트를 이어 붙여 에이전트를 한 번 디스패치합니다. 빈 컬렉션은 빈 목록으로 즉시 완료됩니다. 항목마다 병렬로 디스패치하는 것이 아닙니다.

Call sub-pipeline은 자식 실행이 종료 상태에 도달할 때까지 중단한 뒤, 자식의 최종 상태를 출력 키(기본값 subflow_result) 아래에 병합합니다. extras.templateId로 자식을 지정합니다. 템플릿은 자기 자신을 호출할 수 없으며, 실패하거나 취소된 자식은 상위 단계를 실패시킵니다. 그러면 그 단계의 재시도와 실패 시 계속 정책이 적용됩니다.

둘 다 편집기 헤더의 수동 실행 뒤에 있습니다.

  1. 수동 실행을 누릅니다.
  2. 수동 실행 허용을 켭니다. 이 스위치는 즉시 저장됩니다. 템플릿이 실행 선택기에 나타나게 하는 manual 트리거 행을 만들거나 삭제합니다.
  3. 상한을 두려면 최대 병렬 실행 수를 설정합니다(무제한이면 비워 둡니다). 초과 실행은 슬롯이 날 때까지 queued 상태로 기다립니다.
  4. 수동 실행이 수집할 폼 필드마다 입력 추가를 누릅니다.
필드 설명
키 값이 저장되는 상태 키이며, {{key}}로 참조합니다
레이블 표시 레이블(기본값은 키)
유형 텍스트, 여러 줄 텍스트, 숫자, 토글, 선택, 저장소
옵션 쉼표로 구분된 선택지, 선택 유형에서만 사용
기본값 미리 채워지는 값
플레이스홀더 빈 필드 안의 힌트 텍스트
도움말 필드 아래의 도움말 텍스트
필수 실행 폼이 빈 값에서 막히는지 여부

저장소 입력은 워크스페이스의 저장소를 고르는 피커를 렌더링하고, repo_id, repo_local_path, repo_full_name, 그리고 저장소에 GitHub 원격이 있으면 repo_owner와 repo_name을 실행 페이로드에 채웁니다.

  1. 대화상자에서 저장을 누릅니다. 입력 편집은 초안에 반영되며, 템플릿을 저장할 때 영속화됩니다.
  1. 편집기 헤더에서 저장을 누릅니다. 저장하기 전까지 헤더에는 “저장되지 않은 변경 사항”이 표시됩니다.
  2. 설정 → 워크스페이스 → 파이프라인 템플릿으로 돌아가 템플릿 행의 스위치가 켜져 있는지 확인합니다. 엔진은 비활성 템플릿의 시작을 거부하며, 비활성 템플릿은 실행 선택기에 절대 나타나지 않습니다.
  3. 자동으로 시작하게 하려면 노드 라이브러리에서 트리거를 캔버스로 끌어다 놓습니다. 파이프라인 트리거 설정을 참고하십시오.