서론
프로젝트를 배포하면서 빌드를 하루에 한 번 이상 진행할 수 있고, 하지 않을 수 있지만
일주일, 한 달로 따지면 많은 빌드를 할 것이다.
여기서 빌드과정마다 dev 환경의 test, build를 진행하고 오류가 없는 jar 파일을,
ec2 서버에 배포하려면 많은 시간을 투자해야 한다.
이러한 반복되는 과정은 자동화할 필요가 있고,
이를 구축하는 방식(CI/CD)은 다양한 도구가 존재하여 비교하고 결정하는 과정을 포스팅하기로 하였다.
이번 글의 목차로는 다음과 같다.
- CI/CD 개념
- 가장 많이 쓰이는 CI/CD jenkins, git action 비교
- Jenkins를 선택한 이유
CI/CD란?
CI = 지속적인 통합(Continuous Integration); 한마디로 “빌드와 테스트 자동화”
CD = 지속적인 전달(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment); 한마디로 “배포 자동화”
CI는 모든 개발이 끝난 후 코드 품질을 관리하는 고전적 방식의 단점을 해소하기 위해 나타난 개념으로,
“지속적인 통합(Continuous Integration)”이라는 말 그대로 코드 변경 사항이 정기적으로 빌드 및 테스트 통합하여
CD, 지속적인 전달/배포
공유 리포지토리에 통합되는 과정을 통해 계속 품질을 유지하면서 개발을 진행하는 방법이다.
Jenkins과 GitHub Actions 차이
특징 | Jenkins | GitHub Actions |
설치 방법 | 별도의 서버 설치 필요 | 클라우드가 있으므로, 별도 설치 필요없음 |
CI/CD 실행 속도 |
작업 또는 작업이 동기화되어 제품을 시장에 배포하는 데 더 많은 시간이 소요 |
비동기 CI / CD 달성 |
이벤트 트리거 | 계정 및 트리거를 기반으로하며 github 이벤트를 준수하지 않는 빌드를 중심 |
모든 github 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임 워크를 지원 |
환경 호환성 | 환경 호환성을 위해 도커 이미지에서 실행해야 함 |
모든 환경과 호환 |
캐싱 지원 | 캐싱 메커니즘을 지원하기 위해 플러그인을 사용 |
캐싱이 필요한 경우 자체 캐싱 메커니즘을 작성 |
확장성 및 공유 | 공유 할 수있는 능력 x | github 마켓 플레이스를 통해 공유 가능 |
문서 가용성 | 전세계많은 사람들이 이용하여 문서가 다양 | 젠킨스에 비해 문서가 없음 |
파이프라인 구성과 가독성 |
파이프라인을 한 곳에서 관리 가능 | CI, UI작업 가독성 측면 우수 |
차이점을 보고 프로젝트 상황에 따라 툴을 쓰는 것이 좋을거라 생각한다.
젠키스 사용 이점
- 프로젝트의 표준 컴파일 환경에서 컴파일 오류 검출
- 자동화 테스트 수행
- 코딩 규약 준수여부 체크
- 프로파일링을 통해 소스 변경에 따른 성능의 변화 감시
- 테스트 환경에 대한 배포작업
- 개발 업무를 도와주는 많은 플러그인을 가지고 있음
GitHub Actions 사용 이점
- 기존의 Circle CI / Travis CI / Jenkins CI와 같은 서비스 또는 설치형 CI처럼 Github에서도 Actions이라는 CI툴을 선보였으며 별다른 복잡한 절차 없이 Github를 통해 사용할 수 있다는 장점이 있다.
- 워크 플로우 복제 용이
- GitHub와 통합
- 라이브 로그
- 다중 컨테이너 테스트
- 리눅스, 맥, 윈도우, ARM 및 컨테이너를 쉽게 빌드, 테스트
- 여러 운영체제 및 런타임 버전에서 동시 테스트 가능
- 모든 언어 어플리케이션 빌드, 테스트 및 배포
만약 여러 서버를 구성하고 관리를 해야되는 측면에서는 Jenkins를 하는게 처음은 힘들 수 있지만,
기능적으로 제공해주는 것도 많고,
라이브러리나 일부 데이터들을 여러 파이프라인에서 공유하는 장점이 있어,
Jenkins가 적합하다고 생각이 든다.
Jenkins를 선택한 이유
별도의 서버 구축
현재 별도의 ec2환경을 구성하여 서버를 배포하고 있기 때문에
aws jenkins 서버를 하나 더 구축하여 인프라 파이프라인 구조를 구성하고 싶었다.
지속적인 통합 및 자동화
Jenkins를 사용하면 코드 변경이 이루어질 때 지속적으로 통합 및 빌드 프로세스를 자동화
하나의 jenkins 서버에서 코드를 커밋할 때 자동으로 빌드 및 테스트를 실행하여
품질 관리를 강화하고 버그를 일찍 찾아내는 데 도움이 될 것 같았다.
커뮤니티 및 문서
Jenkins는 큰 사용자 커뮤니티와 풍부한 문서화 리소스를 가지고 있다.
Jenkins를 사용하면서 발생하는 다양한 문제 및 상황에 대한 지원을 받을 수 있다는 점이 장점이 되었고,
Jenkins의 확장 플러그인에 대한 문서 및 지침도 풍부하여 사용자 정의 작업을 수행하기가 더 쉽다고 한다.
reference
https://developer-nyong.tistory.com/47#article-4--docker
https://choseongho93.tistory.com/295
'Project > 협업프로젝트' 카테고리의 다른 글
[협업프로젝트] Spring Data Elastic Search 설정 및 구현 회고 (1) (0) | 2024.10.13 |
---|---|
[협업프로젝트] Jenkins와 Docker로 CI/CD pipeline 구축하기 (2) (2) | 2023.10.31 |
[협업프로젝트] SpringBoot 프로젝트 EC2, RDS 적용 (0) | 2023.10.30 |
[협업프로젝트] SpringBoot 프로젝트 EC2 배포하기 (1) | 2023.10.29 |
[협업프로젝트] SwaggerUI + Spring RestDocs 로 API 문서화하기 (2) | 2023.10.14 |