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 파이프라인과 필요한 기능들을 잘 고려하여 적절한 도구를 선택해야 한다.

 

참고 문서

EC2란?

Amazon Elastic Compute Cloud(Amazon EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스다.

안정적인 확장 가능한 인프라에 온디맨드로 액세스한다.

온디맨드란 AWS와 같은 외부 서비스 공급자가 데이터를 호스트하는 것을 말한다. 클라우드 공급자가 모든 하드웨어, 소프트웨어 및 기타 지원 인프라를 조달하고 자사의 데이터 센터에 설치 및 관리한다. 비즈니스는 인터넷을 통해 PC, 웹 브라우저 또는 모바일 앱에서 서비스에 액세스하고 계정을 관리한다.

조직 내에서 서버를 물리적으로 관리하는 온프라미스는 서버의 수평적  확장인 scale-out 확장을 하기 위해서는 물리 서버를 추가로 주문하고, 설치하는 과정에서 많은 시간이 들게 된다. 서버를 들여 놓을 공간도 필요하고 직접 관리해주어야 하는 단점도 있다.

 

온디맨드는 서버를 직접 관리하지 않고 네트워크를 통해 관리하기 때문에 쉽고 빠르게 sacle-out 방식의 확장을 하기 매우 쉽다.

 

 

1.  인스턴스 

AWS에 회원가입을 하고, 로그인을 하면 다음과 같은 대시보드를 확인할 수 있다.

가상 머신 시작으로 EC2 인스턴스를 시작한다.

 

2. 인스턴스 시작

인스턴스의 이름을 입력한다.

 

3. OS 및 아키텍처 선택

Ubuntu 22.04 LTS, 64비트 ARM으로 선택했다.

 

4. 인스턴스 유형

Arm 아키텍처는 t4g.small을 프리티어로 제공하고 있으니 이를 선택한다. x86 아키텍처는 무료로 사용 가능한 다른 인스턴스 유형을 제공하고 있으니 프리티어에서 사용가능한 인스턴스 유형을 선택하면 된다.

 

5. 키 페어 생성

적당한 키 페어 이름을 설정하고 키 페어 유형과 파일 형식을 선택한다. 

주의 : 프라이빗 키 파일을 절대로 외부에 유출하는 일이 없도록 하자. 

이 파일을 통해서 인스턴스에 접속할 수 있기 때문에 누군가 접속해서 채굴기로 쓰는 등 악용한다면 수 많은 비용 청구를 겪게 될 것이다.

주변에서도 실수로 이 파일을 유출해서 몇 백만원씩 피해를 봤다는 소문을 듣기도 했다.

6. 네트워크 설정

하나의 인스턴스만 사용할 것이기 때문에 네트워크 설정은 따로 하지 않았다.

추가적인 인스턴스를 할당해서 VPC를 구성한다면 네트워크 설정을 해야 할 것이다.

ssh로 접속해서 사용하고 웹 서버를 배포할 목적이기 때문에 HTTP 트래픽과 HTTPS 트래픽을 허용했다.

인바운드 규칙은 가능하다면 액세스 가능한 IP를 제한하여 사용하는 것이 좋다.

 

7. 인스턴스 시작

선택한 옵션들을 확인하고 인스턴스를 시작한다.

스토리지는 현재 30GiB까지 무료로 제공하고 있어서 30GiB로 설정했다.

인스턴스 시작 버튼을 눌러서 시작한다.

 

8. 확인

EC2 대시보드로 돌아와서 실행 중인 인스턴스를 확인한다.

인스턴스에는 퍼블릭 주소가 있는데, 퍼블릭 주소와 아까 생성했던 pem파일을 통해 ssh 접속을 할 수 있다.

터미널에서 pem 파일이 있는 경로에서 다음 명령어를 실행해 인스턴스에 접근이 가능한지 확인해보자.

ssh -i key_pair.pem ubuntu@xxx.xxx.xxx.xxx

key_pair.pem은 아까 위에서 발급했던 키 페어 파일 이름이고 xxx는 인스턴스의 퍼블릭 주소를 입력하면 된다.

 

참고 문서

- https://www.microsoft.com/ko-kr/microsoft-365/business-insights-ideas/resources/cloud-storage-vs-on-premises-servers

- https://aws.amazon.com/ko/pm/ec2/?trk=4c74fd91-5632-4f18-ac76-a6c66c92e185&sc_channel=ps&ef_id=CjwKCAjw-vmkBhBMEiwAlrMeF4sD-cYm0FfqQgCGMyxrtG121K9moRvGfOKfkvBDxlPJylrD9vAYSxoCcGMQAvD_BwE:G:s&s_kwcid=AL!4422!3!477202774503!p!!g!!ec2!11549843702!111422709806 

 

+ Recent posts