개요
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를 추가로 도입하는 전략도 좋습니다.
'학습 > 시스템' 카테고리의 다른 글
| 쿠버네티스(Node와 Cluster의 범위) (0) | 2025.09.26 |
|---|---|
| kubectl nginx와 apache(httpd) 실행 (1) | 2025.09.23 |
| kubernetes setting config (0) | 2025.09.21 |
| [리눅스] sudo 명령어 사용을 위한 wheel group에 사용자 추가 (0) | 2024.11.06 |
| linux의 history 명령어 실행 시간을 함께 출력하는 방법 (1) | 2024.09.01 |