๐๊ฐ๋ฐ ํ๋ก์ธ์ค - ๊ฐ๋ฐํ๊ฒฝ
โ
Local
- ๊ฐ์ ์ปดํจํฐ์์ ๊ฐ๋ฐ์ ํจ
- ๊ฐ์์ ํ๊ฒฝ์ ํต์ผํด์ค์ผ ํ๋๊น Docker ๋ฑ์ ์ฌ์ฉํจ !
โ
Dev - [dev] Branch
- Local์์ ๊ฐ๋ฐํ ๊ธฐ๋ฅ ํ
์คํธํ๋ ํ๊ฒฝ
- Test ์๋ฒ
โ
Staging - [staging] Branch
- Production ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ด์, ๋ณด์, ์ฑ๋ฅ ์ธก์ ํ๋ ํ๊ฒฝ
- Staging ์๋ฒ
โ
Production - [main] Branch
- ์ค์ ์๋น์ค๋ฅผ ์ด์ํ๋ ํ๊ฒฝ
- ์ด์ ์๋ฒ
๐ Why? ๊ฐ๋ฐํ๊ฒฝ์ ๋๋๋?
์ค์ ์ด์ ์ค์ธ ์๋น์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ !
- ์๋ฅผ ๋ค์ด, ํ
์คํธํ๋ ํ๊ฒฝ๊ณผ ์๋น์ค๊ฐ ๋์๊ฐ๋ ํ๊ฒฝ์ด ๋์ผํ๋ค๋ฉด, ํ
์คํธ ๊ณผ์ ์์ ์๋ฌ๋ ์๋น์ค์ ์๋ฌ๋ก ์ง๊ฒฐ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋๋ ์ค์ผ ํจ !!
๐ How? Git Flow ์ฐธ๊ณ
[ main ] โ [ staging ] โ [ dev ] โ [ feature/๊ธฐ๋ฅ ์ด๋ฆ ]
- Dev Branch์ Merge๋๋ฉด => Local์์ Git Pull & Test ์คํ ํ ๊ด์ฐฎ์ผ๋ฉด ์ฝ๋ ๋ฐฐํฌ(FTP๋ก ํ์ผ ์ ์ก) ํํ๋ก ์งํ
โจ Continuous Integration(CI)
- ์ง์์ ํตํฉ ! (๋น๋, ํ
์คํธ ์๋ํ)
- ์๋กญ๊ฒ ์์ฑํ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด Build, Test ์งํ ํ์ Test Case์ ํต๊ณผํ๋์ง ํ์ธํ๋ฉฐ ์ง์์ ์ผ๋ก ์ฝ๋ ํ์ง์ ๊ด๋ฆฌํ๋ ๊ฒ
- 10๋ช
์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ ํ๋ค๋ฉด ๋ชจ๋ CI ํ๋ก์ธ์ค ์งํ
โจ Continuous Deploy/Delivery(CD)
- ์ง์์ ๋ฐฐํฌ ! (๋ฐฐํฌ ์๋ํ)
- ์์ฑ ์ฝ๋๊ฐ ํญ์ ์ ๋ขฐ ๊ฐ๋ฅ ์ํ๊ฐ ๋๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋ ์ ์๋๋ก ํ๋ ๊ณผ์ ์ !! ๋น์ฐํ CI โ CD ์์
- main / staging / dev ๋ธ๋์น์ Merge๊ฐ ๋ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ์๋์ผ๋ก ์๋ฒ์ ๋ฐฐํฌํจ
๐ Github Action
- Github์์ ์ถ์ํ ๊ธฐ๋ฅ์ผ๋ก, ์ํํธ์จ์ด Workflow ์๋ํ ๋๋ ๋๊ตฌ
๐ฉโ๐ป Workflow
1. Test Code
- ํน์ ํจ์์ Return ๊ฐ ์ด๋ป๊ฒ ๋์ค๋์ง ํ์ธ ๋ฐ ํน์ ๋ณ์์ Type ํ์ธ
- Unit Test, End to End Test
2. ๋ฐฐํฌ
- Prod, Staging, Dev ์๋ฒ์ ์ฝ๋ ๋ฐฐํฌ / FTP๋ก ํ์ผ ์ ์ก or Docker Image๋ฅผ Push
- Node.js ๋ฑ ๋ค์ํ ์ธ์ด ๋ฐฐํฌ ์ง์
3. ํ์ด์ฌ, ์ ์คํฌ๋ฆฝํธ ์คํ
- Github Repo์ ์ ์ฅ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ผ์ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์คํ์์ผ ์ค
- crontab ๋์ฉ์ด๋ฉฐ, ๋ฐ์ดํฐ ์์ง์ ์ฃผ๊ธฐ์ ์ผ๋ก ํด์ผํ ๊ฒฝ์ฐ ํ์ฉ ๊ฐ๋ฅ
4. Github Tag, Release ์๋์ผ๋ก ์ค์
- Main ๋ธ๋์น์ Merge ๋ ๊ฒฝ์ฐ ํน์ ์์
์คํ์์ผ์ฃผ๋ฉฐ, ๊ธฐ์กด ๋ฒ์ ์์ ๋ฒ์ Upํ๊ธฐ
- ์๋ก์ด ๋ธ๋์น ์์ฑ ์ ํน์ ์์
์คํ๋ ๊ฐ๋ฅํจ !
๐ค Github Action ์ ์ฝ ์กฐ๊ฑด
- ํ๋์ Github Repository ๋น Workflow๋ ์ต๋ 20๊ฐ๊น์ง ๋ฑ๋กํ ์ ์์
- Workflow์ ์กด์ฌํ๋ Job(์คํ)์ ์ต๋ 6์๊ฐ ์คํํ ์ ์์ผ๋ฉฐ, ์ด๊ณผ์ ์๋์ผ๋ก ์ค์ง๋จ
- ๋์์ ์คํํ ์ ์๋ Job ์ ํ ์กด์ฌ
๐ค Github Action ์ฌ์ฉ ๋ฐฉ์
1) ์ฝ๋ ์์
2) ์ฝ๋ ์์
ํ, Github Action์ผ๋ก ๋ฌด์์ ํ ๊ฒ์ธ์ง ์๊ฐ
3) ์ฌ์ฉํ Workflow ์ ์
4) Workflow ์ ์ ํ ์ ์ ์๋ํ๋์ง ํ์ธ
๐ฉโ๐ป Github Action Core ํต์ฌ !!
ํต์ฌ ๊ฐ๋
: Workflow, Event, Job, Step, Action, Runner
1. Workflow
- ์ฌ๋ฌ Job์ผ๋ก ๊ตฌ์ฑ๋๊ณ Event๋ก Trigger(์คํ)๋๋ ์๋ํ๋ Process
- ์ต์์ ๊ฐ๋
- Workflow ํ์ผ์ YAML์ผ๋ก ์์ฑ๋๊ณ , Github Repository์ .github/workflows ํด๋์ ์ ์ฅ
2. Event
on: [push]
- Workflow๋ฅผ Triggerํ๋ ํน์ ํ๋, ๊ท์น
- ํน์ Branch๋ก Push, Pull Requestํ๋ ๊ฒฝ์ฐ
- ํน์ ์๊ฐ๋์ ๋ฐ๋ณต(Cron)
3. Jobs
- Runner์์ ์คํ๋๋ Steps์ ์กฐํฉ
- ์ฌ๋ฌ Job์ด ์๋ ๊ฒฝ์ฐ ๋ณ๋ ฌ๋ก ์คํํ๋ฉฐ, ์์ฐจ์ ์ผ๋ก ์คํํ ์๋ ์์
- ๋ค๋ฅธ Job์ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์์
4. Steps
- Step์ Job์์ ์คํ๋๋ ๊ฐ๋ณ ์์
- Action์ ์คํํ๊ฑฐ๋ ์ ์ปค๋งจ๋ ์คํ
- ํ๋์ Job์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์
5. Actions
- Workflow์ ์ ์ผ ์์ ๋จ์
- Job์ ์์ฑํ๊ธฐ ์ํด ์ฌ๋ฌ Step์ ๋ฌถ์ ๊ฐ๋
- ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ Component
- ๊ฐ์ธ์ ์ผ๋ก Action์ ๋ง๋ค ์๋ ์๊ณ , Marketplace์ Action์ ์ฌ์ฉํ ์๋ ์์
6. Runner
- Github Action๋ ์ผ์ข
์ ์๋ฒ์์ ์คํ๋๋ ๊ฐ๋
- Workflow๊ฐ ์คํ๋ ์๋ฒ
- Github-hosted Runner : Github Action์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (์ฑ๋ฅ : vCPU2, Memory 7GB, Storage 14GB)
- Self-hosted Runner : ์ง์ ์๋ฒ๋ฅผ ํธ์คํ
ํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
Compute Engine์ Docker ์ด๋ฏธ์ง ๋ฐฐํฌํ๊ธฐ - Github Action
์์
ํ๋ฆ
1) Feature/xxx Branch์์ ์์
2) Main Branch๋ก Pull Request
3) Review ํ Merge
CI/CD
4) Merge๋ ํ์ผ์์ Docker Image Build
docker build . -t "steamrec"
5) Docker Image Push
6) Compute Engine์ Docker Image ์
๋ฐ์ดํธ ์์ฒญ