DevOps 환경에서 CI/CD(지속적 통합 및 지속적 배포)는 소프트웨어 개발 프로세스의 핵심 요소입니다. GitHub Actions는 이러한 자동화를 간편하게 구현할 수 있는 도구로, GitHub 레포지토리와 밀접하게 통합되어 있어 많은 개발자들에게 인기를 끌고 있습니다. 이번 포스팅에서는 GitHub Actions를 사용해 CI/CD를 자동화하는 방법을 실습을 통해 알아보겠습니다.

1. GitHub Actions 소개

GitHub Actions는 CI/CD 파이프라인을 구축할 수 있는 기능을 제공하며, 워크플로(Workflow)를 정의하여 코드 변경 사항에 따라 자동으로 빌드, 테스트, 배포를 수행할 수 있습니다. YAML 파일 형식으로 워크플로를 작성하며, 이를 통해 다양한 이벤트(예: 푸시, 풀 리퀘스트 등)에 대한 작업을 정의할 수 있습니다.

2. GitHub Actions 워크플로 만들기

2.1 기본 설정

먼저 GitHub에서 새로운 레포지토리를 생성합니다. 레포지토리가 생성되면 .github/workflows 경로에 YAML 파일을 만들어 워크플로를 정의합니다. 예를 들어, ci-cd.yml 파일을 생성해보겠습니다.

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@v2

    - 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

위의 YAML 파일은 다음과 같은 역할을 수행합니다:

  • 이벤트 트리거: push 또는 pull_request가 발생할 경우 워크플로를 실행합니다.
  • jobs: build라는 이름의 작업을 정의하며, Ubuntu 최신 버전에서 실행됩니다.
  • steps: 각 단계별로 필요한 작업을 기술합니다. 코드 체크아웃, Node.js 설정, 의존성 설치, 그리고 테스트 실행이 포함됩니다.
  • 2.2 배포 단계 추가

    CI/CD 파이프라인의 핵심은 배포 단계입니다. 배포를 위해 추가적인 스텝을 다음과 같이 작성할 수 있습니다. 여기서는 AWS S3에 배포하는 예제를 보여드리겠습니다.

    다음과 같이 배포 단계를 추가해보세요:

        - name: Deploy to S3
          uses: jakejarvis/[email protected]
          with:
            args: --acl public-read --follow-symlinks --delete
          env:
            AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
            AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
            AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            SOURCE_DIR: './build'

    위 코드에서는 jakejarvis/s3-sync-action 액션을 사용하여 S3에 배포합니다. AWS 자격 증명과 S3 버킷 이름은 GitHub Secrets에 저장된 값을 참조합니다. 이를 통해 보안을 강화할 수 있습니다.

    3. GitHub Secrets 설정

    AWS 자격 증명 및 S3 버킷 이름을 GitHub Secrets에 추가합니다. 레포지토리의 "Settings"에서 "Secrets and variables" -> "Actions"를 클릭하여 새로운 시크릿을 추가합니다.

  • AWS_S3_BUCKET: S3 버킷 이름
  • AWS_ACCESS_KEY_ID: AWS 액세스 키
  • AWS_SECRET_ACCESS_KEY: AWS 비밀 키

4. 워크플로 테스트

모든 설정이 완료되면, 레포지토리에 변경 사항을 푸시하거나 풀 리퀘스트를 생성하여 워크플로를 테스트할 수 있습니다. GitHub의 "Actions" 탭에서 워크플로의 진행 상태를 확인할 수 있습니다. 각 단계의 로그를 통해 문제가 발생했을 경우 디버깅이 가능합니다.

마무리

이번 포스팅에서는 GitHub Actions를 사용하여 CI/CD 파이프라인을 자동화하는 방법을 알아보았습니다. GitHub Actions의 강력한 기능을 활용하면 개발 및 배포 과정을 간소화하고, 코드 품질을 높일 수 있습니다. 지속적인 통합 및 배포를 통해 팀의 생산성을 높이고, 더 나은 소프트웨어를 제공할 수 있습니다. 여러분도 GitHub Actions를 활용해 보시기 바랍니다!