본문 바로가기

Dev. Etc/knowledge

[CI/CD] Jenkins 과 GitHub Actions의 개념, 차이점

 

 

[CI/CD] Jenkins 과 GitHub Action의 개념, 장단점에 대해 포스팅하겠습니다.

 

 


 

JenKinsGitHub Action 소개와 차이점을 앞서 배포, 빌드, 컴파일에 대해 간략하게 알고 싶다면 아래 링크를 참고해주세요.

▶빌드, 배포, 컴파일의 개념 & 차이점 - 바로가기




● Build를 자동화 해야하는 이유
: 빌드는 하루에 한번을 할 수도 있고 아예 하지 않을수도 있지만 일주일, 한달로 따지면 꽤 많이 빌드를 합니다.
그리고 이게 1년이면 많은 시간을 투자해야합니다.
예를 들어 예전에는 java를 빌드할때 javac라는 커맨드를 직접 사용했지만 지금은 IDEA를 이용하면 main() 메소드를 실행했을때 javac를 하고 java가 실행이 됩니다.
이렇게 반복되는 과정은 버튼 하나 or 단축키로 자동화 할 필요가 있습니다.
이유는 이 작업을 하는데도 긴장감, 집중력 등이 소모가 되고 시간도 꽤 걸리는 작업입니다.
수동으로 빌드를 계속 하게되면 이러한 이유와 편리함에 있어서 장점을 지녔기에 자동화의 필요성을 느끼게 됩니다.



jenkins.io 



■ 젠킨스(Jenkins)의 개념
: 젠킨스(Jenkins)는 거의 모든 언어의 조합과 소스코드 리포지토리(Repository)에 대한 지속적인 통합(CI)지속적인 배포(CD)를 무료로 제공합니다.

젠킨스는 다른 일상적인 개발 작업을 자동화할 뿐 아니라 파이프라인(Pipeline)을 사용해 거의 모든 언어의 조합과 소스코드 리포지토리에 대한 지속적인 통합과 지속적인 전달 환경을 구축하기 위한 간단한 방법을 제공합니다.

젠킨스가 각각의 단계에 대한 스크립트 작성의 필요성을 없애주지는 않지만, 사용자가 쉽게 구축할 수 있는 것보다 더 빠르고 더 강력하게 빌드(Build), 테스트, 그리고 배포(deployment) 도구 등 체인 전체를 통합할 수 있는 방법을 제공해줍니다.


■ 젠킨스 동작 방식
: 젠킨스는 주요 운영체제용 자바 8 WAR 아카이브와 설치 패키지, 홈브루(Homebrew) 패키지, 도커 이미지, 그리고 소스코드 형태로 사용할 수 있다. 소스코드는 대부분 자바이며, 몇 개의 그루브(Groovy), 루비(Ruby), 그리고 앤틀러(Another Tool For Language Recognition, ANTLR) 파일이 들어 있습니다.
젠킨스를 실행하면 웹 화면을 생성하며 REST API 호출로 구동 된다.


젠키스 사용 장점

  • 프로젝트의 표준 컴파일 환경에서 컴파일 오류 검출
  • 자동화 테스트 수행
  • 코딩 규약 준수여부 체크
  • 프로파일링을 통해 소스 변경에 따른 성능의 변화 감시
  • 테스트 환경에 대한 배포작업
  • 개발 업무를 도와주는 많은 플러그인을 가지고 있음





 

 

 

 

 

 






■ GitHub Actions의 개념
: Github Actions은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구입니다.
간단하게 말하자면 Github에서 직접 제공하는 CI/CD 도구라고 할 수 있습니다.
Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있습니다.
Workflow는 Runners라고 불리는 Github에서 호스팅 하는 Linux, macOS, Windows 환경에서 실행된다. 그리고 이 Runners를 사용자가 직접 호스팅하는 환경에서 직접 구동시킬 수도 있습니다.(self-hosted runner)
Github 마켓 플레이스에는 여러 사람이 공유한 Workflow는 찾을 수 있으며, 자신이 직접 만들어서 공유할 수도 있습니다.

사용료는 public 저장소는 무료이며, private저장소는 해당 꼐정에 부여된 무료 사용량 이후에 과금이 부과됩니다.
Github 무료 계정의 전체 비공개 저장소를 기준으로 한달에 500MB 스토리지와 실행 시간 2,000분(minute)까지 제공된다.




■ 얼마나 사용할 수 있을까?
: Workflow는 저장소마다 최대 20개까지 등록할 수 있습니다.
그리고 Workflow 안에 존재하는 Job이라는 단계마다 최대 6시간 동안 실행될 수 있고, 초과하게 되면 자동으로 중지됩니다.
그리고 Github 계정 플랜에 따라 전체 Git 저장소를 통틀어 동시 실행할 수 있는 Job 개수가 정해져 있습니다.
Job 안에서 Github API를 호출한다면 1시간 동안 최대 1,000번까지만 가능합니다.




■ GitHub Actions 사용 이점

  • 기존의 Circle CI / Travis CI / Jenkins CI와 같은 서비스 또는 설치형 CI처럼 Github에서도 Actions이라는 CI툴을 선보였으며 별다른 복잡한 절차 없이 Github를 통해 사용할 수 있다는 장점이 있다.
  • 워크 플로우 복제 용이
  • GitHub와 통합
  • 라이브 로그
  • 다중 컨테이너 테스트
  • 리눅스, 맥, 윈도우, ARM 및 컨테이너를 쉽게 빌드, 테스트
  • 여러 운영체제 및 런타임 버전에서 동시 테스트 가능
  • 모든 언어 어플리케이션 빌드, 테스트 및 배포

 

 

 

 

 

 

 


 

 

 Jenkins 과 GitHub Actions 차이점

Jenkins GitHub Actions
서버 설치 필요 클라우드가 있으므로, 별도 설치 필요없음
작업 또는 작업이 동기화되어 제품을 시장에 배포하는 데 더 많은 시간이 소요  비동기 CI / CD 달성
계정 및 트리거를 기반으로하며 github 이벤트를 준수하지 않는 빌드를 중심으로합니다. 모든 github 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임 워크를 지원합니다.
환경 호환성을 위해 도커 이미지에서 실행해야 함 모든 환경과 호환
캐싱 메커니즘을 지원하기 위해 플러그인을 사용할 수 있습니다. 캐싱이 필요한 경우 자체 캐싱 메커니즘을 작성해야합니다.
공유 할 수있는 능력이 없습니다. github 마켓 플레이스를 통해 공유 가능
전세계많은 사람들이 이용하여 문서가 다양 젠킨스에 비해 문서가 없음
페이스북, 넥플릭스, 쿠팡, 카페24, 11번가   등... 업스테이지 AI, Be pro 회사 등...

 

jenkins는 설정에 자신있고 완전한 제어와 비용에 문제가 되지않습니다.

하지만 jenkins에 자신이 없고 더 나은 대안을 찾는사람들에게는 github action이 좋은 선택입니다.

Jenkins는 다양한 IDE를 지원하고 커스터마이징이 다양합니다. 

또한 전세계 많은 사용자들이 이용하고 유명하기때문에 그만큼 문서도 다양합니다.

하지만, 호스팅을 직접 하나부터 열까지 모두 해야하기에 관련된 모든 문서를 관리해야하는 부분과 이로인한 비용이 발생합니다.

이로인해 젠킨스는 규모가 작은 프로젝트의 경우 설정하는데 많은 리소스가 발생하므로 github actions가 좋습니다.

반대로 규모가 클수록 GitHub Actions보다는 jenkins를 추천합니다.

 

GitHub Actions는 GitHub에서 제공하는 완전 관리 형 서비스이므로이를 실행하기 위해 인프라를 확장하고 운영하는 방법을 알 필요가 없습니다.

Jenkins보다 GitHub Actions의 첫 번째이자 가장 중요한 장점은 GitHub Actions의 설정이 쉽다는 것입니다. GitHub 작업은 클라우드에서 작동합니다. 러너라고하는 로컬에서 실행할 수도 있습니다. 반대로 Jenkins에는 공식 관리 서비스 제품이 없습니다.

이러한 이유로 Jenkins 서버에는 설치가 필요하지만 GitHub Actions에는 설치가 필요하지 않습니다. 결과적으로 설정 프로세스는 GitHub Actions에서 훨씬 편리합니다. 게다가 GitHub Actions는 일련의 도커 실행입니다. 그것은 단지 필요 docker build하고 docker run. 따라서 실행 및 디버그가 매우 쉽습니다.

 

처음에는 Jenkins가 GitHub Actions보다 더 유연 해 보입니다. Jenkins는 주로 계정 및 트리거를 기반으로하며 빌드를 중심으로합니다. 이는 GitHub 이벤트를 준수하지 않습니다. 이와 대조적으로 GitHub 작업은 광범위한 범위를 포함합니다. 따라서 모든 GitHub 이벤트에 대해 GitHub 작업이 있습니다.

 

GitHub 작업은 많은 언어와 프레임 워크를 지원하며 YAML로도 작성됩니다. 따라서 코드처럼 편집, 재사용, 공유 및 분기 할 수 있습니다.

저장소를 포크하면 작업이 자동으로 포크되기 때문에 GitHub와 함께 사용하는 것은 간단합니다.

이를 통해 프로젝트를 매우 효율적으로 테스트하고 빌드 할 수 있으며 개발자와 더 가깝게 실행할 수도 있습니다. 또한 GitHub API에 쉽게 액세스 할 수 있으므로 개발자에게 더 인기가 있습니다.

 

GitHub Actions의 또 다른 훌륭한 기능은 GitHub Marketplace 를 통해 서로 공유 할 수 있다는 것 입니다. 다른 개발자가 작성한 액션을 재사용 할 수 있으므로 충분한 시간을 절약하고 이미 사용 가능한 코드를 다시 작성하지 않아도됩니다.


즉, 규모가 크지않은 프로젝트거나 외부 클라우드 서비스를 이용하는 상황등이라면 Jenkins말고 다른 서비스(github actions, gitlab CI 등)도 고려해볼 가치가 있다고 생각합니다.

개발을 하면서 느끼는 거지만, 모든 기술 선택에는 정답은 없습니다.
상황에 맞게 최선의 방법을 채택하여 가장 높은 효율을 낼 수 있는 방안을 선택하는 것도 일류 개발자의 자질이라고 생각합니다.

 

 

 


Ref : https://stackshare.io/stackups/github-actions-vs-jenkins-x
https://knapsackpro.com/ci_comparisons/jenkins/vs/github-actions