GitHub Actions 시작하기

GitHub Actions 시작하기

DevOps
GitHub Actions 시작하기
Author

gabriel yang

Published

July 24, 2024

GitHub Actions 시작하기: CI/CD 파이프라인 구축 가이드

GitHub Actions는 GitHub 저장소에서 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인을 쉽게 설정하고 관리할 수 있는 강력한 도구입니다. 이 블로그 글에서는 GitHub Actions를 사용하여 CI/CD 파이프라인을 구축하는 방법을 단계별로 설명하겠습니다.

1. GitHub Actions 소개

GitHub Actions는 코드를 빌드, 테스트, 배포하는 워크플로우를 자동화할 수 있는 기능을 제공합니다. GitHub 저장소에 push, pull request, issue 등 이벤트가 발생할 때마다 워크플로우를 트리거할 수 있습니다.

2. 기본 용어 이해하기

  • 워크플로우(Workflow): 하나 이상의 작업으로 구성된 자동화 프로세스.
  • 잡(Job): 워크플로우 내에서 실행되는 개별 단위 작업.
  • 스텝(Step): 잡 내에서 실행되는 명령어 또는 액션.
  • 액션(Action): 재사용 가능한 커뮤니티 또는 사용자 정의 스크립트.

3. 워크플로우 파일 생성

워크플로우 파일은 .github/workflows 디렉토리에 YAML 형식으로 저장됩니다. 예를 들어, ci.yml 파일을 생성하여 기본적인 CI 설정을 할 수 있습니다.

예제: 간단한 Node.js 프로젝트 CI 설정

name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      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

설명:

  • name: 워크플로우의 이름. 이 이름은 GitHub Actions 인터페이스에서 워크플로우를 식별하는 데 사용됩니다.
  • on: 워크플로우가 트리거되는 이벤트. 워크플로우를 트리거하는 이벤트를 정의합니다. 이 예제에서는 push와 pull_request 이벤트를 사용하여 워크플로우를 트리거합니다.
  • jobs: 워크플로우 내에서 실행되는 작업들.
  • runs-on: 작업이 실행될 환경(예: ubuntu-latest). 작업이 실행될 환경을 지정합니다. 이 예제에서는 ubuntu-latest를 사용하여 최신 버전의 우분투에서 작업이 실행됩니다.
  • steps: 작업 내에서 실행되는 단계들. 작업 내에서 실행될 단계(Step)들을 정의합니다. 단계는 순차적으로 실행됩니다.
    • uses: 특정 액션을 사용하는 단계. GitHub에서 제공하는 액션을 사용합니다.
      • actions/checkout@v2는 GitHub 저장소를 체크아웃하는 액션입니다.
      • actions/setup-node@v2는 Node.js를 설정하는 액션입니다.
    • with: 액션에 전달할 매개변수를 정의합니다. 여기서는 node-version: ’14’를 사용하여 Node.js 버전 14를 설정합니다.
    • run: 명령어를 실행하는 단계.

4. 고급 설정

캐싱 사용

반복적인 의존성 설치를 빠르게 하기 위해 캐싱을 사용할 수 있습니다.

    - name: Cache dependencies
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-

매트릭스 전략

여러 환경에서 테스트를 실행하기 위해 매트릭스 전략을 사용할 수 있습니다.

매트릭스 전략은 CI/CD 워크플로우에서 여러 가지 설정 조합을 테스트할 때 유용한 기능입니다. 이를 통해 코드가 다양한 환경에서 제대로 작동하는지 확인할 수 있습니다. 매트릭스 전략을 사용하면 여러 버전의 언어, 운영 체제, 그리고 기타 종속성 조합에서 빌드와 테스트를 자동화할 수 있습니다.

매트릭스 전략은 jobs..strategy.matrix 속성을 사용하여 설정합니다. 매트릭스의 각 키는 여러 값을 가질 수 있으며, GitHub Actions는 각 조합에 대해 잡을 실행합니다.

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12, 14, 16]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}

    - name: Install dependencies
      run: npm install

    - name: Run tests
      run: npm test

배포 설정

CI 파이프라인이 성공하면 자동으로 배포할 수 있습니다.

jobs:
  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Deploy to server
      run: |
        ssh user@your-server 'bash -s' < deploy-script.sh
      env:
        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

5. GitHub Secrets 사용

배포 시 민감한 정보(예: API 키, 서버 비밀번호)는 GitHub Secrets를 통해 관리할 수 있습니다.

  1. 저장소 페이지로 이동.
  2. Settings 탭 선택.
  3. Secrets 메뉴에서 New repository secret 버튼 클릭.
  4. 이름과 값을 입력하고 저장.

마무리

이제 GitHub Actions를 사용하여 간단한 CI/CD 파이프라인을 구축할 수 있게 되었습니다. GitHub Actions는 매우 유연하고 강력한 도구로, 다양한 요구사항에 맞게 확장할 수 있습니다. 더 많은 정보를 원하시면 GitHub Actions 공식 문서를 참고하세요.

<h3>카테고리 다른 글</h3>
Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Mar 20, 2025 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 gabriel yang
Feb 4, 2025 Windows 11에서 WSL 설치 및 Docker 연결하기 gabriel yang
Oct 7, 2024 Docker Compose로 Jenkins 설치 및 사용하기 gabriel yang
Aug 23, 2024 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 gabriel yang
Dec 31, 2023 우분투와 윈도우 파일 공유하기 (samba) gabriel yang
Dec 5, 2023 crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 gabriel yang
Nov 27, 2023 우분투 docker, docker-compse 설치 gabriel yang
Nov 26, 2023 AWS 호스팅 EC2 와 Lightsail의 차이 gabriel yang
Nov 20, 2023 wsl 이미지 저장 위치 변경 및 백업 gabriel yang
Nov 20, 2023 airflow postgresoperator 사용하기 gabriel yang
Nov 18, 2023 docker-compose로 airflow 설치하기 gabriel yang
Nov 15, 2023 wsl2에 docker 설치하기 gabriel yang
Nov 15, 2023 mkfifo를 이용한 IPC gabriel yang
Oct 9, 2023 Github Pull Request 템플릿 적용하기 gabriel yang
No matching items
Back to BLOG LIST