<참고>
https://owin2828.github.io/devlog/2020/01/09/cicd-1.html
이번 시리즈에서는
CI/CD 환경을 구축하여 App을 배포해보는 것이 목적이다.
이를 위해 Jenkins를 이용하여 앱을 빌드하고, AWS Code Deploy를 이용해 배포하는 환경을 구축할 것이다.
본격적으로 시작하기 전에 CI/CD 파이프라인 구축을 위한 서비스들이 무엇이 있는지 살펴보고,
다음과 같은 솔루션들의 장단점을 분석하고자 한다.
- Travis
- GitLab CI
- Jenkins
1. Trvais
Travis 로고
별도의 회사였으나, GitHub에서 인수하였다.(GitHub는 MS가 인수함)
오픈소스용 무료 travis.org와 Private Repo를 위한 유료 travis.com을 별도로 운영하고 있고, 내용은 동일하다.장점
- GitHub와의 연동(그냥 깃허브 계정으로 로그인하며 된다.)
- YML 파일을 통한 쉬운 설정
- 다양한 래퍼런스
- 직접 서버를 운영할 필요 없이, Travis에서 알아서 VM으로 호스팅해 줌
- 모든 job이 독립적(서로 간의 영향을 받지 않음)
단점
- Jenkins에 비해 플러그인의 종류가 적음
- 유료 서비스를 사용할 경우, 가격이 꽤 비쌈(기본: 69$/month, 일반: 129$/month)
2. GitLab CI
Gitlab CI 로고
GitLab 서비스에 내장되어 있다.
On-Premise 방식으로 설치하여 사용할 수도 있고, 웹 서비스로 사용할 수도 있다.
GitLab CI만 Runner를 직접 호스팅하여 사용할 수 있는데, 이를 통해 고성능 혹은 서비스에 트고하된 환경에서 실행할 수 있다.
Runner: repo로부터 소스코드를 받아 해당 스크립트를 돌리는 작업을 수행
GitLab의 경우shared runner를 사용해서 계획적으로 돌릴 수 있다.
On-Premise 방식에서는 당연히 지원하고,
GitLab의 클라우드 서비스를 사용하는 경우에도, Runner만 따로 운용할 수 있다.
장점
- GitLab과의 손쉬운 연동
- Runner가 Docker 컨테이너 기반이라, Docker 친화적임(Docker Repo 무료 제공)
- UI가 쉽고 간편함
- 모든 job이 독립적
단점
- 역시나 Jenkins에 비해 플러그인의 종류가 적음
- 모든 job에 대해 artifact를 정의 및 업로드/다운로드를 해야함
3. Jenkins
Jenkins 로고
Java 기반의 오픈소스로 구성되어 있으며, CI계의 아버지라 불린다.
제일 오래된 만큼 다양한 플러그인을 지원하며, 사용자도 관련 문서도 많이 존재한다.장점
- 무료
- 다양한 IDE를 지원하며, 커스터마이징이 다양
- 많은 사용자들을 보유하고 있고, 관련 문서가 다양
- 호스팅을 직접해야하기 때문에 관련된 모든 부분을 관리할 수 있음
단점
- 다양한 플러그인 -> 플러그인 지옥
- 규모가 작은 프로젝트의 경우, 설정하는데 리소스 낭비가 발생할 수 있음
- 호스팅을 직접해야하기 때문에 서버 운영 및 관리 비용이 발생
개인적인 견해로는
CI/CD를 적용해야 한다는 생각에 제일 유명한 Jenkins를 사용하려는 사람들이 많은것 같다.
하지만, Jenkins는 오래된 만큼 장단점이 확실한 솔루션임을 알고 사용했으면 좋겠다.
특히 Build Server를 직접 구매 및 운영해야 하기 때문에 발생하는 단점이 생각보다 크게 다가오게 된다.
하나부터 열까지 전부 환경설정을 구축해야하며, 서버를 관리하는데 발생하는 비용이 낭비가 될 수 있기 때문이다.
Jenkins를 사용할 때, 각종 방화벽 작업이나 서버의 관리 및 운용등은 생각보다 많은 리소스를 요구한다.
따라서 규모가 크지않은 프로젝트거나, 외부 클라우드 서비스를 이용하는 상황등이라면 Jenkins말고 다른 서비스도 고려해볼 가치가 있다고 생각한다.
내가 글을 작성하는 이 블로그 또한 Travis를 사용하여 간단한 CI/CD 형태로 빌드 및 배포하게 되어있다.
개발을 하면서 느끼는 거지만, 모든 일에 정답은 없다.
상황에 맞게 최선의 방법을 채택하여 가장 높은 효율을 낼 수 있는 방안을 선택하는 것도 일류 개발자의 자질이 아닐까.
이 글에서는 언급하지 않았지만, AWS, CircleCI등 수많은 다른 방법도 존재한다.
Reference
'Cloud + System > CI,CD' 카테고리의 다른 글
무중단배포의종류(롤링,블루그린,카나리) (0) | 2021.10.19 |
---|---|
Travis-ci 란? (0) | 2021.10.16 |
CI/CD란 무엇인가 (Feat. DevOps 엔지니어) (0) | 2021.10.14 |