티스토리 뷰
자동화 CI/CD ?
컨테이너로 구동하는 애플리케이션을 배포하는 과정은
1. 깃허브 등의 저장소에 저장해 둔 어플리케이션 소스코드를 내려받아 도커 컨테이너 이미지로 빌드한다.
2. 빌드한 컨테이너 이미지를 쿠버네티스에서 사용할 수 있도록 레지스트리에 등록한다.
3. 레지스트리에 등록된 이미지를 기반으로 쿠버네티스 오브젝트를 생성한다.
4. 생성한 오브젝트(Pod/deployment)를 외부에서 접속할 수 있도록 서비스 형태로 노출한다.
docker build > docker push > kubectl create > kubectl expose
이 과정을 pipeline이라고 한다. 그리고 이 과정을 도구를 사용하여 자동화한다.
자동화는 크게 CI(Continuous Integration = 지속적 통합), CD(Continuous Deployment = 지속적 배포) 두 가지로 정의된다. 그리고 일반적으로 이 둘을 합쳐 CI/CD라고 부른다.
컨테이너 인프라 환경에서 CI/CD
CI : 코드를 커밋하고 빌드했을 때 정상적으로 작동하는지 반복적으로 검증하여 애플리케이션의 신뢰성을 높이는 작업
CD : CI과정에서 생성된 신뢰할 수 있는 애플리케이션을 실제 상용 환경에 자동으로 배포하는 것을 의미
개발자가 소스를 커밋하고 푸시하면 CI단계로 들어간다.
CI단계에서는 애플리케이션이 자동 빌드되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 확인한다. 테스트를 통과하면 신뢰할 수 있는 애플리케이션으로 간주하고 CD단계로 넘어간다.
CD단계에서는 애플리케이션을 컨테이너 이미지로 만들어서 파드, 디폴로이먼트, 스테이트풀셋 등 다양한 오브젝트 조건에 맞춰 미리 설정한 파일을 통해 배포한다.
CI/CD 도구로는, 팀시티(TeamCity), 깃허브액션, 뱀부(Bamboo), 젠킨스(Jenkins)등이 있다.
젠킨스만 전부 무료버전이고 가장 대중적이므로, CI/CD의 시작은 젠킨스로 하는것이 좋다.
(젠킨스는 거의 모든 환경에서 사용할 수 있도록 다양한 플러그인을 추가하여 원하는 형태를 만드는 블록방식으로 구성되어있다.)
Jenkins
퍼블릭 클라우드 기반의 시스템일 때에는 AWS CodeBuild, CodePipeline, GCP CloudBuild, Azure Pipelines등이 있다.
배포가 중요한 환경에서는 CD기능에 중점을 둔 Spinnaker, ArgoCD를 선택적으로 도입할 수 있다.
모든 배포환경을 컨테이너 인프라로 일원화하고, CI/CD도구를 사용한다면 애플리케이션에 맞는 환경을 적용해 자동으로 배포할 수 있다. 통합과정에서 만들어진 컨테이너 이미지를 기반으로 쿠버네티스가 존재하는 어떤 환경에서도 일관성이 있는 애플리케이션 배포가 가능하다.
개발자가 작성한 애플리케이션 코드를 소스코드 저장소에 푸시하면, 쿠버네티스 내부에 설치된 젠킨스는 애플리케이션 코드를 빌드하고 레지스트리에 푸시한 후에 쿠버네티스에서 사용 가능한 형태로 배포한다.
젠킨스는 작업 내용을 아이템 단위르 정의한다. 그리고 조건에 따라 자동으로 작업을 수행해 효율을 높이고 실수를 줄인다.
컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며 여기에 필요한 설정을 모두 넣어야 한다.
이 때 동적인 변경 사항을 빠르고 간편하게 적용할 수 있도록 도와주는 도구로 커스터마이즈와 헬름이 있다.
https://m.blog.naver.com/psy7361c/222677650564
'ALL > 인프라' 카테고리의 다른 글
NAS서버 / 형상관리 GitLab / 도커Docker (0) | 2023.10.24 |
---|---|
[AWS]EC2 개념정리 (0) | 2022.11.29 |
- Total
- Today
- Yesterday
- di
- spring
- security
- 컨테이너
- 코드로 배우는 스프링 웹 프로젝트
- 남궁성
- 데브캠프
- 인덱스
- 스프링 빈
- 스프링의정석
- JavaScript
- MySQL
- 한입크기로 잘라먹는 리액트
- 이정환
- 자바스크립트
- AWS
- 자바의정석
- 스프링 프로젝트
- React
- 데이터베이스
- Spark
- 친절한SQL튜닝
- 시큐리티
- node
- 리액트
- 객체지향
- Node.js
- @Configuration
- 스프링
- EC2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |