본문 바로가기

학습/시스템

Jenkins vs GitHub Actions + Self-hosted Runner 비교

개요

CI/CD 파이프라인 구축 시 가장 많이 사용되는 두 가지 방식을 비교합니다. 최근 Synology NAS에 GitHub Actions + Self-hosted Runner를 구성하면서 Jenkins와의 차이점을 정리했습니다.

아키텍처 비교

Jenkins 방식

개발자 Push
    ↓
Jenkins 서버가 웹훅으로 감지
    ↓
Jenkins가 빌드/배포 스크립트 실행
    ↓
배포 대상 서버에 결과물 전달

Jenkins가 CI/CD 전체를 직접 관리하고 실행합니다.

GitHub Actions + Runner 방식

개발자 Push
    ↓
GitHub Actions가 감지 (GitHub 클라우드)
    ↓
워크플로우 정의 확인 (.github/workflows/*.yml)
    ↓
Self-hosted Runner에게 작업 전달
    ↓
Runner가 빌드/배포 스크립트 실행

GitHub 클라우드가 트리거/관리를 담당하고, Runner는 실행만 담당합니다.

상세 비교

항목 Jenkins GitHub Actions + Runner
호스팅 자체 서버 필수 GitHub 클라우드 + Runner(선택)
트리거/관리 Jenkins 서버 GitHub 클라우드
실행 환경 Jenkins 서버 GitHub-hosted 또는 Self-hosted Runner
설정 방식 Web UI + Jenkinsfile(Groovy) YAML 파일 (.github/workflows/)
초기 설정 복잡함 간단함
리소스 사용 상시 1-2GB 메모리 Runner만 실행 시 사용
플러그인 1,800+ 플러그인 GitHub Marketplace Actions
버전 관리 별도 관리 필요 워크플로우 파일이 코드와 함께 버전 관리
비용 무료 (서버 비용만) Public 레포 무료, Private 월 2,000분

장단점 정리

Jenkins

장점

  • 완전 무료 (오픈소스)
  • 플러그인 생태계가 매우 풍부
  • 복잡한 파이프라인 구성에 유리
  • GitHub, GitLab, Bitbucket 등 모든 Git 서비스와 연동 가능
  • Web UI로 실시간 모니터링 편리

단점

  • 초기 설정에 시간이 많이 소요
  • 서버 상시 운영으로 리소스 소모
  • Groovy 문법 러닝커브
  • 보안 업데이트 직접 관리 필요

GitHub Actions + Self-hosted Runner

장점

  • 설정이 간단 (YAML 파일만 작성)
  • GitHub과 완벽한 통합
  • 워크플로우가 코드와 함께 버전 관리
  • Self-hosted Runner 사용 시 시간 제한 없음
  • Runner는 작업 시에만 리소스 사용

단점

  • GitHub 종속 (GitLab 사용 시 GitLab CI 별도 사용)
  • Private 레포는 GitHub-hosted 사용 시 시간 제한
  • 복잡한 파이프라인은 YAML이 길어짐

Self-hosted Runner란?

GitHub Actions의 실행 환경입니다. GitHub에서 제공하는 클라우드 Runner 대신 자체 서버(NAS, 온프레미스 등)에 설치하여 사용합니다.

특징

  • Private 레포도 시간 제한 없이 무료
  • 내부 네트워크 리소스 접근 가능
  • 커스텀 환경 구성 가능

설치 방법 (Docker)

version: "3.8"
services:
  github-runner:
    image: myoung34/github-runner:latest
    container_name: github-runner
    restart: unless-stopped
    environment:
      - REPO_URL=https://github.com/your-org/your-repo
      - RUNNER_TOKEN=your-token
      - RUNNER_NAME=nas-runner
      - LABELS=self-hosted,linux,x64,nas
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

워크플로우 예시 비교

Jenkinsfile (Jenkins)

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh './gradlew clean build'
            }
        }
        stage('Deploy') {
            steps {
                sh 'docker restart tomcat-app'
            }
        }
    }
}

deploy.yml (GitHub Actions)

name: Build and Deploy

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: [self-hosted, nas]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '8'
          distribution: 'temurin'
      - run: ./gradlew clean build
      - run: docker restart tomcat-app

어떤 것을 선택해야 할까?

Jenkins 추천

  • 여러 프로젝트를 중앙에서 관리해야 할 때
  • GitHub 외 다른 Git 서비스(GitLab, Bitbucket) 사용 시
  • 복잡한 파이프라인과 승인 프로세스가 필요할 때
  • 이미 Jenkins 운영 경험이 있을 때

GitHub Actions + Runner 추천

  • GitHub을 주로 사용할 때
  • 빠르게 CI/CD를 구축하고 싶을 때
  • 서버 관리 부담을 줄이고 싶을 때
  • 워크플로우를 코드와 함께 관리하고 싶을 때

결론

두 도구 모두 훌륭한 CI/CD 솔루션입니다. GitHub을 사용 중이고 간단한 파이프라인이 필요하다면 GitHub Actions + Self-hosted Runner로 시작하는 것을 추천합니다. 이후 요구사항이 복잡해지면 Jenkins를 추가로 도입하는 전략도 좋습니다.