CollabOps

스케줄 파이프라인

크론 스케줄로 정기 실행되는 파이프라인 예제 — 야간 빌드, 보안 스캔, 리포트

크론 스케줄을 사용하여 정기적으로 실행되는 파이프라인 예제입니다.

야간 빌드 + 통합 테스트

매일 자정(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:               # + 수동 실행도 가능

목차