CI(Continuous Integration)
CI는 팀 구성원이 하루에 한 번 이상 작업을 통합할 수 있는 소프트웨어 개발 방법이다. 이 방법에서 모든 통합은 오류를 검색하기 위해 자동화된 빌드에 의해 확인된다. CI라는 개념은 프로젝트가 끝날 때까지 통합이 연기될 때 발생하는 "Integration Hell"을 피하기 위해 20여 년 전에 처음 도입되었다.
CI 동작하는 과정
- 개발자가 코드를 작성하고 공유 저장소(Git)에 변경 사항을 커밋한다.
- 그 후 CI 서버는 리포지토리를 모니터링하고 모든 변경 사항을 평가한다.
- CI는 시스템을 구축하고 통합 및 단위 테스트를 수행한다.
- 서버가 배포 가능한 앱을 릴리스한다.
- CI 서버는 버전 및 빌드된 코드에 빌드 태그를 할당한다.
- 그런 다음 CI 서버는 성공적인 빌드에 대해 개발 팀에 보고한다. 만약 테스트가 실패하면 서버는 개발 팀에 이벤트에 대해 경고를 보낸다.
Travis CI vs Jenkins
Travis CI
Travis CI는 최초로 상용된 CI 서비스 툴이다. 클라우드에서 코드를 작성하는 새로운 접근 방식을 도입했다. 이 CI 툴을 사용하면 유저는 회원가입하고 레포지토리를 연결할 수 있다. 그리고 그 연결된 앱을 빌드하고 테스트 할 수 있다.
Travis CI 툴은 GitHub 및 Bitbucket과 같은 일반적인 클라우드 레포지토리와 쉽게 연동할 수 있다. Travis CI 서버가 클라우드에서 호스팅되므로 전용 서버에서 따로 커스텀이 필요없는 이미 지정된 CI 옵션들을 많이 제공한다. 이를 통해 다양한 운영 체제에서 실행되는 다양한 환경, 다양한 시스템에서 테스트할 수 있다.
Travis CI는상업용(private) 프로젝트는 유료이고 오픈 소스(public repository)는 첫 사용자에게 10,000 크레딧이 주어진다. 크레딧은 OS마다 다르게 빌드하는데 걸리는 분당으로 계산되어 소요된다. (참고)
- 테스트 용으로 MacOS위에서 가벼운 프로젝트 빌드 20~30번 정도하니 1,000 크레딧이 소요되었다.
Jenkins
DevOps World 2020에서 수상 경력을 가진 Jenkins는 배포 싸이클의 실행을 모니터링 할 수 있는 CI 툴이다. 처음에 Sun의 소프트웨어 엔지니어 그룹의 부수적인 프로젝트로 시작되었다. 계속되는 인기로 소프트웨어 개발 팀들이 사용하는 가장 인기있는 배포 자동화 CI 툴 중 하나가 되었다. Jenkins는 Java 기반 도구이므로 JRE만 있으면 작동이 가능하다. 따라서 Java가 실행되는 모든 운영체제에 설치할 수 있다.
Jenkins에서 대규모 플러그인이 지원하기 때문에 개발자가 자신의 커스텀화된 빌드를 위해서 세세한 조건을 직접 설정할 수 있다는 것이 장점이다. 이를 통해 Jenkins의 작동 방식을 변경할 수 있다.
Travis CI vs Jenkins 비교하기
Jenkins | Travis-CI | |
비용 | 젠킨스는 무료이다. 그러나 직접 전용 서버를 구축하고 유지 관리해야 한다. 이 관리 비용을 추가 비용으로 간주될 수 있다. (개인 프로젝트의 경우 EC2 프리티어 swap 공간으로 메모리 할당하여 무료로 사용 가능 - 참고) |
Travis CI 엔터프라이즈 제품군은 월 $129부터 시작한다. 필요한 지원 수준에 따라 비용이 증가한다. |
Set up 타임 | Jenkins는 정교한 설정이 필요하다. 따라서 완전한 설치를 위해 다소 시간이 소요될 수 있다. | 시작하는 데 시간이 훨씬 적게 걸린다. 구성 파일(yml)을 만들고 통합을 시작한다. |
성능 | 무제한 사용자 지정 옵션이 있는 CI 도구를 찾고 있다면 Jenkins가 최고의 선택이다 | 오픈 소스 프로젝트(public)에서 작업하는 경우 Travis CI가 최선의 선택이다 |
도구 타입 | 툴을 무료로 사용할 수 있는 오픈 소스 | 상용 CI 툴 |
용법 | 사용하기 쉽다 | 유연한 사용 가능 |
장점 | • 커스터마이징은 Jenkins CI 서버의 가장 큰 장점 • Jenkins의 모양을 변경하도록 다량의 plugin 아카이브 제공 • 인증, 경고 및 자격 증명과 같은 새로운 기능 추가 가능 |
• GitHub 및 클라우드 환경(ex. aws)과 연동 • .travis.ymi 파일을 통한 광범위한 프로젝트 구성 • 클러스터 테스트를 허용하고 병렬로 실행 • 다중 빌드 환경 및 대상 플랫폼 (즉, 노드 0.10,0.8,0.6, Li on). |
단점 | 지속적 통합을 위한 Jenkins의 주요 단점 중 하나는 구성이 매우 많다는 것이다. 제공되는 기본 설정은 없다. 그렇기 때문에 시스템에서 모든 것을 구성하는 데 2-3시간에서 며칠이 걸릴 수 있다. | Travis CI 설치의 가장 큰 단점은 상업용 계획이 $129/m에서 시작하여 상당히 비싸다. 보안 수준이 높은 프로젝트에는 적합하지 않다. |
Usage Plans | 무료 | 오픈 소스 프로젝트 무료 10,000 크레딧 제공 / 기업용 유료 |
Server Machine | 서버 기반 | 클라우드 기반 |
커스텀 옵션 | 엄청 많음 | 적음 |
Config | 완전히 사용자 정의 가능 | YAML |
StackOverflow에서 언급된 질문 수
커스텀할 것이 많아서 그런지 인기가 좋아서 그런지 Jenkins가 훨씬 빈도 수가 높았다.
Travis-CI vs Jenkins 무엇이 더 좋은가?
이번에 개인 프로젝트를 하면서 두 가지 방식으로 모두 자동화 툴을 제작해보았다. 둘 다 사용하기 나름이라 각 용도에 따라 적절히 사용해주면 될 것 같다.
- Travis-CI는 오픈소스 한정 10,000 크레딧만 사용이 가능하고 설정이나 실행도 간단하기 때문에 배포 자동화 연습용 혹은 소규모 프로젝트 배포에 적합해 보인다. 그리고 무료는 Public Repository 한정이다.
- 개인적으로 직접 운영을 위한 개인 프로젝트나 팀 프로젝트는 Jenkins을 사용하는 것이 훨씬 좋다고 생각한다. Private Repository도 Jenkins만 커스텀하여 EC2 프리티어(스왑 메모리 확장)로 구동하면 충분히 무리없이 이용이 가능하다.
Travis-CI는 정말 사용이 간단하다. '.travis.yml' 파일에 설정 값을 넣고 git repo와 연동하면 간단하게 자동 배포가 가능하다. 그런데 이는 10,000 크레딧 제한에 Public Repo만 가능했기 때문에 연습삼아 동작만 시켜봤다. 연습용이 아닌 개인 프로젝트techdot을 계속해서 운영할 계획이기 때문에 Jenkins 서버를 직접 구축했다. 구축 자체는 간단해서 EC2 인스턴스 만들고 Jenkins 설치하면 1~2시간 정도 소요되었고 연습으로 이것저것 사용해보고 나니 S3, CodeDeploy 연동까지 하는 데에는 하루 반나절 정도의 시간이 걸렸다. 비교적 시간이 더 걸렸지만 충분히 그럴만한 가치가 있다고 생각한다. AWS 프리티어 계정이 2개만 있으면 1개는 Jenkins 서버, 1개는 스프링 앱 서버로 정말 편리한 개발 환경을 구축할 수 있다. Private Repository를 프리티어로 하면 무료로 자동 배포 환경을 구축할 수 있다는 게 정말 좋은 점 같다.
참고
https://www.guru99.com/jenkins-vs-travis.html
https://docs.travis-ci.com/user/billing-overview/#credits-calculator
'Dot Programming > DevOps' 카테고리의 다른 글
[Spring 배포 #4] EC2 인스턴스 Nginx로 블루-그린 무중단 배포하기 (0) | 2022.03.22 |
---|---|
[Spring 배포 #3] 스프링 프로젝트 실제 배포 자동화하기 (0) | 2021.08.29 |
[Spring 배포 #2-2] CodeDeploy 생성 및 연동하기 (Travis-ci, S3) (0) | 2021.08.28 |
[Spring 배포 #2-1] Travs-ci, S3 생성 및 연동하기 (0) | 2021.08.27 |
[Spring 배포 #1] AWS EC2 서버에 스프링 프로젝트 수동으로 배포하기 (0) | 2021.08.26 |