1. GitHub Actions란?
GitHub Actions는 GitHub에서 제공하는 자동화 도구로, 코드 푸시(push), 풀 리퀘스트(PR), 브랜치 관리 등 다양한 이벤트에 대해 자동화된 작업(workflow)을 실행할 수 있습니다. 이 도구를 사용하면 CI(Continuous Integration, 지속적 통합) 및 CD(Continuous Delivery/Deployment, 지속적 배포)를 쉽게 설정할 수 있습니다.
특히, GitHub Actions는 워크플로우 파일을 YAML 형식으로 작성하여 코드의 변경 사항이 발생할 때마다 빌드, 테스트, 배포 등 여러 작업을 자동으로 실행하도록 설정할 수 있습니다.
2. CI/CD란 무엇인가?
CI/CD는 소프트웨어 개발 및 배포 프로세스를 자동화하여 개발의 효율성을 높이는 방법입니다.
- CI (Continuous Integration, 지속적 통합): 코드 변경 사항이 프로젝트에 통합될 때마다 자동으로 빌드 및 테스트를 수행하는 과정입니다.
- CD (Continuous Delivery, 지속적 배포): CI 이후 검증된 코드를 프로덕션 환경에 배포하는 과정입니다. 자동 배포가 설정되어 있으면, 코드가 통합된 후 자동으로 배포까지 이루어집니다.
이 과정을 통해 코드의 오류를 빠르게 발견하고 수정할 수 있으며, 배포 과정에서 발생할 수 있는 실수를 줄일 수 있습니다.
3. GitHub Actions로 CI/CD 구성하는 방법
3.1. 기본 워크플로우 설정
GitHub Actions는 .github/workflows/ 디렉토리에 YAML 파일로 워크플로우를 정의합니다. 다음은 GitHub Actions에서 기본적인 CI/CD 워크플로우 파일을 설정하는 예시입니다.
# .github/workflows/ci-cd-pipeline.yml
name: CI/CD Pipeline
# 이 워크플로우가 언제 실행될지 정의
on:
push:
branches:
- main
pull_request:
branches:
- main
# 워크플로우 내에서 실행할 job들을 정의
jobs:
build:
runs-on: ubuntu-latest
steps:
# 리포지토리 체크아웃
- name: Checkout code
uses: actions/checkout@v2
# Node.js 설치 및 종속성 설치
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
# 테스트 실행
- name: Run tests
run: npm test
deploy:
runs-on: ubuntu-latest
needs: build
steps:
# 리포지토리 체크아웃
- name: Checkout code
uses: actions/checkout@v2
# 배포 스크립트 실행 (예: AWS, Heroku, Netlify 등으로 배포)
- name: Deploy to production
run: |
echo "배포 명령어를 여기에 추가하세요."
위 예제는 다음과 같은 구조로 동작합니다:
- push 또는 pull_request가 main 브랜치에 발생할 때 워크플로우가 실행됩니다.
- build 작업에서 Node.js 프로젝트의 빌드 및 테스트가 수행됩니다.
- deploy 작업은 build 작업이 완료된 후에 실행되며, 실제 배포 명령을 실행할 수 있습니다.
3.2. 다양한 서비스와의 통합
GitHub Actions는 다양한 서비스와 쉽게 통합됩니다. 예를 들어 AWS, Docker, Netlify, Firebase 등의 플랫폼으로 배포할 수 있으며, actions라는 패키지를 사용해 해당 서비스와 연결할 수 있습니다.
3.2.1. AWS 배포 예시
AWS에 애플리케이션을 배포하려면 aws-actions/configure-aws-credentials을 사용하여 GitHub Actions에서 AWS 자격 증명을 설정하고 aws cli 명령어로 배포할 수 있습니다.
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Deploy to S3
run: |
aws s3 sync ./build s3://my-bucket-name --delete
3.2.2. Docker 이미지 빌드 및 배포 예시
Docker 이미지를 빌드하고 Docker Hub에 푸시하려면 다음과 같은 GitHub Actions 워크플로우를 작성할 수 있습니다.
- name: Log in to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Docker image
run: docker build -t my-app .
- name: Push Docker image
run: docker push my-app
3.3. Secrets 관리
배포 시 중요한 정보(예: API 키, 자격 증명 등)를 저장하기 위해 GitHub Secrets를 활용합니다. GitHub Secrets는 GitHub 리포지토리의 설정에서 추가할 수 있으며, YAML 파일에서 ${{ secrets.MY_SECRET }}와 같은 형식으로 사용할 수 있습니다.
4. GitHub Actions의 장점
- 간편한 설정: GitHub 리포지토리에 YAML 파일 하나만 추가하면 CI/CD 파이프라인을 바로 설정할 수 있습니다.
- 다양한 서비스와의 통합: GitHub Actions는 AWS, Google Cloud, Docker 등 여러 플랫폼과 손쉽게 연동할 수 있습니다.
- 자동화: 코드 변경 사항이 있을 때마다 자동으로 빌드 및 테스트가 실행되므로, 안정적인 코드를 유지할 수 있습니다.
- 강력한 커뮤니티: GitHub Actions는 다양한 오픈소스 액션을 지원하며, GitHub Marketplace에서 유용한 액션들을 쉽게 가져다 쓸 수 있습니다.
5. 결론
GitHub Actions는 CI/CD 파이프라인을 간편하고 효율적으로 구성할 수 있는 도구입니다. 이 가이드를 통해 GitHub Actions의 기본적인 사용법과 CI/CD 파이프라인을 설정하는 방법을 이해하고, 프로젝트에 자동화된 배포 환경을 구축할 수 있을 것입니다.
추가로 GitHub Actions와 연동할 수 있는 다양한 서비스들을 살펴보고, 프로젝트에 맞는 워크플로우를 확장해 나가세요!
키워드:
- GitHub Actions
- CI/CD
- GitHub Actions 워크플로우
- GitHub Secrets
- AWS 배포
- Docker 이미지
- 자동화된 테스트
관련 링크:
이 글은 GitHub Actions로 CI/CD를 구성하려는 개발자를 위한 입문 가이드입니다.