CI/CD
Continuous Integration(지속적인 통합)
Continuous Delivery(지속적인 서비스제공)
Continuous Deployment(지속적인 배포)
CI _ 빌드/테스트 자동화과정
=> 지속적인 통합
커밋할 때마다 빌드와 일련의 자동 테스트가
이루어져 동작을 확인 변경으로 인해 문제가
생기는 부분이 없도록 보장
CD _ 배포 자동화 과정
=> 지속적인 서비스 제공
코드 변경이 파이프라인의 이전 단계를
모두 성공적으로 통과하면 수동 개입없이
해당 변경 사항이 프로덕션에 자동 배포
=> 지속적인 배포
간단한 코드변경이 정기적으로 마스터에 커밋
자동화된 빌드 및 테스트 프로세스를 거치며
다양한 사전 프로덕션 환경으로 승격되며
문제가 발견되지 않으면 최종적으로 배포
종류 _ Jenkins / CircleCI / TravisCI / Github Actions / etc...
- 적용전 _ 개발자들 개발하여 코드 수정
-> 각자의 feature 브랜치에 코드 push
(어느 한부분에서 에러나도 눈치 못챔)
-> 각자의 코드를 git 에 올리고 통합
-> 에러가 발생했지만 어디 에러인지 모르므로
어디서 에러 발생했는지 디버깅 후 수정
-> 첫과정부터 이전과정까지 반복
-> 에러 해결되면 배포 시작 (이전 과정부터 지금과정 많은 시간 필요)
- 적용후 _ 개발자들 개발하여 feature 브랜치에 코드를 push
-> git push 를 통해 Trigger 되어 CI 서버에서 알아서
Build, Test, Lint 를 실행 결과 전송
-> 개발자들은 결과 전송받고 에러가 있다면 에러부분 수정 후
코드 master 브랜치에 merge
-> master 브랜치에 코드 merge 하고 Build, Test 가
정상적으로 수행 되었다면 CI 서버에 알아서 Deploy
- 요약 _ 일일히 빌드와 테스트, 배포과정을 개발자 직접 한다는 것은 낭비이기 때문에
이러한 자동화 구축은 필수로 해야한다.
_ CI/CD는 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법
_ 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제
(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션입니다.
_ merge 이전에 최대한 작은 단위로 통합해 나가는 것이 중요