본문 바로가기
서버 개발 (AWS, Linux, DevOps)/CICD 및 Jenkins

Jeknins : pipeline을 이용하여 npm 빌드 후 S3 업로드 자동화 (+ cloud front 캐시 무효화)

by 번데기 개발자 2022. 11. 28.
반응형

 

서론

 

보통 React 앱을 빌드 후 배포할 때 S3 + Cloud front를 통해 배포를 하곤 했는데요, 이렇게 하다 보니 항상 빌드 후에 Drag-Drop으로 S3 버킷에 업로드한 뒤 Cloud Front 캐시 동기화를 눌러줘야 하는 번거로움이 있었습니다.

 

Jenkins를 이용하여 이를 자동화하는 방법이 있어서 회사에서는 Jenkins를 적용하여 자동화를 구축하였는데요, 이에 대해 간단하게 알아보도록 하겠습니다.

 

 

Jenkins pipeline을 이용한 S3 및 CloudFront 자동화 순서

 

Jenkins 파이프라인 자동화를 로직은 다음과 같습니다.

 

1. github 및 AWS 관련 Credential 을 등록한다. (+AWS Credential Plugin 설치)
2. Jenkins 파이프라인을 만들고 git에서 업로드된 react 소스코드를 clone 받는다.

3. npm을 통해 소스코드를 빌드한다. (react 빌드)
4. 빌드된 배포파일들을 S3로 업로드 후 Cloud Front 캐시를 초기화한다.

 

위와 같은 순서로 한번 파이프라인을 구성할텐데요, 각각에 단계에 따라 간단하게 설명해보도록 하겠습니다.

 

 

Jenkins Pipeline을 이용한 배포 

 

1. github 및 AWS 관련 Credential 을 등록한다.

 

 

먼저 react가 올라간 소스코드를 Jenkins 서버로 clone을 받아오는 과정이 필요합니다.

 

Dashboard > Credentials > System > GlobalCrediential에서 github에 관련된 Credential을 만듭니다.

 

Github 인증정보 추가 1
Github 인증정보 추가 2

 

다음으로 AWS에 관련된 Credential을 만들어야 합니다.

 

AWS Credential을 만들기 위해서는 CloudBees AWS Credentials 라는 플러그인을 설치하셔야 합니다.

 

AWS 인증 정보 추가

 

이후 AWS 서비스를 사용하기 위한 Credential을 등록합니다.

 

 


2. Jenkins 파이프라인을 만들고 git에서 업로드된 react 소스코드를 clone 받는다.

 

 

이후 Jenkins Item을 추가하여줍니다.

 

파이프라인 Item 추가

 

이후 Pipeline에서 개발된 소스코드를 Clone 받습니다. 

 

 

파이프라인 - Git Clone

 


3. npm을 통해 소스코드를 빌드한다. (react 빌드)

 

 

이후, Pipeline 상에서 npm install 및 react 빌드를 진행합니다.

 

파이프라인 - Build

 

 

제가 설정한 프로젝트는 npm run prod를 이용하여 명령을 수행하면 ./dist 폴더에 빌드 파일들이 생성되도록 설정해놓았습니다. 해당 부분은 각각의 프로젝트에 따라 임의로 지정하시면 됩니다.

 


4. 빌드된 배포파일들을 S3로 업로드 후 Cloud Front 캐시를 초기화한다.

 

 

이후, AWS Credential을 이용하여 S3 업로드 및 CloudFront 캐시 무효화를 진행하는 shell 명령어를 작성하여 줍니다.

 

파이프라인 - Deploy

 

이때 withCredentials라는 문법이 있는데, pipeline에서 AWS Credential을 사용할 수 있도록 해주는 역할을 합니다.

 

credentialsId에는 앞서 AWS Credential에서 설정한 ID값을 입력해주고, accessKeyVariable에는 AWS_ACCESS_KEY_ID, secretKeyVariable 에는 AWS_SECRET_ACCESS_KEY 라고 입력해주면 AWS 서비스에 관련된 shell 명령어를 이용하실 수 있습니다.

 

 


동작 테스트 영상

 

 

Pipeline 동작

 

 

 

마무리

 

이상으로 Jenkins를 통해 AWS 및 Github Credential을 등록하고 배포하는 방법에 대해서 알아보았습니다.

 

Jenkins는 한번 구축해놓으면  번거로운 배포 작업을 자동화해서 실제 개발할때 개발에만 집중할 수 있도록 도와주는 정말 좋은 도구인 것 같습니다.

 

앞으로도 Jenkins 관련 글들은 종종 올릴테니 많이 참조 부탁드립니다. :)

 

반응형