Github Actions - AWS S3

JiHun·2023년 8월 1일
0

Github은 CI/CD를 모두 제공하는 플랫폼이다.

CI (Continuous Integration)

코드 변경 사항을 레포지토리에 푸시할 때마다 자동으로 빌드 및 테스트를 실행하는 프로세스다. CI는코드 품질과 안정성을 높이고, 팀원들이 개발한 코드가 통합되면서 충돌이나 버그가 발생하는 것을 미리 방지하는 데 도움이 된다. GitHub Actions를 사용하여 CI 워크플로우를 구성할 수 있으며, 이를 통해 코드 빌드, 유닛 테스트, 통합 테스트 등을 자동화할 수 있다.

CD (Continuous Delivery)

코드 변경 사항이 테스트를 통과하면 자동으로 프로덕션 환경으로 배포되도록 하는 프로세스다. CI/CD 파이프라인을 설정하면, 개발자가 코드 변경을 커밋하고 푸시하면 이 변경 사함이 자동으로 데스트되고, 빌드되고, 스테이징 환경에서 검증된 후, 자동으로 운영 환경에 배포될 수 있다.

Github Actions

AWS - S3와 연결해서 자동적으로 빌드하여 S3 버킷에 올려 배포하는 방식을 나열한다.

1. AWS access key와 secret key을 actions에 등록

  • Repository에 setting Secrets and variables 탭에 Actions로 들어간다.
  • New repository secret 버튼을 눌러 등록한다.

2. 워크플로우 yml 파일 작성

해당 워크플로우가 특정 이벤트가 발생할 때 실행되도록 설정할 수 있다. 워크플로우 파일 내에서 원하는 액션들을 호출하고, 작업 단계를 정의하여 소프트웨어 개발과 배포 프로세스를 자동화할 수 있다.

.github 디렉토리를 만들고 workflows 디렉토리도 만들어서 여기에 .yml 파일

name: client
on:
    push:
        branches:
            - reference

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - name: Checkout source code.
          uses: actions/checkout@v2
        - name: Install dependencies
          run: npm install
          working-directory: ./my-agora-states-client-react
        - name: Build
          run: npm run build
          working-directory: ./my-agora-states-client-react
        - name: SHOW AWS CLI VERSION
          run: |
            aws --version
        - name: Sync Bucket
          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 s3 sync \
                --region ap-northeast-2 \
                build s3://{ 연결할 버킷이름 } \
                --delete
          working-directory: ./my-agora-states-client-react

yml 분석

name: client
  • 워크플로우 이름
on:
  push:
    branches:
      - reference
  • 이 워크플로우는 "reference" 브랜치로 push 이벤트에만 동작한다.
jobs:
  build:
    runs-on: ubuntu-latest
  • "build"라는 이름의 동작을 한다.
    이 job은 "ubuntu-latest" 라벨을 가진 GitHub 호스트에서 실행된다. 즉, Ubuntu 환경에서 작업이 수행된다.
steps:
  - name: Checkout source code.
    uses: actions/checkout@v2
  • actions/checkout@v2 액션을 사용하여 소스 코드를 체크아웃한다. 이 액션은 현재 Repository의 코드를 가져온다.
- name: Install dependencies
  run: npm install
- name: Build
  run: npm run build
  working-directory: ./my-agora-states-client-react
  • npm install 명령을 실행하여 ./my-agora-states-client-react 디렉토리에 있는 의존성을 설치한다.
  • npm run build 명령을 실행하여 ./my-agora-states-client-react 디렉토리에 있는 클라이언트 애플리케이션을 빌드한다.
- name: SHOW AWS CLI VERSION
  run: |
    aws --version
- name: Sync Bucket
  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 s3 sync \
      --region ap-northeast-2 \
      build s3://{ 연결한 버킷 이름 } \
      --delete
  • aws s3 sync명령을 사용하여 ./my-agora-states-client-react/build 디렉토리에 있는 빌드된 애플리케이션을 Amazon S3 버킷과 동기화한다.
  • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY는 GitHub 리포지토리의 Secrets에서 가져와서 환경 변수로 설정합니다. 이를 통해 AWS CLI가 액세스 키를 사용하여 S3 버킷과 상호 작용할 수 있다.
  • --region ap-northeast-2는 동기화할 S3 버킷이 있는 AWS 리전을 지정합니다.
  • --delete 옵션은 로컬 디렉토리에는 없지만 원격 버킷에는 있는 파일들을 동기화하는 동안 로컬 디렉토리에서 삭제합니다.

AWS CLI는 미리 설치되어 있지 않아도, GitHub Actions 환경에서 기본적으로 사용할 수 있다. GitHub Actions 환경은 여러 사전 설치된 도구 및 라이브러리를 제공하여 워크플로우를 쉽게 설정하고 사용할 수 있도록 한다. 이러한 사전 설치된 도구 중에서는 AWS CLI도 포함된다.

3. 확인

push 하면 yml에 설정한 순서대로 동작한다. 빌드 후 버킷에 업로드된다.

GitHub Actions

첫번째 있는 것이 실행되어 완료된 커밋이다.

AWS S3

마지막 수정이 업데이트 되었다.
속성탭에 들어가서 정적 웹 사이트 호스팅된 주소로 들어가면 배포가 된 것을 확인할 수 있다.

profile
안녕하세요. 프론트엔드 개발자 송지훈입니다.

0개의 댓글