CI/CD 기본편 GitHub Actions

송범·2025년 10월 10일

CI/CD란?

CI/CD란 Continuous Integration, Continuous Deployment라는 의미를 가지고 있으며 테스트(Test), 통합(Merge), 배포(Deploy)의 과정을 자동화 하는 걸 의미한다.

  • CI/CD의 일반적인 과정

CI/CD를 구축할 때 사용하는 툴

  • GitHub Actions, Jenkins, Circle CI, Travus CU 등등

자주 사용하는 GitHub Actions와 Jenkins의 차이점

구분GitHub ActionsJenkins
형태클라우드형 (GitHub 내장)설치형 (온프레미스/서버 구축)
설정 방식YAML 파일 (.github/workflows)Jenkinsfile 또는 Web UI 구성
러너 관리GitHub-hosted 또는 Self-hostedAgent(Node) 직접 설치 및 관리
초기 설정 난이도매우 쉬움복잡함 (서버 + 플러그인 구성 필요)
비용GitHub 요금제 기준 (무료분 제한)서버만 있으면 무료 (오픈소스)
확장성GitHub Marketplace의 Actions 활용수천 개 플러그인으로 확장 가능
보안 / 접근성GitHub OAuth 기반, 외부 접근 용이내부망, 사내 배포 환경에 유리
속도 / 성능GitHub 인프라 의존 (제한 있음)서버 성능에 따라 자유롭게 확장 가능
대규모 파이프라인단순 워크플로우에 적합복잡한 파이프라인/병렬 빌드에 강함
유지보수자동 업데이트, 관리 쉬움플러그인 버전 충돌 및 관리 필요
추천 사용 환경개인/스타트업/클라우드 중심대기업/내부망/대규모 프로젝트
  • 빠른 구축과 GitHub 연동 중심일 경우 -> GitHub Actions

  • 자유로운 커스터마이징과 내부망 운영 중심(별도의 서버 필요) -> Jenkins

GitHub Actions를 활용한 전체적인 CI/CD 흐름

GitHub Actions를 로직을 실행시킬 수 있는 일종의 컴퓨터이다. CI/CD 과정에서 GitHub Actions는 "빌드, 테스트, 배포"에 대한 로직을 실행하는 역할을 하게 된다.

GitHub Acitons의 CI/CD 일반적인 전체 흐름

  1. 코드를 작성 후 Commit

  2. GitHub에 Push

  3. Push를 감지해서 GitHub Acitons에 작성한 로직이 실행
    a. 빌드(Build)
    b. 테스트(Test)
    c. 서버로 배포(Deploy)

  4. 서버에서 배포된 최신 코드로 서버를 재실행

⭐️ GitHub Actions 기본 문법

  • .github/workflows/파일명.yml 형식으로 만들기
# Workflow : 한 개의 작업의 단위
# Workflow 의 이름을 의미한다.
name: GitHub Actions 실행시켜보기

# Event : 실행되는 시점을 설정
# main 이라는 브랜치에 push 될 때 아래 Workflow를 실행
on:
  push:
    branches:
      - main

# 하나의 Workflow 는 1개 이상의 Job으로 구성됩니다.
# 여러 Job은 기본적으로 병렬적으로 수행된다.
jobs:
  # Job 을 식별하기 위한 id
  My-Deploy-Job:
    # ubuntu 환경 / 가장 최신 버전 (latest)
    runs-on: ubuntu-latest

    # Step : 특정 작업을 수행하는 가장 작은 단위
    # Job 은 여러 Step들로 구성되어 있다.
    steps:
      - name: Hello World 찍기
        run: echo "Hello World" # 리눅스 명령어를 사용

      - name: 여러 명령어 문장 작성하기
        run: |
          echo "Good"
          echo "Morning"

      - name: GitHub Actions 자체에 저장되어 있는 변수 사용해보기
        run: |
          echo $GITHUB_SHA 
          echo $GITHUB_REPOSITORY

      - name: 아무한테나 노출이 되면 안 되는 값
        run: |
          echo ${{ secrets.MY_NAME }}
          echo ${{ secrets.MY_HOBBY }}

  • github Actions 초기 화면

$GITHUB_SHA : github의 commit ID 값

$GITHUB_REPOSITORY : github 레포지토리 경로

민감한 값에 대한 변수 사용

Settings -> Secrets and variables -> Actions -> New repository secret 클릭

  • Name과 Secret 내용 입력

⭐️ GitHub Actions 전체적인 흐름

  • Event → Workflow → Jobs → Steps

1️⃣ Event

  • 트리거(Trigger) 역할

  • 예 : push, pull_request, schedule, workflow_dispatch(수동 실행) 등

2️⃣ Workflow

  • .github/workflows/*.yml 파일 하나 = Workflow 하나

  • 전체적인 파이프라인을 정의 (예 : 빌드 + 테스트 + 배포)

3️⃣ Job

  • 독립된 실행 단위

  • 여러 Job이 병렬 또는 순차(needs:)로 실행 가능

4️⃣ Step

  • Job 내부의 실행 단계 (Actions 실행 또는 Shell Script 실행)
Event (예: push 발생)
   ↓
Workflow (트리거된 YAML)
   ↓
Runner 1 → Job 1
   ├─ Step 1: Run Action
   ├─ Step 2: Run Script
   ├─ Step 3: Run Script
   └─ Step 4: Run Action
   ↓
Runner 2 → Job 2
   ├─ Step 1: Run Action
   ├─ Step 2: Run Script
   └─ Step 3: Run Script

Event가 발생하면 Workflow가 실행되고, Workflow는 여러 Job으로 구성되어 있으며, 각 Job은 여러 Step(명령 또는 Action)으로 이루어집니다.

⭐️ GitHub Actions 공식 문서

https://docs.github.com/ko/actions

profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글