CI/CD

GY·2022년 4월 16일
0

Test

목록 보기
7/7
post-thumbnail

CI/CD란?

어플리케이션 개발단계부터 배포까지 자동적으로 진행할 수 있도록 만드는 것을 말한다.
새로운 코드를 통합할 때 발생할 수 있는 오류/문제를 Integration Hell이라고 하는데, 이것을 해결하기 위한 방법이다.

앱의 통합/테스트 단계에서부터 배포까지 전체 사이클에 걸쳐 자동화 및 모니터링을 지속적으로 할 수 있다.


CI (Continuous Integration)

지속적인 통합
버그 수정/새 기능 추가될 경우 메인 레퍼지토리에 주기적으로 자동으로 머지되는 것

CI를 위해서는...

  1. 개발자는 코드 변경사항을 지속적으로 머지해야한다.
  2. 통합을 위한 단계(빌드, 테스트, 머지)의 자동화
  • 코드의 퀄리티 향상, 버그 수정 용이

팀 내에서 작성한 CI스크립트를 통해 테스트, 빌드가 자동으로 이루어지고, 실패할 경우 개발자에게 알린다.

개발자가 코드를 머지하는 순간 모든 테스트들을 수행하면서 다 통과하는지 확인하는 것들이 자동적으로 되어져야 함

장점

개발 생산성이 향상되며, 문제점을 빠르게 발견할 수 있고 버그를 수정하기 수월하다.
작은 단위의 버그를 해결하며 유닛테스트를 반드시 포함하여
최종적으로 코드의 퀄리티를 향상할 수 있다.


CD(Continuous Deployment)

지속적인 배포
continuous Delevery로 쓰이기도 한다.

마지막 배포단계를 자동화하는 것으로, CI를 통해 주기적으로 머지된 벼경사항들이 자동으로 빌드,테스트가 되었다면 릴리즈할 준비를 거친다. 이후 개발자들이 확인해 수동적으로 배포하면 Continuous Delievery, 자동적으로 배포하면 Continuous Deployment라고 부른다.

예를 들면, CI/CD는 아래와 같은 방식으로 진행될 수 있다.

  1. 개발완료된 코드를 feature브랜치에 push한다.

  2. git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test, Lint를 실행하고 결과를 전송한다.

  3. 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러부분을 수정하고 코드를 master 브랜치에 merge한다.

  4. master 브랜치에 코드를 merge하고 Build, Test가 정상적으로 수행이 되었다면 CI서버에서 알아서 Deploy 과정을 수행한다.

그럼 어떤 CI/CD 툴을 사용해볼 수 있을까?

토이 프로젝트에 도입해 사용해볼 것이므로, 다음과 같은 기준으로 선택하려했다.

  • 무료이고
  • Git과 연동할 수 있을 것
  • 레퍼런스 및 관련 정보가 많을 것
  • 설치 및 사용이 간단할 것

Jenkins vs Github Actions

1. Jenkins

: 젠킨스(Jenkins)는 거의 모든 언어의 조합과 소스코드 리포지토리(Repository)에 대한 지속적인 통합(CI)과 지속적인 배포(CD)를 무료로 제공한다.

동작 방식

: 젠킨스는 주요 운영체제용 자바 8 WAR 아카이브와 설치 패키지, 홈브루(Homebrew) 패키지, 도커 이미지, 그리고 소스코드 형태로 사용할 수 있다. 소스코드는 대부분 자바이며, 몇 개의 그루브(Groovy), 루비(Ruby), 그리고 앤틀러(Another Tool For Language Recognition, ANTLR) 파일이 들어 있다.
젠킨스를 실행하면 웹 화면을 생성하며 REST API 호출로 구동 된다.

젠키스 사용 장점

프로젝트의 표준 컴파일 환경에서 컴파일 오류 검출
자동화 테스트 수행
코딩 규약 준수여부 체크
프로파일링을 통해 소스 변경에 따른 성능의 변화 감시
테스트 환경에 대한 배포작업
개발 업무를 도와주는 많은 플러그인을 가지고 있음


2. GitHub Actions

: Github Actions은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구이다.

Workflow?
Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 말한다.

사용료는 public 저장소는 무료이며, private저장소는 해당 꼐정에 부여된 무료 사용량 이후에 비용이 발생한다.
Github 무료 계정의 전체 비공개 저장소를 기준으로 한달에 500MB 스토리지와 실행 시간 2,000분(minute)까지 제공된다.

Workflow는 저장소마다 최대 20개까지 등록할 수 있다.
그리고 Workflow 안에 존재하는 Job이라는 단계마다 최대 6시간 동안 실행될 수 있고, 초과하게 되면 자동으로 중지된다.
그리고 Github 계정 플랜에 따라 전체 Git 저장소를 통틀어 동시 실행할 수 있는 Job 개수가 정해져 있다.
Job 안에서 Github API를 호출한다면 1시간 동안 최대 1,000번까지만 가능하다.

장점

  • 별다른 복잡한 절차 없이 Github를 통해 사용 가능
  • 워크 플로우 복제 용이
  • GitHub와 통합
  • 라이브 로그
  • 다중 컨테이너 테스트
  • 리눅스, 맥, 윈도우, ARM 및 컨테이너를 쉽게 빌드, 테스트
  • 여러 운영체제 및 런타임 버전에서 동시 테스트 가능
  • 모든 언어 어플리케이션 빌드, 테스트 및 배포

무엇을 사용할까?

Jenkins는 다양한 IDE를 지원하고 커스터마이징이 가능한 범위가 넓다.
또한 전세계 많은 사용자들이 이용하는 만큼 관련 문서의 양도 방대하다.
하지만 호스팅을 하나부터 열까지 모두 직접 진행해야 하므로 문서 관리 및 호스팅에 들어가는 비용이 그만큼 많아질 수 있다는 단점이 있다.

따라서 규모가 작은 프로젝트 일 경우 Jenkins는 필요 이상의 많은 리소스가 투입될 수 있으므로 Github Actions를 사용하는 것이 더 나은 방법일 수 있다.

Github Actions는 Github에서 제공하므로 깃허브에 코드를 푸시하는 등의 이벤트에 대해 반응할 수 있다.

이번 프로젝트에는 Github를 사용해보자!


Reference

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.

0개의 댓글