CI/CD와 도구들

자동화 2020. 6. 26. 02:41

CI/CD는?

CI (Continuous Integration)

개발자가 변경한 코드를 빌드하고 테스트를 거쳐 리포지토리에 업로드 하는 과정을 자동화 한다.

관련 제품 : Jenkins, Travis

 

 

CD (Continuous Delivery/Deployment)

리포지토리의 코드를 받아 라이브 환경에 배포하는 과정을 자동화 한다.

관련 제품들

관련 제품 : Spinnaker

 

 

CI/CD를 위한 도구들

Packer

가상머신의 표준 이미지를 만든다

AWS AMI, Azure Image, Google Cloud Image도 만들어서 클라우드에 등록해두고 사용할 수 있다.

Ansible과 조합해서 세부적인 구성이 변경되어야 하는 경우 Ansible 스크립트만 업데이트 해서 표준 이미지 업데이트까지 일어나지 않도록 하면서 운영한다.

비슷한 도구로 Vagrant가 있다.

 

Terraform

클라우드 환경 구성을 자동화 한다.

구성, 변경, 제거를 코드로 구현하고 동작시켜 자동화 한다.

 

Ansible

VM이 만들어진 후 개발, DB, Web 등의 환경 구성을 자동화 한다.

Packer로 이미지 생성해 사용할 때 이미지로 VM생성 후 Ansible로 특정 환경 구성을 자동화 한다.

프로비저닝 코드를 만든다고 표현한다.

 

Jenkins

CI용 도구들 중 가장 많이 추천하는 도구로 보임.

내가 변경한 코드의 코딩 규약 체크, 자동화 테스트 수행, 컴파일 오류 확인, 설능 변화 감시 등을 제공.

 

Spinnaker

Netflix에서 개발한 CD를 위한 도구. VM이나 컨테이너 기반에서도 동작 함. 배포시 테스트를 거치고 새로운 버전으로 자연스럽게 전환할 수 있도록 한다. 

 

 

활용

1. Terraform으로 웹용 VM 생성 후 Ansible로 웹서버를 구성.

Jenkins에서 빌드된 결과를 받아서 코드 배포.

구성된 VM을 LB에 추가 함.

 

2. Packer를 이용해 기본 구성이 완료되어 있는 이미지를 미리 만들어 두고 이를 이용해서 VM 생성

생성된 VM에 어플리케이션 코드 최종본을 배포해서 구성 완료.

 

3. Spinnaker를 이용해 Blue/Green, Canary, Rolling 방식 등의 다양한 배포 방식을 이용

복잡한 네트워크 설정이나 Cloud SQL 같은 클라우드 서비스는 Spinnaker로 설정이 불가능하기 때문에 인프라 부분은 Terraform으로 구성해야 한다.

 

 

 

 

== 참고

https://www.redhat.com/ko/topics/devops/what-is-ci-cd

https://bcho.tistory.com/1234

 

 

AND