Unit 10 - 배포 자동화 Day1

ddimi·2022년 12월 7일
0

SEB_FE_41

목록 보기
13/14
post-thumbnail

CI/CD

CI/CD란

CI 는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
CD 는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미. 이 두 용어는 상호 교환적으로 사용

CI/CD의 단계

지속적 통합(Continuous Integration, CI)

개발자를 위한 자동화 프로세스라고 볼 수 있음

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

  • 지속적인 통합 과정을 통해 개발자는 버그를 일찍 발견할 수 있고, 테스트가 완료된 코드에 대해 빠른 전달이 가능 및 지속적인 배포 가능
  • 모든 코드 변화를 하나의 레포지토리에서 관리함으로 투명하게 문제점을 파아갈 수 있고 잦은 리퀘스트(pull request)와 머지(merge)로 코드를 자주 통합함

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

지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용됨

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

  • 지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함됨
  • 이 과정을 완료하면 프로덕션 준비가 완료된 빌드를 코드 레포지토리에 자동으로 배포할 수 있기 때문에 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 됨
  • 최근에는 클라우드 기술 발전과 함께 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어서 다루는 경우가 점차 증가하고 있음!

CI/CD 파이프라인

수 없이 진행되는 배포 과정을 자동화시키는 방법을 구축하는 것

CI/CD 파이프라인을 구성하는 기본 단계와 수행 작업


배포에서 파이프라인(Pipeline)이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻함. 파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리하고 각 단계는 파이프라인 안에서 순차적으로 실행되며, 각 단계마다 주어진 작업(Actions)들을 수행함

파이프라인을 여러 단계로 분리할 때, 대표적 세 가지의 단계

  1. Source 단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행
  2. Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행
  3. Deploy 단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

CI/CD 파이프라인 구성 요소 및 장점

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

이 과정이 실무에서는 반복적인 프로세스이기 때문에 이 부분을 일련의 자동화 단계로 만든다고 볼 수 있음


클라이언트 배포

Amazon Web Service (AWS) S3 이용

yml 파일 작성 후 build 하기

client에서 npm installnpm install 후에 npm run build build 성공 !

하지만 이건 자동화가 아니었다......ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이번 과제에서 중요한 것은 "자동화"

vscode 에서 .github -> workflows ->  yml 파일 작성 => git push 이 과정을 거쳐야 자동화를 경험 할 수 있다

1. 레포지토리 생성해서 push 하기

1). 레포지토리 생성
2). 레퍼런스 코드 클론

3). 새로운 레퍼지토리를 원격 레포지토리로 등록
4). 레퍼런스 코드를 새로운 레퍼지토리로 push

git remote add myRepo git@github.com:kangseong-sim/deploy-practice.git

#레퍼런스 코드 클론
git clone git@github.com:codestates-seb/fe-sprint-my-agora-states-server-reference.git
# 디렉터리 이동
cd fe-sprint-my-agora-states-server-reference

// 여기서부턴 vscode 터미널에서
# 새로운 리포지토리를 원격 리포지토리로 등록
git remote add myRepo git@github.com:{나의 깃헙 아이디}/{새로운 리포지토리 이름}.git
# 기존 레퍼런스 코드를 새로운 리포지토리로 push
git push myRepo reference

2. yml 파일 생성 하고 push 하기

1) yml 파일 생성

name: client
on:
  push:
    branches:
      - reference
jobs:
  build:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout source code.
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
        working-directory: ./my-agora-states-client
      - name: Build
        run: npm run build
        working-directory: ./my-agora-states-client
      - name: SHOW AWS CLI VERSION
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws --version
      - name: Sync Bucket
        env:
          ![](https://velog.velcdn.com/images/seongsimk/post/0f0450fe-ef09-4c4d-b6f3-ade86eb6be96/image.png)
: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws s3 sync \
            --region ap-northeast-2 \
            build s3://fe-6-kangseong-sim-s3 \
            --delete
        working-directory: ./my-agora-states-client

2) github - Actions secrete - Repository secrets

3) yml 파일 push 하기

git add .
git commit -m "add client"
git push myRepo reference

4) 차분한 기다림 ..^^

흑흑 드디어 성공 ㅜㅜㅜ

5) aws 배포 자동화 확인

yml 파일을 작성한대로 aws가 자동으로 배포를 해준다!!!!

사실 실시간 세션 전에도 성공을 하긴 했지만,,, 
배포 "자동화"가 아닌 aws에 가서 drag-drop으로 올린거였다..ㅎㅎ
그때만 해도 뭐가 잘못된지 몰랐는데 지나고 복습을 하다보니 완전 실수투성이 그자체...^^
yml 파일도 github 작성하질 않나,,, 

제일 큰 난관은 Actions secrete을 적는거였다..
이걸 작성할 때 이름 자체가 변수?인거 같다. yml 파일의 `key : value`를 잘 보고 key는 name에 적고 value는 secret에 적어주면 된다...ㅎㅎㅎㅎ 
계속 secret name에 build(지나고 보니 진짜 바보네 ㅎㅎ) 라고 적고 secret 안에는 `key : value` 를 그대로 적어버린 것이다.. 그러니 계속해서 인증 관련해서 에러 코드가 발생했고 그래도 실시간 세션 전에 방법을 알아내서 Actions secrets는 잘 작성할 수 있었다...!!!


그래도 차라리 오류가 나는 걸 github에서 바로 바로 볼 수 있어서.. push 하고 오류 나면 .. 큰일 나잖어...

github action으로 클라이언트 CI/CD를 구축한 배포 링크

github 링크
배포 링크

0개의 댓글