github action 과 jenkins 는 모두 소프트웨어의 빌드, 테스트, 전달 배포 과정을 자동화할 수 있는 도구이다.

jenkins는 비교적 오랫동안 사용되었고, github action은 2018년에 출시한 새로운 기술이다.

 

Jenkins와 Github Action

Jenkins는 다소 오랜 기간 동안 사용된 기술로, 플러그인 관리, 비용 문제, 일관성 없는 동시 빌드 환경 등과 같은 문제가 있다.

 반면에, Github Action은 플러그인 의존성 문제가 덜하고, 클라우드 환경에서 실행되므로 추가적인 서버 설정 없이 파이프라인을 구성할 수 있다는 장점이 있다. 물론, 로컬 서버에서 구동하는 것도 가능하다.

 

병렬 job 수행

jenkins는 파이프라인의 각 단계를 동기적으로 실행한다. 예를 들어, 단위 테스트, 통합 테스트 및 몇몇의 Sonar 검증을 실행해야 하는 경우, 단일 서버 환경에서 실행해야 한다.
github action은 job들을 병렬적으로 수행하기 떄문에 더 빠른 통합이 가능하다.
(Jenkins에서도 이러한 셋팅이 가능하지만 직접 세팅하기 위해선 추가적인 지식과 노력이 필요하다.)

 

CI 수행 후 댓글 달기

구축하려고 했던 CI과정에서 sonarqube를 통한 코드 정적 분석을 수행하고 이 결과 리포트를 pr의 댓글로 자동으로 달아서 pr에서 쉽게 확인할 수 있게 하고자 했다.

이를 구현하고자 먼저 jenkins에서 방법을 찾았고, Github Pull Request Builder 플러그인을 사용하면 해결할 수 있었다.

 

 

하지만 위와 같이 해당 플러그인은 취약점이 존재했기 때문에 사용하기엔 위험하다고 판단했다.

따라서 jenkins 파이프라인에서 pr에 댓글을 다려면 github api를 이용하여 직접 구현해야 하고, 이는 쉽지 않은 작업이다.

이와는 반대로 github action은 마켓플레이스에서 다른 사람이 작성한 action을 재사용하여 pr에 댓글을 달아주는 과정을 쉽게 구현할 수 있었다. 마켓플레이스 링크

 

 

github-hosted-runner에서 제공하는 클라우드의 성능

github action의 workflow는 github에서 제공하는 클라우드에서 실행되는데 이를 github-hosted-runner라고 하고,

사용자가 직접 서버를 셋팅하여 workflow를 실행하도록 하는 경우 self-hosted-runner라고 한다.

  • public Repository는 github-hosted-runner나 self-hosted-runner나 무료이다.
  • private Repository는 github-hosted-runner인 경우 요금이 발생한다.

다음은  github-hosted-runner에서 무료로 제공하는 클라우드 성능이다.

Hardware specification for Windows and Linux virtual machines:

  • 2-core CPU (x86_64)
  • 7 GB of RAM
  • 14 GB of SSD space

Hardware specification for macOS virtual machines:

  • 3-core CPU (x86_64)
  • 14 GB of RAM
  • 14 GB of SSD space

Hardware specification for macOS XL virtual machines:

  • 12-core CPU (x86_64)
  • 30 GB of RAM
  • 14 GB of SSD space

AWS에서 제공하는 EC2 프리티어의 RAM은 1GB~2GB 정도이다.

필자는 EC2 프리티어에서 jenkins 파이프라인을 수행하면서 메모리가 부족해 인스턴스가 중지되는 불편한 경험을 했다. (메모리 문제는 스왑 메모리 설정으로 어느 정도 커버는 가능하다.)

이를 해결하려면 인스턴스를 추가로 할당하여 특정 파이프라인의 stage용도로 사용해야 한다.(ex. 빌드만 수행하는 인스턴스)

이에 비하여 github action은 workflow를 수행하기 위한 서버를 세팅할 필요도 없고 성능도 넉넉하다.

 

마치며

Jenkins와 Github Action 둘 다 강점이 있지만, 어떤 것이 더 나은지는 사용하려는 파이프라인 설계와 필요한 기능들에 따라 달라진다. 

Jenkins는 자유도와 유연성이 더 높지만, Github Action은 설정이 훨씬 간편하다.

 개발자는 구축하려는 CI/CD 파이프라인과 필요한 기능들을 잘 고려하여 적절한 도구를 선택해야 한다.

 

참고 문서

+ Recent posts