기타

CI/CD

finepiz 2021. 9. 1. 12:03

https://youtu.be/0Emq5FypiMM

 

빠르게 변화하니까, 시장고객요구에 빠르게 반응해서 제품을 출시하고 업데이트하는게 목적.

= 개발프로세스다. CI/CD환경에서 일하고 있다고 표현함.

= 빈번히 배포할 수 있도록 어플리케이션 개발부터 배포까지 자동화하는것.

= 개발자가 작은단위로 나눠서 주기적으로 main repository에 merge를 하면 자동으로 build와 test의 과정을 거침. release준비를 하고 여기서 수동 또는 자동으로 사용자에게 배포!

 

CI : Continuous Integration지속적인 통합

CD : Continuous Delivery 지속적인 제공/ Continuous Deployment 지속적인 배포의 의미로 쓰기도 함.

 

CI : 버그수정이나 새로 만드는 기능들이 main Repository에 주기적으로 Build, Test돼서 merge되는것.

- 동일 소스파일을 두명의 개발자가 서로 달리 개발하고 있다가 merge하려고하면 코드합칠 때 고생하니까 개발자들이 주기적으로 빈번하게 머지해야함. 

- 작은 단위로 나눠서 main Repository에 개발하고 통합해 나가는것

- 그리고 주기적으로 merge된 코드의 변경사항이 자동으로 Build 성공하는지, Test도 자동으로

 

코드 변경사항 코드리뷰를 통해 점검 받고 > main repository에 merge > 자동으로 팀에서 만든 CI Script를 통해 Build, Test의 성공을 체크 > 다 통과하면 배포에 반영. 만약 build 와 test에 문제가 생기면 빨간불 떠서 자동으로 알려줌

 

장점

- 주기적으로 merge하기 때문에 merge충돌을 피할 수 있음.

- merge되는 모든 코드들이 자동으로 build되고 test되기 때문에 결함이나 문제점이 빠르게 발견됨.

- 빠르게 버그수정 용이함. 작은 단위씩 수정하니까 그 작은 단위만 보면 됨.

- CI를 사용하면 Unit단위로 테스트를 만들기 때문에 안정성있는 제품이 된다.

 

CD : 배포단계에서 배포를 자동화를 고민. CI와 CD를 거쳐서 배포한다는 말을 씀.

CI가 끝나면 배포할 준비과정을 거침.

C delivery - 준비된 릴리즈가 괜찮은지 개발자나 검증팀이 검증하고 최종에 수동으로 사용자에게 배포

C deployment - 또는 자동으로 사용자에게 배포. 모든과정을 자동화 해놓는 것. 

 

CI/CD를 위한 툴 : Jenkins, Buildkite, GitHub Actions, Bitbucket Pipelines, circleci