CI-CD — GitHub Actions로 자동 빌드와 배포
"CI/CD 없이 3개 플랫폼 빌드를 수동으로 하면 하루가 간다" — GitHub Actions로 자동화하면 push만으로 모든 플랫폼의 빌드와 배포가 완료됩니다.
전체 파이프라인 구조
Push/Tag → 테스트 → 빌드(3플랫폼) → 코드 서명 → 업로드 → Release
GitHub Actions 워크플로
# .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
# 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
# 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
# Linux에서 AppImage, deb 빌드
- name: 빌드 (Linux)
if: matrix.os == 'ubuntu-latest'
run: npx electron-builder --linux AppImage deb --publish always
PR 빌드 (테스트 전용)
# .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
릴리스 자동화 스크립트
{
"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"
}
}
# v1.0.1 태그 생성 → GitHub Actions 자동 트리거
npm run release:patch
면접 포인트 정리
- matrix 전략으로 3개 플랫폼을 병렬 빌드
- 코드 서명 인증서는 GitHub Secrets로 안전하게 관리
--publish always로 GitHub Releases에 자동 업로드- PR에서는
--dir로 인스톨러 없이 빌드만 확인 - 태그 push로 릴리스 파이프라인 자동 트리거
CI/CD를 설정했으면, 다음은 GitHub Releases 배포를 알아봅시다.
댓글 로딩 중...