Jenkins Tutorial (1)

Daniel Seo·2021년 4월 1일
0

[CI/CD] Jenkins

목록 보기
1/1

개발 환경의 종류

개발 환경의 종류에는 크게 4가지가 있습니다.

  • Local : 개발자가 자신의 workspace에서 개발하는 환경
  • DEV : 개발자들끼리 개발 내용에 대한 통합 테스트를 하는 Dev 환경
  • QA : 개발이 끝나고 QA 엔지니어 및 내부 사용자들이 사용해 보기 위한 QA 환경
  • PROD : 실제 유저가 사용하는 Production 환경

개발 프로세스

  1. 개발자가 자신의 PC에서 개발을 진행한다.
  2. 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트를 진행한다. (Pre-commit, 로컬 테스트를 진행)
  3. 진행한 내용을 다른 개발자들과 공유하기 위해 git 과 같은 SCM에 올린다. (일반적으로 dev 브랜치)
  4. Dev 브랜치의 내용을 개발 환경에 배포하기 전에 테스트와 Lint 등 코드 포맷팅을 한다.
  5. 배포하기 위한 빌드과정을 거친다.
  6. 코드를 배포한다.
  7. 테스트를 진행한다.
  8. 위 모든 과정을 DEV, QA, PROD 환경에서 모두 하고 각각에 맞는 환경에 배포한다.

여러 배포 환경의 관리

여러 배포 환경 관리에서의 핵심은

인프라를 모듈화 하여 어떤 것이 변수인지 잘 설정하고 이를 잘 설계하는 것 이라고 할 수 있습니다.

예를들어, APP_ENV 처럼 현재 배포하고자 하는 것이 무슨 환경인지 설정하고 앱 내에서 사용하는 다양한 변수들을 APP_ENV에 맞게 잘 가져다 쓰는 것이 핵심이라고 할 수 있죠.

서비스 내부의 변수 (backend url, aws key 등) 뿐만 아니라 클라우드 리소스를 많이 활용해 개발하는 요즘은 클라우드 리소스 내에서 인프라별 키관리가 매우 중요해 aws system manager의 paramter store 와 같은 키 관리 서비스를 쓰는것이 좋습니다.

배포 환경 실습 시나리오

  1. 웹사이트 코드 작성
  2. 웹사이트 코드를 린트, 웹팩 빌드를 해서 AWS S3 bucket에 html 파일을 업로드.
  3. Node.js 백엔드 코드를 typescript로 작성
  4. 위 코드를 compile 후, 테스트 코드를 돌려 docker image로 만들어 ecr에 업로드.
  5. 업로드한 ECR 이미지로 ECS 서비스 재시작 (rolling deploy) => continuous deploy

AWS ECR

AWS ECR 은 'Elastic Container Registry'의 약자로 Docker image를 저장하는 private repository 입니다.

AWS ECS

AWS ECS는 'Elastic Container Service'의 약자로 Docker Container 기반으로 서비스 운용을 가능하게 해주는 간단한 서비스입니다.

  • 무중단 배포 (rolling update)를 가능하게 해주며 scale up이 가능

  • 백엔드 서비스를 스케일업 가능한 형태로 배포하는데 최적화

  • 수많은 Docker Container 서버를 띄우고 LB (Load Balancer)가 이들 사이에 밸런싱을 해줌

  • Fargate, EC2 모드가 있어서 Docker container 리소스만 띄우거나 물리적인 EC2 Instance 클러스터로 구성 가능

정리를 하자면, ECS 혹은 K8s 를 통해 rolling deploy가 처리되기 때문에 Jenkins의 역할은 배포 명령만 내려주면 되는 것입니다.

profile
배움을 나누는 개발자입니다

0개의 댓글