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의 단계

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 yml 파일npm installclient에서 npm installnpm run buildnpm install 후에 npm run build build 성공 build 성공 !

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

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

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

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

1). 레포지토리 생성새로운 레포지토리
2). 레퍼런스 코드 클론
git clone
3). 새로운 레퍼지토리를 원격 레포지토리로 등록
4). 레퍼런스 코드를 새로운 레퍼지토리로 push
3,4
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

push 완료

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개의 댓글