스케줄 파이프라인
크론 스케줄로 정기 실행되는 파이프라인 예제 — 야간 빌드, 보안 스캔, 리포트
크론 스케줄을 사용하여 정기적으로 실행되는 파이프라인 예제입니다.
야간 빌드 + 통합 테스트
매일 자정(UTC)에 전체 테스트 스위트를 실행하고 결과를 Slack으로 알립니다.
name: nightly-build
triggers:
schedule:
branch: main # main 브랜치 기준으로 실행
cron:
- "0 0 * * *" # 매일 자정 UTC (한국시간 오전 9시)
jobs:
# ─────────────────────────────────────────
# 1. 소스코드 체크아웃 (전체 히스토리)
# ─────────────────────────────────────────
checkout:
phase: source
steps:
- name: checkout
uses: "collabops/checkout@v2"
with:
repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
fetch-depth: "0" # 전체 히스토리 (커버리지 비교용)
# ─────────────────────────────────────────
# 2. 의존성 설치
# ─────────────────────────────────────────
install:
phase: deps
needs: [checkout]
steps:
- name: npm-ci
image: node:18
run: |
cd /workspace/source
npm ci # clean install (lock 파일 기준)
# ─────────────────────────────────────────
# 3. 린트 + 타입 체크
# ─────────────────────────────────────────
lint:
phase: test
needs: [install]
steps:
- name: eslint
image: node:18
run: |
cd /workspace/source
npm run lint # ESLint 전체 검사
- name: typecheck
image: node:18
run: |
cd /workspace/source
npx tsc --noEmit # TypeScript 타입 검사 (출력 없이)
# ─────────────────────────────────────────
# 4. 전체 테스트 (커버리지 포함)
# ─────────────────────────────────────────
test:
phase: test
needs: [install]
steps:
- name: full-test
id: test-result
image: node:18
run: |
cd /workspace/source
# 전체 테스트 + 커버리지 리포트 생성
npm test -- --coverage --verbose 2>&1 | tee /tmp/test-output.txt
# 커버리지 수치 추출 (Statements 기준)
COVERAGE=$(grep 'Statements' /tmp/test-output.txt | grep -oP '\d+\.\d+' | head -1 || echo "N/A")
echo "coverage=${COVERAGE}%" >> $COLLABOPS_OUTPUT
env:
CI: "true"
# ─────────────────────────────────────────
# 5. 빌드 검증
# ─────────────────────────────────────────
build:
phase: build
needs: [lint, test] # 린트 + 테스트 모두 통과 후
steps:
- name: build
image: node:18
run: |
cd /workspace/source
npm run build
# ─────────────────────────────────────────
# 6. 결과 알림
# ─────────────────────────────────────────
notify:
needs: [build]
if: "always()" # 성공/실패 관계없이 항상 알림
steps:
- name: slack-notify
uses: "collabops/slack-notify@v1"
with:
webhook-url: ${{ secrets.SLACK_WEBHOOK }}
title: "Nightly Build Report"
message: |
Branch: ${{ collabops.ref_name }}
Commit: ${{ collabops.sha }}
color: good복수 스케줄 예제
triggers:
schedule:
branch: main
cron:
- "0 0 * * *" # 매일 자정 — 전체 테스트
- "0 12 * * 1-5" # 평일 정오 — 추가 검증스케줄 + 수동 실행 조합
스케줄과 수동 실행을 함께 설정하면, 정기 실행 외에도 필요할 때 수동으로 트리거할 수 있습니다.
triggers:
schedule:
branch: main
cron: ["0 0 * * *"] # 매일 자동 실행
workflow_dispatch: # + 수동 실행도 가능