프로젝트 Mook 을 개발 및 배포하는 과정을 정리하는 글입니다.
지속적 통합(Continuous Integration)
중앙 리포지토리에 정기적으로 머지하고 자동화된 빌드 및 테스트를 수행하여 코드의 품질을 확인하는 자동화 프로세스이다.
주요 목적은 품질 관리, 일관성 유지, 신속한 버그 발견 및 해결을 통해 업데이트에 대한 검증 및 릴리스 하는 시간을 단축하는 것
지속적 제공(Continuous Delivery)과 지속적 배포(Continuous Deployment) 두 가지 의미 보유
릴리스하기 위한 준비 과정을 자동화하는 프로세스
CI를 통해 검증한 코드 변경 사항을 항상 배포 가능한 상태로 유지하여 새로운 기능이나 수정 사항을 빠르고 안정적이게 사용자에게 제공하기 위한 프로세스이다.
빠른 피드백을 통해 개선점이나 버그 리포트를 빠르게 반영할 수 있어 전체적인 제품의 품질이 향상된다.
또한, 배포 주기를 짧게 유지하여 배포로 인한 위험을 줄일 수 있고 사용자의 만족도 또한 향상된다.
실제 운영 환경에 자동으로 배포되는 프로세스
지속적 전달에서 한 단계 더 나아간 형태로 지속적 통합과 지속적 제공 단계를 거친 후 사용자에게 자동으로 배포된다.
위의 내용으로 보았을 때, CI/CD는 개발자가 개발하고 배포하는 과정을 자동화하는 프로세스이다.
이 과정을 자동화함으로써 개발자는 더 개발에 집중을 할 수 있고, 빈번한 병합, 빌드, 테스트, 피드백 등을 통해 전체적인 코드의 품질을 관리하고 높은 사용자 만족도를 유지할 수 있다.
크게 3가지
1. Jenkins
2. Github Actions
3. GitLab
가 존재한다.
각 툴의 특징
| Jenkins | Github Actions | GitLab CI/C | |
|---|---|---|---|
| 서버 | 별도의 서버 필요 | 클라우드로 동작 | 클라우드 or 설치형 |
| OS | 모두 호환 | 모두 호환 | 모두 호환 |
| 플러그인 | 많음 | Jenkins보다 적음 | Jenkins보다 적음 |
| 사용성 | GUI를 사용하지만 초기 설정 어려움 | Github에 익숙하면 편함, 초기 설정 쉬움 | Github에 익숙하면 편함, 초기 설정 쉬움 |
| 문서 | 전세계 사람들이 이용하여 다양함 | Jenkins보다 적음 | Jenkins보다 적음 |
| 장점 | 각종 배치 작업의 간략화. 코드 표준 준수여부 검사. 빌드 파이프라인 구성. | Github와의 완벽한 통합. 쉬운 워크플로우 정의. | UI 깔끔. 주기적인 업데이트 있음. 파이프라인 내 모든 Job들이 독립적. Github 내에서 코드 리뷰, 배포 프로세스 관리 가능. |
| 단점 | 프로젝트 규모 작은 경우 리소스 낭비. 호스팅 직접 해야하기 떄문에 별도의 비용 발생. 업데이트 필수. | 복잡한 워크플로우나 특정 요구 사항 설정 어려움. 참고할 문서 비교적 부족함. 단일 작업만 다시 실행 불가. | 속도가 느림. 모든 Job에 대해 artifact를 정의 및 업로드/다운로드 해야함. |
가장 널리 사용되어 정보가 많고 개인적인 경험을 위해 Jenkins를 이번 프로젝트에서 사용하고자 한다.
Redhat - CI/CD 정리
aws - CI (지속적 통합)
aws - CD (지속적 전달)
jud00's tistory - CI/CD란 무엇일까?
trillion-binary' tistory - 자동화 CI/CD 툴 비교
kkh1902's tistory - Gitaction vs Jenkins 개념과 장단점
inpa's tistory - 젠킨스란 무엇인가? (CI/CD)