트리거
Workflow를 어떻게 발동시킬지 정의하는 객체예요.
하나의 워크플로우에 여러 트리거를 붙일 수 있어요.
공통 옵션
| 옵션 | 설명 |
|---|---|
agentId | 어느 Agent에서 실행할지 |
scopeType | workflow(특정 1개) 또는 agent(같은 Agent의 모든 워크플로우) |
workflowName | scopeType이 workflow일 때만 |
responseMode | async(즉시 jobId 반환) 또는 sync(완료 대기) |
responseTimeoutMs | sync 모드일 때 최대 대기 (기본 30000) |
allowedRefs | 허용할 ref 값 목록 (생략 시 전부 허용) |
allowDebug | debug: true 호출 허용 여부 |
notifyProvider | slack / discord / null |
notifyChannelId | 알림 채널 ID |
notifyOn | always / failure / success / none |
Webhook
가장 기본적인 트리거예요.
curl -X POST https://api.deplite.io/triggers/<id>/run \
-H "Authorization: Bearer tk_..." \
-H "Idempotency-Key: <unique-id>" \
-d '{
"ref": "main",
"debug": false,
"params": {
"environment": "production",
"replicas": 3
}
}'응답 모드
- async: 즉시
{jobId, status: "queued", statusUrl}반환 - sync: 워크플로우 완료까지 대기 후 결과(
status,output) 반환.responseTimeoutMs초과 시 timeout
Idempotency
Idempotency-Key 헤더를 같은 값으로 다시 호출하면, 첫 호출의 Job을 그대로 돌려줘요.
재시도 안전성 확보 시 꼭 쓰세요.
Cron
서버 측 스케줄러가 시간이 되면 자동으로 발동시켜요.
{
"type": "cron",
"cronExpression": "0 2 * * *",
"cronTimezone": "Asia/Seoul",
"cronEnabled": true
}표현식은 5필드 표준이에요.
| 표현식 | 의미 |
|---|---|
0 2 * * * | 매일 02:00 |
*/15 * * * * | 15분마다 |
0 9 * * 1-5 | 평일 09:00 |
0 0 1 * * | 매월 1일 00:00 |
Slack
OAuth로 Slack 워크스페이스를 연결한 뒤, 채널에서 키워드 매칭으로 발동해요.
{
"type": "slack",
"chatProvider": "slack",
"chatTeamId": "T0123456789",
"chatChannelId": "C0123456789",
"chatKeyword": "deploy"
}사용 방식 두 가지:
- 앱 멘션:
@deplite deploy - 슬래시 명령:
/deplite deploy
호출자에게는 ephemeral 메시지(“dispatching…”)가 즉시 보이고, 완료 후 채널에 결과가 알림으로 들어가요(notify 설정 시).
OAuth 설치
# 1. 설치 URL 받기
curl https://app.deplite.io/api/orgs/<orgId>/slack/install-url \
-H "Authorization: Bearer $JWT"
# 2. 받은 URL을 브라우저에서 열어 워크스페이스 승인
# 3. 콜백 자동 처리 후 연결 완료Discord
Slack과 거의 동일한 모델이에요.
{
"type": "discord",
"chatProvider": "discord",
"chatTeamId": "<guild-id>",
"chatChannelId": "<channel-id>",
"chatKeyword": "deploy"
}수동 실행 (대시보드)
대시보드에서 직접 실행할 수도 있어요.
curl -X POST https://app.deplite.io/api/triggers/<id>/run-manual \
-H "Authorization: Bearer $JWT" \
-d '{
"ref": "develop",
"debug": true,
"force": false
}'force: true(owner만 가능)를 주면 레이트 리밋을 우회해요.
이 경우 forceReason을 함께 적어야 하고, audit log에 그대로 남아요.
알림 메시지 예시 (Slack)
Job #abc123 — deploy-prod [SUCCESS]
Ref: main
Duration: 2m 34s
Exit Code: 0Job #def456 — deploy-prod [FAILED]
Ref: feature/x
Duration: 0m 12s
Exit Code: 1
Error: timeout exceeded in step "Push"실전 예시
GitHub Actions에서 webhook 호출
.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Deplite
run: |
curl -fsS -X POST https://api.deplite.io/triggers/${{ secrets.TRIGGER_ID }}/run \
-H "Authorization: Bearer ${{ secrets.DEPLITE_TOKEN }}" \
-H "Idempotency-Key: ${{ github.run_id }}" \
-d '{
"ref": "${{ github.sha }}",
"params": { "actor": "${{ github.actor }}" }
}'GitHub의 CI는 그대로 두고, 민감한 배포 단계만 Deplite로 옮기는 패턴이에요.
Cron 표현식 자주 쓰는 패턴
| 표현식 | 의미 | 쓰임새 |
|---|---|---|
*/5 * * * * | 5분마다 | 헬스체크 |
0 * * * * | 매시 정각 | 큐 정리 |
0 2 * * * | 매일 02:00 | DB 백업 |
0 9 * * 1-5 | 평일 09:00 | 주간 리포트 |
0 0 * * 0 | 매주 일요일 자정 | 주간 통계 |
0 0 1 * * | 매월 1일 0시 | 월간 정산 |
15 3 1,15 * * | 매월 1·15일 03:15 | 격주 배치 |
cronTimezone을 명시하지 않으면 UTC예요. “Asia/Seoul”처럼 IANA 시간대 이름을 쓰세요.
Slack 슬래시 명령 실제 흐름
[user] /deplite deploy ref=v1.2.3
↓
[Deplite] (ephemeral, 호출자만 보임)
⚙️ Received: deploy ref=v1.2.3 — dispatching…
Job: j-7af9
↓
... Agent에서 워크플로우 실행 ...
↓
[Deplite] (notify 채널 게시)
Job #j-7af9 — deploy-prod [SUCCESS]
Ref: v1.2.3 · Duration: 2m 18s · Exit Code: 0
url: https://app.example.comparams는 슬래시 명령의 인수에서 자동 파싱돼서 워크플로우의 PARAMS_REF 환경변수로 들어가요.
동기 응답으로 즉시 결과 받기
responseMode: sync로 만든 webhook은 워크플로우가 끝날 때까지 기다린 뒤 결과를 그대로 돌려줘요. 응답 시간이 짧고 결과 JSON이 바로 필요할 때 유용해요.
curl -X POST https://api.deplite.io/triggers/<id>/run \
-H "Authorization: Bearer tk_..." \
-d '{"ref": "v1.2.3"}'{
"jobId": "j-7af9",
"status": "success",
"exitCode": 0,
"output": {
"deployedRef": "v1.2.3",
"url": "https://app.example.com"
}
}responseTimeoutMs(기본 30000)를 넘기면 응답은 timeout이지만 워크플로우는 계속 실행돼요. jobId로 나중에 상태를 조회할 수 있어요.