Introduction
- 빠르게 변화하는 시장속에서 빌드/배포를 자동화 시켜주는 DevOps의 중요성은 점점 높아져가고 있으며 이를 구축하기 위한 도구들은 다양합니다.
- CI/CD를 구축할 수 있는 대표적인 도구 3가지 Jenkins, Github Action, Tekton 3가지를 비교해보겠습니다.
Jenkins
소개 및 장점
- Jenkins : 소프트웨어 빌드, 테스트, 전송 또는 배포와 관련된 모든 종류의 작업을 자동화하는 데 사용할 수 있는 오픈 소스 자동화 서버
- 전세계에서 가장 많이 사용되고 있는 CI/CD 도구로 대부분의 기업들이 사용
- 무료로 사용할 수 있으며 1000개 이상의 플러그인을 통해 쉽게 기능을 확장 가능
- 러닝 커브가 낮고 범용성이 높습니다.
단점
- 서버의 리소스를 초과해서 사용하는 CI/CD 작업을 실행시 서버가 다운될 수 있습니다.
- 장애가 나서 서비스가 내려갔을 경우 그동안 git webhook 이벤트를 받을 수 없습니다.
- JVM으로 인해 사용중이지 않을 때도 메모리를 잡아먹으며 클라우드 환경에서는 불필요한 비용 발생합니다.
- K8S 환경에서 사용할 경우 추가적으로 플러그인을 설치해야 하며 자격증명을 위한 설정이 필요합니다.
- 깃허브에 접근하기 위해 자격증명을 위한 설정이 필요합니다.
- 플러그인을 최신 상태로 유지해야하며 업데이트 하지 않을 경우 장애가 발생 할 수 있습니다.
UI
Github Action
소개 및 장점
- GitHub Action : Github에서 제공하는 빌드, 테스트 및 구축 파이프라인을 자동화할 수 있는 지속적인 통합 및 CI/CD(Continuous Delivery) 플랫폼
- Local Hosted Runner 설치를 통해 원하는 환경 (linux, max, window)을 구성 가능
- 추가적인 설치 과정 없이 Github에서 제공하는 환경에서 CI/CD 진행 가능
- GitHub에 접근할 때 자격증명을 위한 설정이 필요하지 않습니다.
- GitHub 마켓플레이스를 통해 다른 사람들이 작성해 놓은 파이프라인을 사용하거나 자신이 작성한 파이프라인을 공유 가능
- CI/CD 과정을 GitHub 페이지에서 모두 확인 할 수 있습니다.
단점
- 깃허브에서 제공하는 환경은 Public Repository에서는 무료로 사용 가능하지만 Private Repository에서는 요금 발생
- Local Hosted Runner을 사용해 새로운 환경을 구축할 경우 서버에 장애가 일어나거나 리소스를 초과할 경우 개발자가 직접 문제를 해결해야 합니다.
UI
Tekton
소개 및 장점
- Tekton : CI/CD 파이프라인을 구축할 수 있는 Cloud Native 오픈 소스
- Kubernetes 내부에서 동작하도록 설계된 서비스로 Tekton의 구성 요소들은 CRD(Custom Resource Definitions)로 정의되어 Kubernetes CLI와 API call로 사용 가능
- Tekton의 Task들은 파이프라인과 독립적으로 사용할 수 있어서 모듈화가 잘 되어 있음
- Self-Healing : 서버에 장애가 났을 경우 동적으로 회복 가능
- Auto Scaling :서버의 사용량에 따라 서버의 크기를 동적으로 조절 가능
- SeverLess : 서비스가 사용 되고 있지 않을 때 자원을 소모하지 않으며 파이프 라인 구동 시 ServeLess 형태로 구동
단점
- 러닝 커브가 높고 관련 정보가 많이 없습니다.
- 쿠버네티스 내부에서만 동작 가능
- Github, Docker Hub 등 외부 서비스에 접근하기 위해서는 자격증명 설정이 필요합니다.
UI
정리
- CI/CD를 구축하기 위한 도구는 Jenkins, Github Action, Tekton 등 다양하게 존재합니다.
- 현재 가장 많이 사용 되는 Jenkins는 러닝 커브가 낮고 범용성이 높지만 플러그인 관리, 장애 대처, 자격 증명 등의 단점도 존재합니다.
- Github Action은 서버를 직접 관리하지 않아도 되며 깃허브 페이지에서 모든 과정을 확인할 수 있다는 장점이 있지만 요금을 지불해야한다는 단점이 존재합니다.
- Tekton은 Kubernetes 환경에서 동작해서 Auto Scaling, Self-Healing, Serverless 등 서버 관리에 이점이 있지만 관련 정보가 적다는 단점이 있습니다.
- Kubernetes를 사용하고 있는 환경을 잘 이해하고 있으며 자신이 직접 파이프라인을 구축할 수 있는 사용자는 Tekton을, 요금을 지불할 수 있는 사용자는 GitHub Action을, 오픈소스로 빠르게 CI/CD를 구축하고 싶은 사용자는 Jenkins를 사용하는 것이 적절합니다.
Reference
https://uzihoon.com/post/eabb9930-5f8a-11ea-8839-c791ea9b277c
https://wookiist.dev/155
https://gruuuuu.github.io/cloud/tekton/