๐GitHub Action ์ด๋?
GitHub Actions๋ Github๊ฐ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ CI/CD ํ๋ซํผ์ด๋ค.
๋ ํฌ์งํ ๋ฆฌ์์ Pull Request ๋ push ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก GitHub ์์ ์ํฌํ๋ก(Workflow)๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ์ํฌํ๋ก๋ ํ๋ ์ด์์ ์์ ์ด ์คํ๋๋ ์๋ํ ํ๋ก์ธ์ค๋ก, ๊ฐ ์์ ์ ์์ฒด ๊ฐ์ ๋จธ์ ๋๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ฉฐ ํ ์คํธ, ๋ฐฐํฌ ๋ฑ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์ํฌํ๋ก๋ ๋ง๋ค ์ ์๋ค.
์์ฑ๋ ์ํฌํ๋ก๋ .github/workflows ๋๋ ํฐ๋ฆฌ์ yml (ํน์. yaml ) ํ์ผ๋ก ์ ์ฅ๋๋ค.
๐YAML ์ด๋?
Yet Another Markup Language์ ์ฝ์๋ก, ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ์ธ์ด๋ฅผ ์๋ฏธํ๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ๊ป ์ฌ์ฉํ ์๋ ์๋ ์ ์ฐ์ฑ๊ณผ ์ ๊ทผ์ฑ์ผ๋ก ์ธํด ์๋ํ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐ์๋ ์ฌ์ฉ๋๋ค.
JSON์ ์์ ํธํ
- JSON ํ์ผ๊ณผ ๋ค๋ฅด๊ฒ ์ฃผ์์ ์์ฑ๊ฐ๋ฅํด์ ์ปค๋ฎค๋์ผ์ด์ ์ํ
- {}๊ฐ ์์ด์ ์ค์ฝํ ์๋ฐ์์ ๋ฒ์ด๋จ
- ""(ํฐ๋ฐ์ดํ)๊ฐ ์์ด ๋ฌธ์์ด ์์ฑ์ด ๊ฐ๋ฅํด์ ํ๋์ ๋ค์ด์ด
- JSON์ผ๋ก ๋ณํํ๊ณ ๊ทธ ๋ฐ๋๋ก๋ ๊ฐ๋ฅ
YAML๋ฌธ๋ฒ: https://subicura.com/k8s/prepare/yaml.html
๐ํด๋ผ์ด์ธํธ ๋ฐฐํฌ ์ค์ต
ํด๋ผ์ด์ธํธ ๋ฐฐํฌ๋ ๊ฐ๋จํ๊ฒ 3๊ฐ์ง ๋จ๊ณ๋ก ๋๋๋ค.
- Source: Github reference ๋ธ๋์น์ ์ฝ๋๊ฐ ์ปค๋ฐ
- Build: github acitons์ YAML ํ์ผ์ ์ ํ ๋ช ๋ น์ด๋ฅผ ํ ๋๋ก Webpack์ ์ด์ฉํด ๋น๋
- Deploy: github acitons์ YAML ํ์ผ์ ์ ํ ๋ช ๋ น์ด๋ฅผ ํ ๋๋ก s3๋ก ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ก๋
์ ๋จ๊ณ๋๋ก ์ํฌํ๋ก๋ฅผ ๊ตฌ์ฑํด๋ณด์.
# .github/workflows/client.yml
name: client
on:
push:
branches:
- reference # ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ ๋ธ๋์น
jobs:
build:
runs-on: ubuntu-20.04
steps:
# Source ๋จ๊ณ
- name: Checkout source code.
uses: actions/checkout@v2
- name: Install dependencies
run: npm install
working-directory: ./my-agora-states-client
# Build ๋จ๊ณ
- 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 }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
AWS_EC2_METADATA_DISABLED: true
run: |
aws --version
# Deploy ๋จ๊ณ: Bucket์ ์
๋ก๋
- name: Sync Bucket
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
AWS_EC2_METADATA_DISABLED: true
run: | # AWS CLI ๋ช
๋ น์ด ์ฌ์ฉ
aws s3 sync \
--region ap-northeast-2 \
build s3://fe-53-kihyeoon \
--delete
working-directory: ./my-agora-states-client
AWS CLI ๋ช ๋ น์ด: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-prereqs
AWS ID์ KEY๋ ๊นํ action secret์ ๋ฑ๋กํด์ ์ธ๋ถ์ ๋ ธ์ถ๋์ง ์๋๋ก ๊ด๋ฆฌํด์ผ ํ๋ค. ๋ง์ฝ์ ์ค์ ํ์ผ ์ฝ๋์ ํค๊ฐ ๋ ธ์ถ๋ ์ํ๋ก S3์ ์ ๋ก๋ํ๋ฉด AWS์์ ์๋์ผ๋ก ๋ฒ์ผ์ ์ ์ง์ํฌ ์๋ ์๋ค.