[CI/CD] Jenkins를 활용한 CI/CD 구현 - 1

chrkb1569·2023년 12월 14일
0

개인 프로젝트

목록 보기
21/28
post-thumbnail

지난 시간에는 Github Action과 AWS CodeDeploy를 사용해서 자동화된 CI/CD환경을 구축해봤습니다.

Github Action 뿐만 아니라, CI/CD환경을 구축할 수 있는 툴은 여러 개 존재하는데, 개인적으로 그 중 Jenkins가 가장 유명하다고 생각하고, 그만큼 전 세계적으로 사람들이 많이 사용하는 CI/CD 툴입니다.

사실 Github Action 보다는 Jenkins를 통하여 CI/CD 환경을 구축해보고 싶었으나, 아무래도 이런 작업이 처음이니 비교적 간단한 github Action으로 맛을 보고 Jenkins를 사용하기로 했었습니다.

그런데 github Action도 그렇게 쉽지는... 않았었는데...?

아무튼 오늘은 간단하게 Jenkins에 대해서 알아보고, 지난 번에 사용했던 github Action과의 차이점 비교, 그리고 대충 어떻게 환경을 구축해야하는지 알아보는 시간을 갖도록 하겠습니다.

Jenkins?

일단 Jenkins 공식 문서에 명시되어 있는 Jenkins의 설명은 다음과 같습니다.

간단하게 정리하자면 소프트웨어의 빌드, 테스트, 배포와 관련된 모든 종류의 작업을 자동화해주는 오픈 소스 자동화 서버를 의미합니다.

도커 이미지나 다른 시스템 패키지를 통하여 설치할 수 있는데, 특이한 점이 자바 환경에서 독립적으로 실행할 수 있다는 특징을 가지고 있습니다.

github Action에서 보았던 것처럼, 프로젝트를 빌드하는 과정에서 오류를 확인할 수 있으며, 이를 인스턴스에 배포해줌으로써 배포에 소모되는 시간을 절약할 수 있다는 특징을 가지고 있습니다.

Jenkins는 github Action에 비하여 오랜 기간동안 사용되어져 왔기에, 많은 자료가 존재하며, 여러 플러그인을 통하여 지원을 받을 수 있습니다.

Jenkins는 github Action과는 조금 다르게 Jenkins를 위한 별도의 인스턴스가 필요하다는 특징을 가지고 있습니다.

Jenkins가 실행될 인스턴스에는 다음과 같은 요구 사항이 존재하는데, 이게 생각했던 것보다 좀 됩니다.

프리티어 기준으로 안될 것 같은 기분이 듭니다.

나중에 해보면 알겠죠 뭐

Github Action vs Jenkins

그럼 Jenkins가 대략적으로 어떠한 기능을 수행하는지 알아보았으니, 비슷한 github Action과는 어떠한 차이점을 가지고 있는지, 한 번 비교해보도록 하겠습니다.

Github Action

자료가 적다

Jenkins와 비교하였을 때, 출시된지 얼마되지 않은 툴입니다.
따라서, 참고할 수 있는 자료가 상대적으로 적은 편입니다.

설정이 간편하다

Jenkins와 비교하였을 때, 설정이 매우 간편하다는 특징을 가지고 있습니다.
Github Action은 러너에서 테스트가 이루어지기 때문에 별도의 인스턴스를 형성할 필요가 없지만, Jenkins의 경우에는 별도의 인스턴스를 생성한 뒤, 자바를 다운 받고, 해당 인스턴스에서 Jenkins를 실행해야 한다는 특징을 가지고 있습니다.

Github MarketPlace

MarketPlace를 통하여 다른 사람이 작성한 스크립트를 빌드 과정에서 사용할 수 있습니다.
이를 통하여 스크립트 작성에 많은 시간이 소비되는 것을 방지할 수 있습니다.

Github와 통합되어있다.

사실 이 점이 가장 큰 장점이라고 생각합니다.
프로젝트의 버전을 관리하기 위한 툴로 대부분 Github를 사용하기 때문에 빌드하기 위한 프로젝트 파일을 바로 넘겨 받을 수 있으며, 특정 트리거(PR, Merge)가 발생하였을 경우 어떠한 행위를 수행할 것인지 설정할 수 있습니다.

Jenkins

자료가 매우 많다

2011년에 발표한 툴이 지금까지 사용되고 있기 때문에 누적된 자료가 매우 방대합니다.
누적된 자료가 많기 때문에 어떠한 버그가 발생하더라도 이미 같은 길을 걸었던 사람들이 존재하기 때문에 해결하기가 용이하다는 장점을 가지고 있습니다.

플러그인 지원

Jenkins는 다음처럼 플러그인을 통하여 원하는 기능을 수행할 수 있습니다.

카테고리를 보면 확인할 수 있지만, 개발에 필요한 여러 유틸 기능들을 지원함을 알 수 있습니다.

인터페이스 작업

별도의 인스턴스에 Jenkins를 성공적으로 실행하였다면, 별도의 인터페이스를 통하여 CI/CD 환경을 구축할 수 있습니다.

아직 Github Action을 많이 사용해보지도 않았고, Jenkins 사용도 이번이 처음이기 때문에, 목적에 맞게 툴을 사용하는 것보다는 사용해보는 경험에 의의를 둘 것 같습니다.

프로젝트 구성

다음처럼 Jenkins를 위한 인스턴스, 그리고 프로젝트를 실행하기 위한 인스턴스, 총 2개의 EC2 인스턴스를 생성하여 배포 자동화를 구현하는 것이 이번 목표가 될 것 같습니다.

Refernce

https://logowik.com/jenkins-vector-logo-4531.html
https://www.jenkins.io/doc/
https://plugins.jenkins.io/ui/search/?sort=relevance&categories=&labels=&view=Tiles&page=1&query=

0개의 댓글