[CS] [Deploy] CI/CD & Github Action으로 Client 배포하기

Hannahhh·2022년 10월 12일
0

CS

목록 보기
6/6

🔍 CI/CD


  • CI(Continuous Integration)
    빌드/테스트 자동화 과정으로, 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다.
    애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되기 때문에 여러 명의 개발자가 동시에 작업을 하더라도 충돌하지 않는다.

  • CD(Continuous Delivery)
    배포 자동화 과정으로, 지속적인 서비스 제공 및 배포를 의미한다.
    코드 변경 사항의 병합~프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 릴리스 자동화가 포함된다.

CI, CD는 모두 파이프라인의 추가 단계에 대한 자동화를 의미하며, 상호 교환적으로 사용된다.



👀 CI/CD의 단계


대부분의 기업에서는 CI를 먼저 추가한 다음, 클라우드 네이티브 애플리케이션의 일부로서 배포 및 개발 자동화를 구현한다.


✔ 지속적 통합(Continuous Integration, CI)

  • Code : 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계
  • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정

코드를 병합하기 전, 빌드 및 테스트 오류를 확인하여 효율적인 개발을 할 수 있다.


✔ 지속적 배포(Continuous Delivery/Deployment, CD)

  • Release : 배포 가능한 소프트웨어 패키지를 작성.
  • Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출(실질적인 배포 부분)
  • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지.

빠르고 쉽게 애플리케이션을 프로덕션으로 배포할 수 있다.

Ex) Github Page : 지정해둔 디렉토리에 커밋하면, 알아서 index.html 파일과 디렉토리에 있는 파일을 번들링하여 Github Page 서버에 업로드 한다.




👀 CI/CD 파이프라인


수동적이고 반복적인 배포 과정을 자동화함으로써 시간을 절약하고 휴먼에러(수동 배포 과정중 생기는 실수)를 방지할 수 있다.

따라서, 코드가 빌드되면서 최종적으로 배포 되는 단계까지 자동화 단계로 만드는데, 이 것을 파이프라인(Pipeline)을 구축한다고 표현한다.


파이프라인은 코드의 관리부터 실제 서비스로 배포하는 과정을 연결하는 구조를 의미한다.

전체 배포과정을 여러 단계로 나누어 분리하고, 각 단계는 파이프라인 안에서 순차적으로 실행되며 주어진 작업(Actions)들을 수행한다.(필요에 따라 더 세분화/간소화 가능)

  1. Source 단계: 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
    (버전 컨트롤 도구를 이용해 관리 및 전달)

  2. Build 단계: Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공하고, Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.

  3. Deploy 단계: Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.


파이프라인은 아래의 요소들로 구성되어 있으며, 이 요소들은 실무에서 반복적인 프로세스이기 때문에 일련의 자동화 단계로 만드는 것이다.

  • Build(소프트웨어 컴파일)
  • Test (호환성 및 오류 검사)
  • Release (버전 제어 저장소의 애플리케이션 업데이트)
  • Deploy (개발에서 프로덕션 환경으로의 변환)
  • 규정 준수 및 유효성 검사

위와 같이 구축된 파이프라인은 애플리케이션을 업데이트하고 제공하려는 단계에서 걸리는 시간을 빠르고 안정적이게 줄여주며, CI/CD 인프라와의 호환성과 효율성을 높여준다.




👀 Github Action으로 Client 배포하기


Github Action으로 Client 배포하는 것은 간단하게 3가지 단계로 나눌 수 있다.

  • Source: Github reference 브랜치에 코드가 커밋되면

  • Build: github acitons의 YAML 파일에 적힌 명령어를 토대로 Webpack을 이용해 빌드를 하고

  • Deploy: github acitons의 YAML파일에 적힌 명령어를 토대로 s3로 빌드 결과를 업로드 한다.



🔥 실습


일단, Github Action에 민감한 정보를(ex. AWS CLI KEY) 저장할 때, Secrets을 이용해 암호화해서 저장한다.

Setting > secret > action 탭을 클릭하여 아래와 같이 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 설정한다.

이후, 아래와 같이 client.yaml 파일을 작성하여 commit 하면,

client.yaml 파일에 적힌 명령어를 토대로 Webpack을 이용해 Repository에 있는 파일들을 빌드 한다.


이후, client.yaml 파일에 적힌 명령어를 토대로 Amazon S3로 빌드 결과를 업로드한다.

버킷을 확인해보면 아래와 같이 빌드 결과가 업로드 된 것을 확인할 수 있다.

버킷의 속성탭의 정적 웹 사이트 호스팅 항목을 확인해보면, 아래와 같이 버킷 웹 사이트 엔드포인트를 확인할 수 있다.

http://fe-6-ko9612.s3-website.ap-northeast-2.amazonaws.com/






Reference:

코드스테이츠

https://abcloudz.com/services/devops/

0개의 댓글