-
Notifications
You must be signed in to change notification settings - Fork 1
๐ฅ CI CD ์ ์ฉ๊ธฐ with release ์๋ํ ๐ฅ
typescript + jest codecov ์ ์ฉ ์ฌ์ ํ ์คํธ
๊ทธ๋ฃน ํ๋ก์ ํธ์์ ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ผ๋ก release๊ฐ ์ต์ 2ํ ๋จ์์์๋ค. ๊ทธ๋์ ํ ์คํธ ์ฝ๋ coverage์ ๋ํ ๊ฒ์ฆ์ ํ๊ณ ์ถ์๋ค.
codecov๋ PR Review๋ฅผ ์งํํ ๋๋ง๋ค _ํด๋น PR์ด code coverage๋ฅผ ์ผ๋ง๋ ๋ง์กฑํ๋์ง ์๊ฐ์ ์ผ๋ก ํ์ธ_ํ ์ ์๋ค๋ ์ ์ด ๊ฐ์ฅ ๋งค๋ ฅ์ ์ด์๋ ๊ฒ ๊ฐ๋ค.
์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ ์ ์ฉํ๋ ์ฐ๋ฆฌ ํ์ test code coverage๋ฅผ PR๋ง๋ค ์๊ฐ์ ์ผ๋ก ํ์ธํจ์ผ๋ก์จ, ์ ํจํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋์ง, ๋ชฉํํ๋ ๋งํผ ํ ์คํธ ์ฝ๋๋ฅผ ์ ์ ํ ๋ฒ์๋ก ์ ์ ์ฉํ๋์ง ์ ๊ฒํ๋ ค๊ณ ํ๋ค.
๋ค๋ง, ํ์ฌ ์ธํฐ๋ท์ ๋์ ์๋ ๋ง์ ์ ๋ณด๋ค์ด v1์ ๋ง์ถ์ด์์ง๋ง, v3
๊ณผ๋ ์กฐ๊ธ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ ํผ๋์ ๊ฒช๊ธด ํ์๋ค..
ํ์ฌ๋ v1์ด deprecated๋์ด, v3์ ์ฌ์ฉํ์๋ค.
-
์์ ์ฌ์ ํ ์คํธํ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์งํํ๋, ํ์ฌ OAO Project์์๋ Client ํ์ผ์ ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ๊พธ์ด์ ์์ ํจ.
- client ๋๋ ํ ๋ฆฌ์ yarn์ด ์ค์น๋์ด ์๊ธฐ ๋๋ฌธ์
cd client
๋ฅผ ํด์ค์ผ ํ๋ค.
- client ๋๋ ํ ๋ฆฌ์ yarn์ด ์ค์น๋์ด ์๊ธฐ ๋๋ฌธ์
-
๋ํ, github actions yml ํ์ผ์
paths: client/**
๋ฅผ ์ถ๊ฐํด์ ํด๋ผ์ด์ธํธ๋จ ์์ค๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๋์๊ฐ๋๋ก ๋ง๋ค์๋ค. (ํด๋ผ์ด์ธํธ ํ์ผ๋ง Test ๋์์ด๊ธฐ ๋๋ฌธ)
yarn+express docker ์ ์ฉ ํ ์คํธ
๋ณ๊ฒฝ์ ์ด ์๊ธธ ๋๋ง๋ค ์๋ฒ๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ฌด ํ๋ ์ผ์ด์๋ค.. ์ถ๊ฐ๋ก, ๋ก์ปฌ์์๋ ์ ๋๋๋ฐ, ์๋ฒ๋ก ์ฌ๋ฆฌ๋ฉด ์ ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒจ์ ์ด์ ๋ํ ํด์ ๋ฐฉ์๋ ํ์ํ๋ค. ์ด์ ๋๋ถ์ด, ๊ฐ๋ฐ ์๋ฒ์ release ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋๋ฉด์ ๋ชจ๋ ์๋ฒ์ ์ค์ ์ ๋ฃ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ผ ์๊ฐํ๋ค.
์์ฝํ์๋ฉด, ๋ค์ํ ํ๊ฒฝ(local, dev, release)์์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ณ , ์ด์ ๋ฐ๋ผ ๋ฐ์ํ ์ ์๋ side effect ๋ฐฉ์งํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค!
-
/dist
์ ๋ฒ๋ค๋ง๋ index.html์ ๋ฟ๋ ค์ค
- docker ์คํ ์ host post:container server port๋ฅผ ๋งคํํด์ผ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
docker run -d -p [๋ด local port]:[container์์ ์ผ์ ธ์๋ port] ghcr.io/kumsil1006/oao:latest
docker pull ghcr.io/kumsil1006/oao:oao-client
docker run -d -p 8080:3000 ghcr.io/kumsil1006/oao:oao-client
-
github actions์์ ts build
-
Dockerfile์์ build๋ ํ์ผ copy ๋ฐ run
-
backend์ ์คํ๋์ด ์๋ express ์๋ฒ๋ฅผ ํ์ธํ ์ ์๋ค.
- proxy์ฉ ์๋ฒ ์ฌ์ฉ
- /: frontend, /api: backend๋ก ํ๋ก์
- docker compose๋ pull ๋ฐ์ container๋ง compose๋ฅผ ๋ค์ ํด์ค๋ค.
- ๋ฐ๋ผ์, client, server yml์ ๊ฐ๊ฐ ๋ณ๊ฒฝ์ ์ด ์๊ฒผ์ ๋ ๋น๋ ํ pullํ๋๋ก ์ค์ ํ์ฌ pull๋ฐ์ ์ปจํ ์ด๋๋ง updateํ๋๋ก ์ค์ ํ๋ค.
- ์ด๋ก ์ธํด, client๋จ ์์ค๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ client container๋ง, server ์์ค๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ server container๋ง pull ํ์ฌ docker compose ๋ถํ๋ฅผ ์ค์ด๊ณ ์ ํ๋ค. ์ถ๊ฐ๋ก, github workflow yml file์ ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์คํํ๋ ๋น๋&๋ฐฐํฌ ๋ถํ์ ๋ฐฐํฌ๋ก ์ธํ ์๋ฒ ์ค๋จ๊ณผ ์ด๋ก ์ธํด ์ผ์ด๋๋ ๋ฌธ์ (์ธ์ , memory db ํ๋ฐ)๋ฅผ ์ต์ํํ๊ณ ์ ํ๋ค.
- node_modules์ ๋ณ๊ฒฝ์ด ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋งค๋ฒ yarn install์ ํ๋ฉด ๋นํจ์จ์ ์ด๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ marketplace์ ์๋ cache action์ ์ด์ฉํด cachingํด์ฃผ๊ธฐ๋ก ํ๋ค
- nnode_modules์ ๋ํ cache ๊ฒ์ฌ๋ฅผ ํ ํ ๋ชจ๋์ ๋ณํ ๊ฒ์ด ์๋ค๋ฉด yarn install์ ์คํํด์ฃผ๊ณ , ๋ณํ๊ฐ ์๋ค๋ฉด ๊ทธ ๋ค์ step์ผ๋ก ๋์ด๊ฐ๋ค.
- ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ... main๊ณผ release์
- client source์ ๋ณํ๊ฐ ์๋ PR์ด ์ฌ๋ผ๊ฐ๋ฉด code coverage Action์ด ์ํ๋๋ค.
- client/server source ๋ณํ๊ฐ ์๋ push๊ฐ ์ผ์ด๋๋ฉด CD Action์ด ์ํ๋๋ค.
- ์ด Action๋ค์ ๋ํด ๋งค๋ฒ ์ฑ๊ณต/์คํจ๋ฅผ ๋ณด๊ธฐ ์ํด์๋ Actions์ ๋ค์ด๊ฐ์ ํ์ธํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ slack์ ์ด๋ฐ Action๋ค์ด ์ํ๋๋ฉด ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ฃผ๋ Action์ ๋ง๋ค๊ธฐ๋ก ํ์๋ค.
- ์นด์นด์ค์นํฐ์ GitHub Actions๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ์์๊น? ๊ธ์ Composite Action ๋ง๋ค์ด๋ณด๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ฝ๊ฒ Action์ ๋ง๋ค ์ ์๋ค.
- oao-dev-client
- oao-dev-server
- oao-dev-proxy
- oao-client
- oao-server
- oao-proxy
- release branch์ PR ๋ ์๊ฐ ๋๋ง๋ค release๋๋๋ก ์ค์
-
body
์changelog
๋ฅผ ์ถ๊ฐํด์ ๋ณ๊ฒฝ์ ์ ์ถ์ ํด์ค๋ค. (๊ฟ๊ธฐ๋ฅ)
- release ๋ฒ์ ์ ๋งค๋ฒ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๋ฐ!
- github registry์ ์ด๋ฏธ์ง ๋ฒ์ ์ tag๋ก ๊ด๋ฆฌํ๋๋ฐ, ์๋์ผ๋ก ๋ฒ์ ์ด ๋ผ๋ฒจ๋ง๋๊ณ release ์ version up์ ํด์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค!
- git release ์ ๋ณ๊ฒฝ์ ์ ๋ชจ๋ ๊ธฐ๋กํด์ฃผ๊ณ , ๊ธฐ๋ฅ ์ถ๊ฐ(feat)์ธ์ง, ๋ฒ๊ทธ ์์ (fix)์ธ ์ง์ ๋ํ release note๋ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ค๋..!! ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๊ฒ ๊ตฐ!
-
server, client์ ์คํฌ๋ฆฝํธ์ ๊ฐ๊ฐ Release๋ฅผ ๋ฃ์ผ๋ฉด, client, server๊ฐ ๋ชจ๋ ๋ฐฐํฌ๋๋ ์ํฉ์ version up์ด ๋ ๋ฒ ์ผ์ด๋ ๊ฒ ๊ฐ๋ค. ์ด๋ ๊ฒ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ๊ณผ์ฐ ๋ง์๊น์ ๋ํ ๊ณ ๋ฏผ๋ค.!
- server, client๊ฐ ๋ชจ๋ ํ repository์์ ๊ด๋ฆฌ๋๊ณ ์๊ณ , ํ์ฌ ๊ณํ์ release๋ฅผ ํ๋ฉด ๊ธฐ๋ฅ ๋จ์๋ก ๋ฐฐํฌํ๊ธฐ ๋๋ฌธ์, server, client๊ฐ ํ ๋ฒ์ ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ค. (hotfix ์ ์ธ)
-
๋ฒ์ ๊ด๋ฆฌ up ์ latest release๋ฅผ ๊ธฐ์ค์ผ๋ก version update๋ฅผ ํด์ฃผ๋๋ฐ, ์ด ๊ธฐ๋ฅ์ด ๋๋ฌด ์ข์๋ณด์๋ค..!!
- ์ถํ์ minor update๋ฅผ ํ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ค๋ฌ์ผ๋ฉด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ๋ ์ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
- ๋ค๋ง, release ์ดํ hotfix๋ฅผ ํ๋ค๋ฉด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง ๊ณ ๋ฏผ์ด๋ค. (minor ๋ฐฐํฌ, major ๋ฐฐํฌ, hotfix ๋ฑ ์ข ๋ ์ธ์ธํ ์์ ๋ค์ ์คํ๋ ค ์๋์ผ๋ก ํ๋ ๊ฒ ๋ซ์ง ์์๊น.. ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ์ข ๋ ์ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค.)
-
์ถ๊ฐ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ ๋ฐ ํผ๋๋ฐฑ
- 1์ฐจ release ์ดํ ์กฐ์ฌ ์์
name: Release Github Application Version
on:
pull_request:
branches:
- release
jobs:
release-application:
runs-on: ubuntu-latest
steps:
- name: Github Release ์ต์ tag ๋ฐ์์ค๊ธฐ
id: tag_version
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: GitHub project release ์
๋ฐ์ดํธ
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: Release ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}
- OaO ํ๊ฒฝ์ค์ A to Z
- CRLF ๋๊ฐ ๋ญ๋ฐ ๋ ํ๋ค๊ฒ ํด?
- Github Issue ๋๋ํ๊ฒ ์ฌ์ฉํ๊ธฐ
- OAO! CI CD ์ ์ฉ๊ธฐ with release ์๋ํ
- ๋งค๋ฒ ๋ค๋ฅธ import๋ฌธ
- ๋ชป์๊ธด ์๋๊ฒฝ๋ก์์ ๊ฐzlzl์กด ์ ๋๊ฒฝ๋ก๋ก๐
- TodoList API ๊ฐ๋ฐ๊ธฐ
- ์์กด์ฑ ์ฃผ์ ์ผ๋ก DB๋ฅผ ๋ฐ๊ฟ๋ณด์
- ๋ ๋๋ง ์ต์ ํ ์๋ง: useNavigate๋ฅผ ์ถ๊ฐํ ์๊ฐ ๋ฆฌ๋ ๋ ๋ฒ์๊ฐ ํ์ฅ๋ ๊ฑด์ ๋ํ์ฌ
- ๋ ๋๋ง ์ต์ ํ 1ํ: ๋ ๋๋ง ๋ฒ์์ ๋ํ์ฌ (by ์ต์ ํ๋ฌด์)
- ๋ ๋๋ง ์ต์ ํ 2ํ: ์๋ชป๋ custom hook ์ฌ์ฉ,, ์ ์ฒด ๋ฆฌ๋ ๋๋ง์ ๋ถ๋ฅด๋ค,,
- ๋ ๋๋ง ์ต์ ํ 3ํ: Todo ์์ธ ์ข ๋ดค๋ค๊ณ ํ ์ด๋ธ ์ ์ฒด๊ฐ ์ฌ๋ ๋๋ง ๋๋๊ฑด์ ๊ณ ์น๊ธฐ๐
- ๋ ๋๋ง ์ต์ ํ 4ํ: ๋ค์ด์ด๊ทธ๋จ ํธ
- ๐ ๋ง์ฐ์ค ์๋์์น ๊ณ์ฐ์ ์ด์ํด
- React ์ปดํฌ๋ํธ์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํด๋ณด์ ๐๐ป๐จ
- ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ๋ณด์: Modal ๋ถ๋ฆฌ๊ธฐ ๐น
- ์ ํ๊ด๊ณ๋ฅผ ์๋์์ฑ์ผ๋ก ์ถ๊ฐํด๋ณด์ ๐