CI/CD(지속적 통합/지속적 배포(제공))

 

 

 

 

CI

- 지속적 통합

- 규모가 커질수록 테스트를 하는 것이 무리가 있습니다;;;;

- 여러 사람이 작업함으로 인한 문제들을 방지하려면, 이런 통합 작업을 수시로, 지속적으로 해야하는데, 그때그때 이런 테스트 과정을 매번 거치기는 너무 번거러울 것입니다.

그래서 이것을 자동화할 필요가 있어 왔고,

이 CI의 자동화를 구현해주는 다양한 도구와 서비스들이 있습니다.

 

이것들을 다루기 전에, 이와 함께 다뤄지는 CD도 짖고 넘어갈께요

 

 

CD

- 지속적 배포(제공)

- 여기서 말하는 배포는,

소프트웨어를 코딩한 결과를 최종 사용자에게 넘겨주는, 실행 가능하도록 하는 단계를 말합니다.

예를 들어,

모바일 앱으로 치면 앱스토어에 올리는거고

백엔드 서비스라면 코드를 배포용 파일로 빌드 하고 그 빌드된 결과물을 서버에 전송한 다음에 커맨드로 실행까지 해주는 것 등을 말하는 거죠.

 

 

 

 


 

CI가 성공적으로 이루어지고 나면,

이 CD가 진행되는거라고 생각할 수 있을 거에요

그래서 이 전반적인 과정을 CI/CD라고 하는 거에요

 


 

CI/CD 자동화 툴이라고 하는 것들은 

싸그리 자동으로다가 돌려주는 그런걸 말하겠네요?

 

그렇죠, 이 CI/CD툴들은 굉장히 다양하기 때문에

종류마다 대표적인 것들을 안아볼겠습니다.

 

 

 

1. 설치형

- 대표적으로 젠킨스

- 설치형, 즉 내 (1)"컴퓨터"나 서비스가 돌아갈 (2)"서버"에 직접 다운받고 깔아서 쓰는거에요.

- 윈도우,맥, 리눅스에 모두 설치 가능

- 서버가 보통 리눅스에서 도니가 리눅스에서 많이 쓰이겠네요;;;?!?!?!?!!!!!!!!!!!!!

답변 : 네, 젠킨스를 깔아서 실행하면, 해당 컴퓨터나 서버의 주소로 크롬 등의 브라우저로 접속할 수 있는 웹사이트가 하나 열려요.

서버의 아이피주소에, 젠킨스 기본 포트 8080으로 접속하고,

지정해 둔 아이딩랑 비밀번호를 입력하면,

다양한 CI/CD 작업들을 세팅할 수 있는 페이지가 나오거든요.

 

이 웹페이지가 이 CI/CD를 설정하기 위한 작업 콘솔인거에요.

(=매크로를 만드는 화면이 열린다고 생각하시면 돼요)

 

그러면,

이걸로 어떤 것들을 할 수 있는 건가요?

가장 흔하고 단순한

예시)

1 스프링 부트로 코딩한 프로젝트를 서버에 배포할거에요

2 먼저 젠킨스에 새 자동화 작업, 매크로를 하나 생성한 다음

3 이를 Github이나 GitLab 등 프로젝트를 저장하는 서비스 계정에 연동을 시켜요

4 그러면 이 작업의 첫 단계로, 이 Git 저장소의 특정 브랜치에 소스가 푸시될 때마다 젠킨스에서 이 서버로 코드들을 자동으로 젠킨스 전용 폴더로 다운로드하게 돼요

(현재, 내 컴퓨터에서 코딩한 걸 원격에 푸시만 하면, 그게 젠킨스가 깔린 서버로까지 전송이 됩니다!!)

5 이제, 그 다음에 이뤄질 것들을 이제 매크로로 정하면 돼요

5-1 먼저 guthub에서 당겨온 코드에 문제가 없는지를 테스트 코드에 지정된 테스트를 돌려서 확인을 하도록 할 건데요.

5-2 Gradle을 사용하는 프로젝트라, 받아온 코드에 Gradle 명령어로 테스트를 수행하도록 할 수 있어요.

5-3 이 Gradle 등의 기능은 젠킨스 페이지에서 마치 앱스토어처럼,

검색해서 다운 받을 수 있는 1800개가 넘는 플러그인들로 제공돼요

마켓에 온갖 매크로들이 올라와잇는거죠

이 테스트가 실패할 경우, 지정된 메일주소로 이메일을 보내거나 슬랙 등으로 메시지를 날려서 개발자에게 바로 알려줄 수 있어요. 물론, 이것들도 역시 

플러그인들로 제공되는 기능들이구요.

그러면 여기까지가 CI에 해당하는 작업들입니다

 

 

이제 부터 CD ㄱㄱㄱㄱ

6 CD 여기서 배포까지 자동으로다가 막 해주고 그래요? 

답변 : 네, 이전 단계들에서 문제가 없다면 실행되도록 설정한 다음

7 작업들에서 프로젝트를 배포용 파일로 빌드한 다음

8 원하는 폴더로 옮겨서,

9 돌고 있던 서비스를 중지하고

10 이 파일로 새 서비스를 실행하는 명령어를 스크립트로 실행하도록 합니다.

11 이제 개발자는 코딩을 마친 후 이를 Git에서 푸시하기만 하면, 이걸 서버로 옮겨서 테스트하고 문제 없을 시 빌드해서 배포하고 테스트 실패 시 보고를 해주는 것까지, 이 젠킨스가 알아서 다 해주는 거죠

(이 진행과정도 터미널 보듯 젠킨스 페이지에서 확인할 수 있구요)

 

 

이거 말고도 젠킨스의 플러그인들을 잘 알고 활용하면,

AWS에 연동해서 도커 컨테이너로 올려주거나

다수의 작업들을 파이프라인으로 체계화하거나

심지어 젠킨스 화면을 편리하고 예브게 바꿔주는 것 등등등등등등등

 

여러 편리한 기능들을 이용하실 수 있구요

 

심지어 젠킨스는 오픈소스이기 때문에 무료로 쓸 수 있어요!!!!!!!!!!!!!!!!!!!!!!!

 

 

 

2. 클라우드형 서비스

- Travis CI, Circle CI, Team City 

-  Team City 같은 것들은 젠킨스처럼 설치형으로도 쓸 수 있지만, 이것들은 기본적으로 클라우드로 컴퓨팅 공간을 제공하는데 여기서 자동화 작업들을 설정할 수 있는 거죠.

- 사용 방법들은 다 비슷 비슷 합니다.

Github 등의 Git  저장소 계정과 연동을 하고 나서

레포지토리 중에 CI/CD를 진행할 프로젝트를 선택하고

거기서 자동화로 처리할 작업들을 세팅하는거에요

- Travis 로 예를 들자면,

Github에 Node.js로 만든 프로젝트를 올려두면

이 저장소를 Travis랑 연동시킬 수 있어요

그 프로젝트 최상위 폴더에 .travis.yml이란 파일을 만들고

거기에 Travis에서 지정한 형식대로 어떤 자동화 작업들을 진행할지 작성해둬요.

 다른 CI/CD 서비스들도 비슷합니다.

- 지정한 브랜치에 푸시가 들어오면

코드를 Github으로부터 Travis의 서버로 당겨와서

Node.js의 지정된 버전으로 테스트를 돌린 다음 

성공이나 실패 여부를 이메일로 보내도록 하는거에요.

이제 이 프로젝트를 그 브랜치에 푸시하면

테스트 결과를 메일로 받아볼 수 있는 거죠.

여기까지가 CI의 작업입니다

 

이제 부터 CD  ㄱㄱㄱㄱ

클라우드 서버에서 테스트를 마치고 빌드를 한 다음

배포할 서버로 전송하는 기능으로 CD도 가능해요.

 

온프레미스 서버일 경우 파일들을 그리로 보낸 다음 

AWS의 기능들과 연동하거나, Heroku에 바로 올릴 수도 있죠

 

서버 설정할 필요 없이 코드만 커밋하면 알아서 웹사이트든 API든 실행해주는 서비스 있어요 (= PaaS라고 하죠)

이 클라우드 서비스들은 유료이거나 제한적으로 무료에요.

개인적으로 가볍게는 무료로 이용할 수 있지만,

상업용 규모로 넘어가면 이용료를 내야 하죠

 

 

 

 

 

3. 설치형, 클라우드형 말고 다른형태의 CI/CD 서비스

- 이젠 Github이나, Bitbucket, Gitlab 등에서 아예 자체적으로 제공을 해요

- 많이 쓰이는 걸로 Github Actions가 있죠

- Gitlab에도 CI/CD, Bitbucket에도 Pipelines라고 다 제공하는 서비스들이 있다

- 질문 : 근데 이 소스저장소가 어떻게 CI/CD를 또 다해준대료????????????

답변 : Github에서 자기 프로젝트가 있는 레포지토리에 들어가보면,

상단에 재생버튼이랑 같이 Actions란 탭이 있어요.

여기서 각 언어별로 , 또는 AWS나 Azure 등의 배포처별로

소스코드를 빌드하고 테스트하고 배포 등을 할 수 있는 '워크플로우'들의 다양한 템플릿들이 있어요.

여기서 필요한 것들을 골라서 원하는 매크로를 조립해도 되고,

내가 직접 yml파일로 작성해도 되고,

다른 사람들이 작성해서 마켓플레이스에 올려놓은 

워크플로우들을 다운받아서 쓸 수도 있죠.

 

소스가 푸시되는 등 지정된 이벤트가 발생하면

github에서 제공하는 클라우드 컨테이너 공간에서 

역시 이 빌드나 테스트, 슬랙 메시지 등의 작업들, 그리고 배포 등이 진행되는거에요

 

 

결론으로

소스코드 관리랑 CI/CD 자동화가 아주그냥 

한군데서 다 되니까 쓰는 사람으로서는 맘 편하겠네요.

 

 

숫자는 다르지만, 서비스마다 보통 한 달에 작업들이 돌아가는 총 시간을 기준으로 얼마까지는 공짜, 그 이상으로는 유료.

이런식으로 책정을 해요.

 

 

이처럼,

Git저장소 서비스들 외에도

AWS에서 자체적으로 제공하는 CodePipeline 같은 것들도 있고

정적 사이트를 Github 등에 올리면 바로 자기네 서버에 배포해주는 Netlify나 Vercel처럼 그 자체가 배포 자동화인 서비스들도 있어요.

 

 

그리고

편의성만 본다면 클라우드나 Guthub Actions등이 좋을 수 있지만,

좀 더 저기 서버에 맞게 커스터마이징하려면 젠킨스가 좋을 수도 있죠.

 

 

 

 

 

 

'■ 용어 정리' 카테고리의 다른 글

[용어정리] CORS(Cross Origin Resource Sharing) ?  (0) 2021.07.07
[용어정리] 프록시(proxy)  (0) 2021.07.06
[용어정리] KeyPair란  (0) 2021.07.05
템플릿 엔진(Template Engine)이란?  (0) 2021.05.05
[용어정리] 포워딩  (0) 2021.03.08