데브코스 TIL - 스프린트4 CI-CD 파이프라인 설계
스프린트4 CI-CD 파이프라인 설계
✅ 파이프라인 순서
이번 실습에서는 스테이징 서버 배포까지만 진행
1. 코드가 잘 작동하는가
Code Checkout - unit test - code coverage
2. 배포 빌드, 이미지 푸시
-production build - packaging - image push
3. 스테이징 서버 배포
-staging - acceptance test
4. 릴리즈 (프로덕션 서버에 배포)
release - smoke test
✅ 전체 시스템
1. 코드 푸시
jenkins master → jnlp (도커의 클라이언트; docker push, docker build) → dind (도커데몬) → ecr
2. staging 배포
jnpl (테라폼 클라이언트) → 쿠버네티스 마스터 → ecr로부터 이미지를 pull 해서 kubelet에게 컨테이너 생성을 명령 → 백엔드, 프론트엔드 컨테이너 생성
3. 배포 상태를 아마존 S3에게 전달
jnpl → S3
4. acceptance test
tstr (테스트 마스터) → 셀레니움 (standalone) → 웹 서버에 요청 → 응답
CI 파이프라인 설계 실습
✅ SCM Checkout
- jenkins에서 git clone할 수 있도록 github credentials 준비
- 코드는 각자 프라이빗 레포지토리에 빌드 및 테스트 가능한 상태로 준비
✅ Unit test
- Node v18이 설치되어 있는 젠킨스 에이전트(builder)에서
npm test
- code coverage report를 발행하기 위한 부가 설정할 예정
✅ build
- 단위 테스트 실행과 동일한 agent (builder)에서
npm build
- frontend/build 및 backend/build 산출
✅ Packaging
- JNLP agent에서
docker build
- JNLP agent에서
docker push
(레지스트리 접근을 위해서 AWS credentials 설정 필요)
✅ staging
- 테라폼을 이용하여 스테이징 서버 (minikube onEC2)에 컨테이너 배포
- 컨테이너 이미지 풀에 있어 ECR 접근하기 위한 AWS credentials 설정이 필요
- 테라폼 state를 S3에 저장하기 위한 AWS credentials 설정이 필요
✅ Acceptance Test
- 로컬클러스터 내에 (임시로) selenium standalone 인스턴스를 배포하고 WD hub로 이용
- 파이썬이 설치된 젠킨슨 에이전트에서 테스트 케이스 실행 (셀레니움 그리드를 통한 브라우저 자동화 테스트)
✅ release
- staging 배포와 동일한 방식으로 프로덕션 서버에 배포 (테라폼 환경 변수와 컨테이너 환경변수만 필요에 맞도록 지정)
✅ Acceptance Test
- 프로덕션 서버에 배포된 응용이 올바르게 배포되었는지 확인
- 올바르게 동작하는지가 아닌 올바르게 배포되었는지를 확인
✅ post-build actions
- 빌드 및 배포에 필요한 자원들 해제
- 스테이징 서버에 배포한 리소스 회수
- 셀레니움에 기반한 테스트에 이용한 리소스 회수
실습하기
1
kubectl config use-context docker-desktop
1
kubectl create namespace jenkins
1
kubectl -n jenkins get all
실습1. 단위 테스트 및 코드 커버리지 레포트
npm 패키지 c8
을 이용해서 코드 커버리지할 예정
1
npm i -g c8
/frontend/tsconfig.json
,/backend/tsconfig.json
1
"exclude": ["src/**/*.test", "src/**/__mocks__/*.ts"]
커버리지 디렉토리 생성
1
c8 -r html -o coverage --all npm test
테스트가 실행되고, 결과가 출력됨
1
c8 -r html -o coverage --all npm test -- --watchAll=false
Makefile에 등록
1
2
3
test:
npm ci
c8 -r html -o coverage --all npm test -- --watchAll=false
젠킨스 빌드 에이전트 제작
요구사항: node, make, c8
컨테이너 이미지를 빌드하고, 레지스트리에 푸시 → 이 이미지가 hyeem66/jenkins-agent-node-18에 있다고 가정
1
2
3
4
5
6
7
8
9
# Dockerfile
FROM ubuntu:22.04
RUN apt update && apt upgrade -y
RUN apt install -y curl
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
RUN apt install -y nodejs
RUN apt install -y make
RUN npm i -g c8
This post is licensed under CC BY 4.0 by the author.