
GitHub Actions는 GitHub 저장소 안에서 직접 코드 빌드, 테스트, 배포 등 각종 자동화 작엄(CI/CD)을 수행할 수 있는 워크플로우 자동화 도구입니다. 코딩, 협업, 배포 등 모든 개발 프로세스를 한 번에 자동화할 수 있는 DevOps 서비스입니다.
| 용어 | 설명 |
|---|---|
| Workflow | 하나 이상의 작업(Job)으로 구성된 자동화 프로세스. 이벤트에 의해 트리거됨. YAML 파일로 .github/workflows/ 폴더에 위치. |
| Event | 워크플로우를 실행하는 조건/트리거. (예: push, pull_request, schedule 등) |
| Job | 한 번에 실행되는 작업 단위. 여러 Step을 포함. 다른 Job과 병렬 또는 순차 실행 가능. |
| Step | Job 내의 실행 명령/단계. 직접 커맨드 실행하거나 Action(재사용 코드) 호출. |
| Action | 워크플로우에서 재사용 가능한 작은 작업 코드 묶음. 공식/서드파티 마켓플레이스에서 활용 가능. |
| Runner | 워크플로우(Job)를 실행시키는 머신. GitHub가 관리하는 호스팅(ubuntu, windows), 직접 설치(Self-hosted) 모두 지원. |
저장소에 .github/workflows/ 폴더 생성, 내부에 .yml 파일 생성
각종 이벤트(on)에 따라 Workflow가 자동 트리거됨 (예: Push될 때마다, 혹은 일정마다 등)
Job과 Step 단위로 명령을 순서대로 실행
성공/실패 로그 및 결과 Action 탭에서 실시간 확인
name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy
run: ./deploy.sh # 실제 배포 스크립트 실행
push & pull_request 이벤트 발생 시 워크플로우 시작CI/CD 파이프라인: 소스코드 변경 시 자동 테스트/배포
정적 분석/린트: 코딩 스타일, 보안, 품질 체크 자동화
정기 작업: 일일/주간 빌드, 문서 자동 생성, 의존성 업데이트
외부 서비스 연동: Slack/Discord 알림, AWS/GCP 배포, Docker 이미지 빌드 등
PR 리뷰 자동화: PR 생성 시 자동 코드 체크, 리뷰, 태그, 머지 등 자동화 작업
Secrets 관리: API Key, 비밀번호 등 민감 정보는 반드시 repository > Settings > Secrets에서 관리 후 워크플로우 내에서 secrets.XXX로 사용
실행환경: 필요한 OS/언어 버전(runs-on: ubuntu-latest, windows-latest 등) 명시
조건문 if: Job, Step 조건부 실행(if: 구문)
디버깅/로그: 실패한 작업은 Actions 탭에서 상세 로그 확인
Marketplace 탐색: 공식/서드파티 액션을 마켓플레이스(https://github.com/marketplace/actions)에서 바로 사용
아래와 같이 다양한 액션을 추가하여 손쉽게 배포, 알림, 자동 태스크를 설정 가능!
- name: Slack Notification
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
- name: Build Docker image
run: docker build -t my-image:latest .
이벤트와 브랜치 정확히 지정: 불필요한 트리거 방지
Secrets는 반드시 암호관리로, 코드에 노출 금지
실행 환경의 일관성(OS, 언어 버전)
에러 로그 적극 활용해서 디버깅