โกํํ์์คํ BEYOND SW์บ ํ 4์ฐจ devops ํ๋ก์ ํธโก
๋ฐ์ฑ์ค(ํ์ฅ) |
๊น๋ํ |
์ํ์ง |
์ ํ๊ท |
์กฐํ์ธ |
2VENT(์ง์ญ ํ์ฌ ์ปค๋ฎค๋ํฐ)
-
์ฌ์ฉ์์๊ฒ ์ฃผ๋ณ๊ณผ ํ ์ง์ญ์ ํ์ฌ ์ ๋ณด๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ ๊ณตํ๋ ์๋น์ค
-
์ฌ์ฉ์๊ฐ ์ํ๋ ํ์ฌ๋ง์ ์์ ๊ณจ๋ผ๋ผ ์ ์๋๋ก ๋์์ค๋๋ค!
-
์ง๋๋ฅผ ์ด์ฉํด ์ฐ๋ฆฌ๋๋ผ ํ์ฌ๋ค์ ์์น์ ๋ณด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด~? ํ์ ํ๋ก ๊ณ ๊ณ !
-
์ง์ญ๋ณ! ์จ๋ผ์ธ๊ณผ ์คํ๋ผ์ธ! ์ ๋ฃ์ ๋ฌด๋ฃ! ๋ฑ ๋ค์ํ ์กฐ๊ฑด์ ํํฐ๋งํ ๊ฒฐ๊ณผ๊ฐ ์๊ณ ์ถ๋ค๋ฉด? ํ์ ํ๋ก ๊ณ ๊ณ !
-
์ง์ญ๋ณ ๊ฒ์ํ์ ํตํ ์์ ๋ก์ด ์ํต์ ์ฅ์ ๊ฒฝํํ๊ณ ์ถ๋ค๋ฉด? ํ์ ํ๋ก ๊ณ ๊ณ !
-
๋ค์ํ ํํฐ ๊ธฐ๋ฅ์ ํตํด ๊ด์ฌ์๋ ํ์ฌ๋ง ๋น ๋ฅด๊ฒ ์์๋ด ์๋ค!
-
๊ฐํธํ๊ณ ์ฌ๋ฏธ์๋ ํ์ฌ ํ์, ์ด์ 2VENT์ ํจ๊ปํ์ธ์!
์ต๊ทผ ์ด๋ฒคํธ๋ฐ์ดํฐ์ผํฐ ๋ถ์ ๊ฒฐ๊ณผ, ์ฝ๋ก๋ 19 ์ดํ ์ฐ๊ฐ ์ด๋ฒคํธ ๋ฐ ํ์ฌ๊ฐ 2022๋ ๋ ๋๋น 39%๊ฐ๋ ์ฆ๊ฐํ์์ต๋๋ค. ์ด๊ฒ์ผ๋ก ์ฝ๋ก๋ ์ด์ ์์ค์ผ๋ก ํ๋ณต๋๊ณ ์๋ ๊ฒ์ ํ ๋์ ํ์ธํด๋ณผ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ ๋ง์ ์ฌ๋๋ค์ด ํ์ฌ์ ์ฐธ์ฌํ๊ณ ์๋ ๊ฒ์ ๋ณด๊ณ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฌ์ฉ์๋ค์ ๊ด์ฌ์ฌ์ ๋ง๋ ํ์ฌ๋ฅผ ์ฐพ์์ฃผ๊ธฐ ์ํด ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ฒ ๋์์ต๋๋ค.
โ ์ฌ์ฉ์๋ค์๊ฒ ์ฃผ๋ณ๊ณผ ํ ์ง์ญ์ ํ์ฌ ์ ๋ณด๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ ๊ณตํฉ๋๋ค.
โ ๋ค์ํ ํํฐ ๊ธฐ๋ฅ์ ํตํด ๊ฐ์ธ์ ๊ด์ฌ์ฌ์ ๋ง๋ ํ์ฌ๋ฅผ ์์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค.
โ ์ง์ญ๋ณ ๊ฒ์ํ์ ํตํด ์ฌ์ฉ์๋ค์ด ํน์ ์ง์ญ ํ์ฌ์ ๋ํด ์์ ๋กญ๊ฒ ์๊ฒฌ์ ๋๋๊ณ ,
๊ฒ์๊ธ๊ณผ ๋๊ธ์ ํตํด ํ๋ฐํ๊ฒ ์ํตํ ์ ์๋ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
โ ์ฌ์ฉ์๋ค์ ํ์ฌ ์ฐธ์ฌ์ ์ ๋ณด ๊ตํ์ ํธ๋ฆฌํจ์ ๊ฒฝํํ๊ณ , ์ง์ญ ์ฌํ์ ํ์ฑํ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ์์ค ์ฝ๋ ์
๋ฐ์ดํธ ๋ฐ ๋ณ๊ฒฝ ์ฌํญ git์ push
- github๋ ์ต์ ๋ฒ์ ์ ํ๋ก์ ํธ๊ฐ push ๋๋ฉด Jenkins์ ์ฐ๋๋ Webhook์ ํตํด ๋ณ๊ฒฝ๋ ํ๋ก์ ํธ์ ๋ํ HTTP ์์ฒญ ์ ์ก
1. Git ํ๋ก์ ํธ clone
- Jenkins ์๋ฒ๋ HTTP ์์ฒญ์ด ๊ฐ์ง๋๋ฉด, github์ ์๋ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ๋ค. ( git clone )
2. ๋น๋ ์คํ
- ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ `npm run build`ย ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๋ค.
- ๋ฐฑ์๋ ํ๋ก์ ํธ๋ `./gradlew build`ย ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๋ค.
3. Docker image ์์ฑ
- ์์ฑ๋ ๋น๋ ํ์ผ๋ก Docker image๋ฅผ ์์ฑํ๋ค.
4. Docker Hub์ Docker image push
- ์์ฑ๋ Docker image๋ฅผ Docker Hub์ push ํ๋ค.
5. Kubernetes ๋ฐฐํฌ ์ ์ฉ
- ๋ฐฐํฌ ์ปจํ
์ด๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑ๋ Docker image๋ก ์
๋ฐ์ดํธํ๋ค.
- ๋กค๋ง ์
๋ฐ์ดํธ๊ฐ ์ ์ฉ๋์ด ์ ์ ๋ ์ค๋จ์์ด ์๋น์ค์ ์ ๊ทผ ๊ฐ๋ฅ
networks:
pocket:
external: true
services:
mysql:
image: 'mysql:latest'
container_name: '2vent'
environment:
- 'MYSQL_DATABASE=2vent'
- 'MYSQL_PASSWORD=1234'
- 'MYSQL_ROOT_HOST='
- 'MYSQL_ROOT_PASSWORD=1234'
- 'MYSQL_USER=username'
ports:
- '3306:3306'
restart: 'on-failure'
redis:
image: 'redis:latest'
container_name: '2vent_redis'
ports:
- '6379:6379'
Jenkins Pipeline
1๏ธโฃ git์ pushํ ์ webhook ๋ฐ์
3๏ธโฃ backend/frontend ์ค ๋ณ๊ฒฝ๋ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ, build skipํ๊ณ ๋ณ๊ฒฝ๋ ๊ฒ๋ง build
4๏ธโฃ ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ์ด๋ฏธ์ง ๋ณ๊ฒฝ ํ์ธ
- Backend
- Frontend
5๏ธโฃ ์์ ์๋ฃ ํ discord webhook ๋ฐ์
๋ฌด์ค๋จ ๋ฐฐํฌ(Rolling Update)
1๏ธโฃ Backend
2๏ธโฃ Frontend
์คํ ํ๋ฉด
ย ย ย ย ํย ์ย ย ย ย | ํ๊ณ |
---|---|
๋ฐ์ฑ์ค | Docker, Kubernetes, Jenkins๋ฅผ ํ์ฉํ CI/CD ๊ตฌ์ถ์ ๊ฒฝํํด๋ณผ ์ ์๋ ํ๋ก์ ํธ์์ต๋๋ค. ๋ค๋ง ์ ์ฝ์ฌํญ์ผ๋ก ์ธํด ๋ก์ปฌ์์ ํ ์คํธํ ๊ฒ์ด ์์ฝ์ต๋๋ค. ํ์๋ค ๊ณ ์ํ์ จ์ต๋๋ค~ ย |
๊น๋ํ | ์๊ฐ๋ณด๋ค ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ๋ฐฐํฌ์ ๋ํด ๋ง์ ๋ถ์กฑํจ์ ๋๊ปด ๋์ฑ ๋ ํ์ต์ ๋ํ ํ์์ฑ์ ๋๋ ์ ์์์ต๋๋ค. ์ต์ข ํ๋ก์ ํธ์์๋ ๋ฐฐํฌ ๋ถ๋ถ์ ์์ฑ๋๋ฅผ ๋์ฌ ๋ง๋ฌด๋ฆฌ ํ๊ณ ์ถ์ต๋๋ค. ย |
์ํ์ง | ๊ณ ์ํ์ จ์ต๋๋ค. ํ์ด๋ ํ๋ฌ ๊ฐ์ฌ๋ค~ ย |
์ ํ๊ท | devops์ ๋ํด ๋ฐฐ์ธ ์ ์๋ ์ข์ ๊ธฐํ์๋ ๊ฒ ๊ฐ์ต๋๋ค. 2์ฃผ๋ผ๋ ๊ธฐ๊ฐ ๋์ ๋ค๋ค ๊ณ ์ํ์ จ์ต๋๋ค! ย |
์กฐํ์ธ | 2์ฃผ๋ ์๋๋ ์งง์ ๊ธฐ๊ฐ๋์ ๋ฐฐํฌ๋ฅผ ์ ๋๋ก ์ดํดํ๊ธฐ์๋ ๋ถ์กฑํ๋ ์๊ฐ์ด์๋๊ฒ ๊ฐ์ ์ต์ข ๋ ์ข ํฉ์ ์ผ๋ก ๋ ์ด์ฌํ ํด๋ณด๊ฒ ์ต๋๋ค ๋๋ฌด ๊ณ ์ํ์ จ์ต๋๋ค ย |