๐ฌ Code States ๋ถํธ์บ ํ์ ๋ง๋ฐ์ง์ CI/CD๋ฅผ ์ํ Github Action ์ค์ต์ด ์์๋ค. ์ด์ ์ฑํฐ์์ AWS S3 ๋ฒํท์ ํตํด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ฐฐํฌํ์๊ณ , ์ด๋ฏธ ๋ฐฐํฌ ์ค๋น๊ฐ ์๋ฃ๋ S3์ Github Action์ ํตํด ํ์ผ์ ์ ๋ฌํ๋ ๊ฒ์ด ์ด๋ฒ ์ค์ต์ ๋ชฉํ์๋ค. ์ฒ์์ด๋ผ ๋๋ฌด ํท๊ฐ๋ ธ๋๋ฐ, ํ๋ค๋ณด๋ ํฅ๋ฏธ๊ฐ ์๊ฒจ์ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณผ๊น ํ๋ค.
๐ GitHub Actions๋ Github๊ฐ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ CI/CD ํ๋ซํผ์ด๋ค.
๐ Github Actions๋ฅผ ํตํ ํด๋ผ์ด์ธํธ ๋ฐฐํฌ Flow
1. Source
Github ๋ธ๋์น์ ์ฝ๋๊ฐ push (push ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ด๋ฒคํธ๋ ๊ฐ๋ฅ) ๋๋ฉด
2. Build
Github Acitons์ YAML ํ์ผ์ ์ ํ ๋ช
๋ น์ด๋ฅผ ํ ๋๋ก Webpack์ ์ด์ฉํด ๋น๋๋ฅผ ํ๊ณ
3. Deploy
Github Acitons์ YAML ํ์ผ์ ์ ํ ๋ช
๋ น์ด๋ฅผ ํ ๋๋ก s3๋ก ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์
๋ก๋ํ๋ค.
๐ ์งํ ๊ณผ์ ์์ฝ
1. ๋ฐฐํฌํ ํด๋ผ์ด์ธํธ ํ์ผ ์ค๋น์ ๋ฐฐํฌํ์ผ์ด ์ฌ๋ผ๊ฐ git repository ์์ฑ
2. ๐ AWS_ACCESS_KEY, AWS_SECRET_KEY ์ค๋น
3. yml
ํ์ผ ์์ฑ
4. ๋ฐฐํฌ ํ์ธ
1. ๋ฐฐํฌํ ํด๋ผ์ด์ธํธ ํ์ผ ์ค๋น์ ๋ฐฐํฌํ์ผ์ด ์ฌ๋ผ๊ฐ git repository ์์ฑ
• repository๋ public์ผ๋ก ๋ง๋ค์ด์ผ Github Action์ ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅ
• ์์ ํ ํด๋ผ์ด์ธํธ ํ์ผ์ git repository์ ์ฐ๊ฒฐ
git remote add origin [repository]
2. ๐ AWS_ACCESS_KEY, AWS_SECRET_KEY ์ค๋น
• YAML ํ์ผ์ ACCESS_KEY๋ Secretํ๊ฒ ๊ด๋ฆฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ Github Setting์ Security์์ ๊ด๋ฆฌํ๋ค. (ํ๋์ฝ๋ฉ ์ ๋ X)
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
3. ๐ฉ๐ป๐ป yml ํ์ผ ์์ฑ
๐ ํ์ผ์์น: ./.github/workflows/client.yml
# client.yml
name: client # workflow ์ด๋ฆ
on:
push:
branches:
- reference # reference ๋ธ๋์น์ push๋ฅผ ํ๋ฉด, ์๋ jobs๋ฅผ ์คํ
jobs:
build: # job์ ์ด๋ฆ
runs-on: ubuntu-20.04 # ์คํ ํ๊ฒฝ
steps: # jobs์ ์คํ ์์
# ์ฐธ๊ณ
# actions๋ฅผ ์ฌ์ฉํ ๋๋ uses ์์ฑ ์ฌ์ฉ
# command๋ script ์คํ์ run ์์ฑ ์ฌ์ฉ
- name: Checkout source code.
uses: actions/checkout@v2 # github์ ์์ค์ฝ๋ ํ์ธ
- name: Install dependencies
run: npm install # dependencies ์ค์น
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 # AWS ๋ฒ์ ํ์ธ(์๋ต๊ฐ๋ฅ)
run: |
aws --version
- name: Sync Bucket # AWS S3 ๋ฒํท ์ฐ๊ฒฐ
env:
# ๋๋ฒ์งธ ๊ณผ์ ์์ secret key๋ก ๋ฑ๋กํ ๋ถ๋ถ (ํ๋์ฝ๋ฉ X)
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://fe-50-sw2377-s3 \\
--delete
# AWS sync : ๋ฒํท๊ณผ ๋๋ ํฐ๋ฆฌ ์ฝํ
์ธ ๋๊ธฐํ
# --region : ์์ธ
# build s3://[๋ฒํท ์ด๋ฆ]
# --delete : ์๋ณธ์ ์๋ ํ์ผ์ด๋ ๊ฐ์ฒด๋ฅผ ๋์์์ ์ ๊ฑฐ
working-directory: ./my-agora-states-client-react
4. ๋ฐฐํฌ ํ์ธ
yml ํ์ผ ์์ฑ ํ push๋ฅผ ํ๋ฉด S3 ๋ฐฐํฌ๊น์ง ์๋ํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
'Frontend Dev > ๊ธฐํ ์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Proxy ์ค์ ํด HTTP ํต์ ํ๊ธฐ ( webpack dev server์ proxy์ React Proxy ์ฌ์ฉ๋ฒ ) (0) | 2023.08.03 |
---|---|
mkcert ์ฌ์ฉ๋ฒ - ๋ก์ปฌ ๊ฐ๋ฐ์ ์ํ HTTPS ํ๊ฒฝ ๋ง๋ค๊ธฐ (0) | 2023.06.30 |