CI/CD
빠르게 변화하니까, 시장고객요구에 빠르게 반응해서 제품을 출시하고 업데이트하는게 목적.
= 개발프로세스다. 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