"CI/CD 없이 3개 플랫폼 빌드를 수동으로 하면 하루가 간다" — GitHub Actions로 자동화하면 push만으로 모든 플랫폼의 빌드와 배포가 완료됩니다.


전체 파이프라인 구조

PLAINTEXT
Push/Tag → 테스트 → 빌드(3플랫폼) → 코드 서명 → 업로드 → Release

GitHub Actions 워크플로

YAML
# .github/workflows/release.yml
name: Release

on:
  push:
    tags:
      - 'v*'

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test

  build:
    needs: test
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: 의존성 설치
        run: npm ci

      - name:  빌드
        run: npm run build

      - name: 패키징
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # macOS 코드 서명
          CSC_LINK: ${{ secrets.MAC_CERTIFICATE }}
          CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTIFICATE_PASSWORD }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
        run: npx electron-builder --publish always

      - name: 아티팩트 업로드
        uses: actions/upload-artifact@v4
        with:
          name: release-${{ matrix.os }}
          path: |
            release/*.dmg
            release/*.exe
            release/*.AppImage
            release/*.deb

플랫폼별 주의사항

macOS

YAML
# macOS에서만 실행되는 공증 단계
- name: 공증 (macOS)
  if: matrix.os == 'macos-latest'
  env:
    APPLE_ID: ${{ secrets.APPLE_ID }}
    APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
  run: npx electron-builder --publish always

Windows

YAML
# Windows 코드 서명
- name: 코드 서명 (Windows)
  if: matrix.os == 'windows-latest'
  env:
    CSC_LINK: ${{ secrets.WIN_CERTIFICATE }}
    CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTIFICATE_PASSWORD }}
  run: npx electron-builder --publish always

Linux

YAML
# Linux에서 AppImage, deb 빌드
- name: 빌드 (Linux)
  if: matrix.os == 'ubuntu-latest'
  run: npx electron-builder --linux AppImage deb --publish always

PR 빌드 (테스트 전용)

YAML
# .github/workflows/ci.yml
name: CI

on:
  pull_request:
    branches: [main]

jobs:
  test-and-build:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test
      - run: npm run build
      # 테스트 빌드만 — 배포하지 않음
      - run: npx electron-builder --dir

릴리스 자동화 스크립트

JSON
{
  "scripts": {
    "release:patch": "npm version patch && git push --follow-tags",
    "release:minor": "npm version minor && git push --follow-tags",
    "release:major": "npm version major && git push --follow-tags"
  }
}
BASH
# v1.0.1 태그 생성 → GitHub Actions 자동 트리거
npm run release:patch

면접 포인트 정리

  • matrix 전략으로 3개 플랫폼을 병렬 빌드
  • 코드 서명 인증서는 GitHub Secrets로 안전하게 관리
  • --publish always로 GitHub Releases에 자동 업로드
  • PR에서는 --dir로 인스톨러 없이 빌드만 확인
  • 태그 push로 릴리스 파이프라인 자동 트리거

CI/CD를 설정했으면, 다음은 GitHub Releases 배포를 알아봅시다.

댓글 로딩 중...