프로그래머스 데브코스 웹 풀사이클 20주차 5일차

geun·2024년 3월 28일
0

데브코스

목록 보기
73/79
post-thumbnail

웹 기반 문서 편집기 제작 프로젝트

배포 환경 테스트

실습 순서

  • Minikube (on EC2) 클러스터에 시험 배포
    이미지는 기존에 둔 것을 이용한다
    컨테이너들의 실행 환경 구성만 조정하여 적용해서 테스트한다
  • 이미지 레지스트리를 ECR 이용하도록 변경
    Private repo. 를 이용하기 때문에 push/pull 권한 설정이 필요하다
    k8s secret 의 한 종류를 만들고 이를 통하여 image pull 권한 인증 적용한다

Manifest 에 포함된 이미지 변경

BE 이미지 지정

  • 파일: ${PROJECT_ROOT}/backend/notes-be.yaml
  • 내용: 180993267331.dkr.ecr.ap-northeast-2.amazonaws.com/notes-be:dpy-test

FE 이미지 지정

  • 파일: ${PROJECT_ROOT}/frontend/notes-fe.yaml
  • 내용: 180993267331.dkr.ecr.ap-northeast-2.amazonaws.com/notes-fe:dpy-test

주의할 점

  • 붉은 색으로 표기된 리포지토리 (이미지) 이름은 각자 다른 것을 이용해야 한다

CI/CD 파이프라인 설계

CI/CD Pipeline

  • Code checkout > Unit test > Code coverage
  • Production build > Packaging > Image push
  • Staging > Acceptance test
  • Release > Smoke test

CI 파이프라인 설계

  • SCM Checkout
    Jenkins 에서 git clone 할 수 있도록 github credentials 준비 필요하다
    코드는 각자의 private repo 에 빌드 및 테스트 가능한 상태로 준비한다

  • Unit Test
    Node v. 18 이 설치되어 있는 Jenkins agent (builder) 에서 npm test한다.
    Coverage report 를 발행하기 위한 부가의 설정을 할 예정이다.

  • Build
    단위 테스트 실행과 동일한 agent에서 npm build한다.
    frontend/build 및 backend/build 를 산출한다.

  • Packaging
    JNLP agent 에서 docker build한다.
    같은 agent 에서 docker push한다.
    레지스트리 접근을 위해서 AWS credentials 설정이 필요하다.

  • Staging
    Terraform 을 이용하여 스테이징 서버 (Minikube on EC2) 에 컨테이너 배포
    컨테이너 이미지 풀에 있어 ECR 접근하기 위한 AWS credentials 설정이 필요
    Terraform state 를 S3 에 저장하기 위한 AWS credentials 설정이 필요

  • Acceptance Test
    로컬 클러스터 내에 (임시로) Selenium Standalone 인스턴스를 배포하고 WD hub 로 이용한다
    Python 이 설치된 Jenkins agent (tester) 에서 테스트 케이스 실행한다
    Selenium grid 를 통한 브라우저 자동화 테스트한다

  • Release
    Staging 배포와 동일한 방식으로 프로덕션 서버에 배포한다
    Terraform 환경변수와 컨테이너 환경변수만 필요에 맞도록 지정한다

  • Smoke Test
    프로덕션 서버에 배포된 응용이 올바르게 배포되었는지 확인한다

Post-Build Actions

  • 빌드 및 배포에 필요한 자원들을 해제한다
  • 스테이징 서버에 배포한 리소스 회수한다
  • Selenium 에 기반한 테스트에 이용한 리소스 회수한다

단위 테스트 및 코드 커버리지

Code Coverage

링크 : https://npmjs.com/package/c8

설치 및 실행

npm i c8 -g
c8 node foo.js

Jenkins Pipeline 생성

  • New Item을 만든다
  • 코드 체크아웃한다
    Jenkins credentials 로 “github-credentials” 가 필요하다
    타입: SSH Username with private key
  • 단위 테스트
    BE/FE 각각에 대해서 c8 을 통한 npm test
    여기에 앞서서 제작한 test agent 를 "builder" 라는 이름의 컨테이너로 적용한다

0개의 댓글