첫 워크플로우
이 문서는 실용적인 워크플로우 한 개를 처음부터 끝까지 따라 만들어 봐요.
주제는 “Node.js 앱을 빌드하고 Docker 이미지로 푸시”예요.
파일 위치
Agent는 30초마다 ./workflows/ 디렉토리를 스캔해요.
파일 확장자는 .yaml 또는 .yml을 인식해요.
파일명과 워크플로우의 name은 일치해야 해요. deploy-prod.yaml 안에는 name: deploy-prod가 들어가야 해요.
이름 규칙
| 항목 | 정규식 | 예 |
|---|---|---|
워크플로우 name | ^[a-z0-9][a-z0-9_-]{0,63}$ | deploy-prod, backup_db |
Step name | ^[A-Za-z0-9][A-Za-z0-9 _.-]{0,63}$ | Build App, Run Tests |
최소 예제
name: hello
steps:
- name: greet
run: echo "Hello, Deplite!"이게 끝이에요. 다른 모든 필드는 선택사항이에요.
모든 필드를 사용한 예제
name: deploy-prod
timeout-minutes: 30 # 전체 timeout (기본 60분)
log_retention: 30 # 로컬 로그 보관 개수 (기본 20)
force_allowed: true # force=true 명령 허용 여부 (기본 true)
env: # 모든 step에 적용되는 환경변수
DEPLOY_ENV: production
LOG_LEVEL: info
secrets: # 마스킹되는 환경변수 이름 목록
- DATABASE_URL
- SLACK_WEBHOOK
- DOCKER_PASSWORD
limits:
- type: cooldown
after: 5m # 마지막 실행 후 5분 쿨다운
on: success # success | any
- type: bucket
capacity: 5 # 최대 5번
refill: 1/1h # 1시간마다 1개 충전
steps:
- name: Build Image
run: |
docker build -t myapp:$REF .
working-directory: /app # cd 후 실행
timeout-minutes: 10 # step별 timeout (기본 10분)
log_level: verbose # silent | summary | verbose (기본 summary)
- name: Push
run: |
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
docker push myapp:$REF
timeout-minutes: 15
- name: Smoke Test
run: |
curl -f https://app.example.com/health || exit 1
continue-on-error: true # 실패해도 다음 step 진행시크릿은 어떻게 처리되나요?
secrets:에 나열한 이름은 두 가지 효과가 있어요.
- 로그 마스킹: stdout에서 해당 값이 발견되면
***로 가려져요. - 서버 미전송: 어떤 경우에도 시크릿 값은 서버로 가지 않아요.
시크릿 값 자체는 Agent 머신의 환경변수나 .env 파일로 주입해야 해요.
Docker로 운영한다면 --env-file 또는 K8s Secrets를 사용하세요.
환경변수 우선순위
- Step의
env: - 워크플로우 전역
env: - Agent 프로세스 환경변수 (시스템·
.env)
같은 키가 여러 곳에 있으면 위쪽이 이겨요.
트리거에서 전달되는 값
Webhook이나 chat에서 보낸 ref와 params는 step의 환경변수로 들어와요.
REF— 트리거의ref값 (예: git branch)PARAMS_<KEY>— 트리거의params.<key>값DEBUG— 트리거가debug: true로 호출된 경우1
등록과 갱신
새 파일을 만들거나 수정해도 따로 재시작은 필요 없어요.
Agent가 30초 안에 자동으로 다시 스캔하고 서버에 변경 사항을 보고해요.
즉시 반영이 필요하면 대시보드의 Workflows → Refresh 버튼을 누르세요.
다음으로
최종 수정 일자: