๐ก ์ฌ๋ด ํ๋ก์ ํธ์ ์ ํจ์ค๋ฅผ ์ ์ฉํ์ฌ ๊ธฐ์กด์ ๊ณ ์ ์ ์ธ ๋น๋ & ๋ฐฐํฌ ๋ฐฉ์์์ ๋ฒ์ด๋๋ ๊ณผ์ ์ ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค.
๐ค What is Jenkins?
- ์ ํจ์ค(Jenkins)๋ ์ง์์ ์ธ ํตํฉ(Continuous Integration)๊ณผ ์ง์์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์ง์ํ๋ ์คํ ์์ค ์๋ํ ๋๊ตฌ์ด๋ค.
- ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฐ๋ฐ์๋ค์ด ์์ฑํ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋น๋, ํ ์คํธ, ๋ฐฐํฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ค๋ค.
- ์ ํจ์ค๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์๊ฐ ๋ค์ํ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ ์ฉํ ์ ์๋ค.
- ์ด๋ฅผ ํตํด ์ํํธ์จ์ด ๊ฐ๋ฐ ํ์ ํ์ง ํฅ์, ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์, ์ง์์ ์ธ ํตํฉ ๋ฐ ๋ฐฐํฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ค.
๐ ์ ํจ์ค์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค:
์ง์์ ์ธ ํตํฉ: ๊ฐ๋ฐ์๋ค์ด ์์ฑํ ์ฝ๋๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋น๋ํ๊ณ , ํ ์คํธํ์ฌ ํ์ง์ ์ ์งํ๋ฉฐ, ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
์ง์์ ์ธ ๋ฐฐํฌ: ๋น๋๋ ์ํํธ์จ์ด๋ฅผ ์๋์ผ๋ก ๋ฐฐํฌํ์ฌ ์ ์ํ๊ณ ์์ ์ ์ธ ๋ฐฐํฌ๋ฅผ ์ง์ํ๋ค.
์๋ํ๋ ํ ์คํธ: ๋ค์ํ ํ ์คํธ ๋๊ตฌ์ ํตํฉํ์ฌ ์๋ํ๋ ํ ์คํธ๋ฅผ ์ํํ๊ณ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๋ค.
ํ์ฅ์ฑ: ๋ค์ํ ํ๋ฌ๊ทธ์ธ๊ณผ ํตํฉ์ ์ง์ํ์ฌ ์ ํจ์ค๋ฅผ ๋ค๋ฅธ ๋๊ตฌ์ ์ฐ๋ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- ex ) slack๊ณผ ์ฐ๊ฒฐํ์ฌ ๋น๋ ์ฑ๊ณต ์คํจ ์ฌ๋ถ ์๋ ๋ณด๋ด๊ธฐ ๋ฑ
๋ชจ๋ํฐ๋ง ๋ฐ ์๋ฆผ: ๋น๋ ๋ฐ ๋ฐฐํฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ , ์ด์์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์๋ฆผ์ ์ ๊ณตํ๋ค.
๐ ์ ๋ฆฌ
์ ํจ์ค๋ ๋ง์ ๊ธฐ์ ๊ณผ ํ๋ก์ ํธ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋ฐ์๋ค์ ์์ฐ์ฑ์ ํฅ์ํ๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์ ์๋ํํ์ฌ ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
๐ ํ์ฌ ํ๋ก์ ํธ ๋น๋ ํ์ผ ๋ฐฐํฌ ์งํ ๋ฐฉ์
- ๋ก์ปฌ์์ ์๋ฒ ๋ณ๊ฒฝ์ฌํญ ๋ฐ ์ถ๊ฐ์ฌํญ์ ์ ์ฉํ๋ค.
- ๋ก์ปฌ์์ ๊ฐ์์ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ์งํํ๋ค.
- ๋ก์ปฌ PC์์ ๋น๋ํ jar ํ์ผ์ SFTP ํ๋ก๊ทธ๋จ์ ํตํด ์๊ฒฉ ์๋ฒ๋ก ์ ์กํ๋ค.
- ๋ก์ปฌ PC์์ ์๊ฒฉ ์๋ฒ๋ก SSH ์ ์์ ํ๋ค.
- ์๊ฒฉ ์๋ฒ์์ ์ ์คํฌ๋ฆฝํธ ํ์ผ(ex. start.sh) ๋ฑ์ ์ด์ฉํ์ฌ ํ๋ก์ ํธ ์๋ฒ๋ฅผ ์คํํ๋ค.
- ๊นํ๋ธ๋ก์ PUSH๋ ๋ณ๋๋ก ์งํํ๋ค.
๐จ ๋ฌธ์ ์
- ํ์ฌ ๋ฐฐํฌ์ค์ธ ํ์ผ์ ๋ฒ์ ๊ณผ ๊นํ๋ธ์ ์ ๋ก๋๋ ๋ฒ์ ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ ํ ๋๊ณ ์์ง ์์
- ํ ๋ฒ ๋ฐฐํฌํ ๋๋ง๋ค ๊ฐ๋ฐ์๊ฐ ํด์ผํ๋ ์์ ์ด ๋ง์(์๊ฐ์ ๋ง์ด ๋นผ์๊น)
๐ง๐ป๐ฌ ๊ณํ์ค์ธ Jenkins blue & Green ๋น๋ ํ์ผ ๋ฐฐํฌ ๋ฐฉ์
- ๋ก์ปฌ์์ ์๋ฒ ๋ณ๊ฒฝ์ฌํญ ๋ฐ ์ถ๊ฐ์ฌํญ์ ์ ์ฉํ๋ค.
- ๋ก์ปฌ์์ ๊นํ๋ธ๋ก PUSHํ๋ค.
- ๊นํ๋ธ์์ ์ถฉ๋ ์ฌํญ ๋ฐ ๋๋ฃ ๊ฐ๋ฐ์์ ์ฒดํฌ ํ MERGE ํ๋ค.
- ๊นํ๋ธ์ MERGE ์ ํธ๋ฅผ ์์ ํ ์ ํจ์ค๊ฐ ์ต์ ๋ฒ์ ์ jar ํ์ผ์ ๋น๋ํ๋ค.
- ๋ธ๋ฃจ๊ฐ ์ด์์๋์ง ํ์ธํ๋ค.
์ํฉ 1) ๋ธ๋ฃจ ์คํ ์ค → ๊ทธ๋ฆฐ์ ๋ฐฐํฌ ํ ์คํ → ๋ธ๋ฃจ ์ค๋จ
if) ๋ธ๋ฃจ๊ฐ ์ด์์๋ ๊ฒฝ์ฐ
- ๊ทธ๋ฆฐ์ ๋น๋ํ ์ต์ ๋ฒ์ ์ jar ํ์ผ์ ์ ์กํ๊ณ ์คํ์ํจ๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ค์ ํ ๋ช ์ด์ ์ฃผ๊ธฐ๋ง๋ค ๊ทธ๋ฆฐ ์๋ฒ๊ฐ ์ ๋๋ก ์คํ๋์๋์ง ํ์ธํ๋ค.
- ๊ทธ๋ฆฐ ์๋ฒ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ํ๋ค๋ฉด NGINX์๊ฒ ํ๋ก์ ๋ฐฉํฅ์ ๊ทธ๋ฆฐ์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ๋ช ๋ นํ๋ค.
- ๋ธ๋ฃจ ์๋ฒ์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๋ค.
์ํฉ 2) ๊ทธ๋ฆฐ ์คํ ์ค → ๋ธ๋ฃจ์ ๋ฐฐํฌ ํ ์คํ → ๊ทธ๋ฆฐ ์ค๋จ
if) ๋ธ๋ฃจ๊ฐ ์ฃฝ์ด์๋ ๊ฒฝ์ฐ
- ๋ธ๋ฃจ์ ๋น๋ํ ์ต์ ๋ฒ์ ์ jar ํ์ผ์ ์ ์กํ๊ณ ์คํ์ํจ๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ค์ ํ ๋ช ์ด์ ์ฃผ๊ธฐ๋ง๋ค ๋ธ๋ฃจ ์๋ฒ๊ฐ ์ ๋๋ก ์คํ๋์๋์ง ํ์ธํ๋ค.
- ๋ธ๋ฃจ ์๋ฒ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ํ๋ค๋ฉด NGINX์๊ฒ ํ๋ก์ ๋ฐฉํฅ์ ๋ธ๋ฃจ๋ก ๋ณ๊ฒฝํ๋๋ก ๋ช ๋ นํ๋ค.
- ๊ทธ๋ฆฐ ์๋ฒ์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๋ค.
๐๐ป ๊ธฐ๋ ํจ๊ณผ
- ๊นํ๋ธ์ ํธ์ํ๋ ๊ฒ๋ง์ผ๋ก ๋ชจ๋ ๋ฐฐํฌ ๊ณผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ๊นํ๋ธ์ ์์ฉ ์๋ฒ์ ๋ฐฐํฌ ๋ฒ์ ์ด ํต์ผ๋๋ค.
- ๋ฌด์ค๋จ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ฐธ๊ณ
๋คผํผ
https://hyunminh.github.io/nonstop-deploy/
https://hudi.blog/zero-downtime-deployment-with-jenkins-and-nginx/