CI/CD 이란 ?( 자동화 배포, CI/CD 파이프라인)
잦은 수정과 배포를 수동으로 한다면, 시간도 많이 소요되고 그만큼 잦은 실수도 나올 수 있다.
이를 방지하기 위해 자동화 배포가 필요한데, 자동화 배포를 학습하기 전에 먼저 알아야 할 CI/CD개념에 대해서 공부해봤다.
위는 일반적인 앱의 개발 및 유지보수 단계를 표현한 그림이다.
Code : 개발자가 코드를 원격 코드 저장소 (ex. github repository)에 push 하는 단계
Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 과정
Release : 배포 가능한 소프트웨어 패키지를 작성하는 단계
Depoly : 프로비저닝을 실행하고 서비스를 사용자에게 노출하는 단계 ( 실질적인 배포)
Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지한다.
CI / CD
CI(Continuous Integration : 지속적인 통합) - 빌드/테스트 자동화 과정. 개발자를 위한 자동화 프로세스라고 볼 수 있다.
위 사진에서 code, build, test 부분이 CI에 해당된다.
CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사 정기적으로 빌드 및 테스트 되어 공유 리포지토리에 통합되므로 여러 개발자가 동시에 어플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
지속적인 통합 (CI)은 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계이기도 하다.
CD(Continuous Delivery : 지속적인 서비스 제공 or Continuous Deployment : 지속적인 배포) - 배포 자동화 과정. 이 두 용어는 상호 교환적으로 사용되며, 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻한다.
위 사진에서 Release, Depoly, Operate부분이 CD에 해당된다.
지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함된다.
지속적 배포의 예시로 Github Page를 들 수 있는데, 저장해둔 디엑터리에 정해진 방식에 따라 잘 커밋하기만 하면 github page가 알아서 해당 디렉터리에 있는 파일들을 번들링하여 서버에 업로드 하는 과정으로 자동으로 인터넷에 배포할 수 있다.
CI / CD 파이프라인
CI / CD 파이프라인이란 개발에서 테스트와 스테이징을 거쳐 최종적으로 사용자에게 전달(출시)하기 위해 코드가 거치는 일련의 단계를 말한다.
파이프라인이 잘 구축되면 최신 버전의 소프트웨어 애플리케이션을 업데이트하고 제공하려는 과정을 수동보다 더 빠르고 안정적으로 끝마칠 수 있고 CI/CD 인프라와의 효율성과 호환성을 높여준다.
CI / CD 파이프라인이 일반적으로 따르는 패턴이 있다.
- 플래그 및 브랜치 : 전체 코드 베이스를 버전 관리 시스템으로 전환한 다음, 팀의 모든 사용자가 자주 변경 사항을 커밋하도록 하는 것.
마스터에 대한 각 커밋은 파이프 라인을 시작하고 코드를 빌드 및 테스트 하여 작성한 내용에 대한 신속한 피드백을 제공한다.
- 빌드 및 테스트 : 자동화된 유닛 테스트가 있는 경우 이 테스트는 일반적으로 빌드 전에 실행된다.
빌드 단계의 출력에는 시스템의 다른 부분과 결합되어 보다 높은 수준의 자동화테스트를 실행한다. 이러한 테스트는 병렬로 실행되어 파이프라인 속도를 높이고 피드백을 더 빠르게 제공할 수 있다.
- 컨테이너 vs VM(가상머신) : 자체 인프라에서 파이스라인을 호스팅하는 경우에도 컨테이너를 배포하는데 VM이 필요하지만 테스트 환경을 준비하는데 필요한 작업이 줄어들어 파이프라인이 효율적으로 운영되도록 하는 것에 도움이 된다.
- 사전 프로덕션 환경 : 파이프라인의 테스트 및 스테이징 환경 수는 조직 내 다양한 이해관계자와 요구사항에 따라 달라진다. 이러한 환경에서는 생성 및 배포를 자동화하는 것이 수동보다 효율적이며 환경에 따라 서로 다른 파이프라인 트리거를 구성할 수 있다
- 배포 : 코드 변경 사항이 이전의 각 파이프라인 단계를 성공적으로 통과하면 프로덕션에 릴리즈할 준비가 된 것이다. 마지막 단계(배포)는 수동 또는 자동일 수 있다.
출처
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
https://seosh817.tistory.com/104
https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/ci-cd-pipeline/