๋ค์ด๊ฐ๋ฉฐ
์ฌ๋ฌ ๋ฐฐํฌ ํ๋ก์ธ์ค ์ค Jenkins๋ก Build ๋ ๊ฒฐ๊ณผ๋ฌผ์ SSH ์ฐ๊ฒฐ์ ํตํด ์ง์ ์๋ฒ์ ์ ๊ทผํ์ฌ ๋ฐฐํฌํ๋ ํ๋ก์ธ์ค์ ๋ํด ์์ฑํด๋ณด์์ต๋๋ค.
๋ณด์์ ์ด์๋ก ์ธํด ๊ถ์ฅํ๋ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ ์๋์ง๋ง, ์ฌ๋ฌ ๋ฐฐํฌ ๋ฐฉ์ ์ค ์ด๋ฐ ๋ฐฉ์๋ ์๋ค ๋ผ๋ ์ ์ ์์์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Process
๋จผ์ Process๋ ์์ ๊ฐ์ต๋๋ค.
- ๊ฐ๋ฐ ์๋ฃ๋ ์ฝ๋๋ฅผ
git์ ํตํด ์ ์ฅ์์pushํฉ๋๋ค. gitlab์push event๋ฅผtriggerํ๋ฉฐ,push๋ช ๋ น์ด ๊ฐ์ง๋๋ฉดjenkins์webhook์ ์ ์กํฉ๋๋ค.jenkins๋gitlab์ผ๋ก ๋ถํฐwebhook์ ์์ ํ๊ฒ๋๋ฉดbuild๋ฅผ ํ๊ฒ๋ฉ๋๋ค. ์ด๋ ์ค์ ํด๋์build process์ ๋ฐ๋ผbuild๊ฐ ์งํ๋ฉ๋๋ค.build๊ฐ ์๋ฃ๋๋ฉดSSHํต์ ์ ํ์ฌAWS EC2๋ก ์์ฑ๋server์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์กํฉ๋๋ค.
Jenkins build Pipeline Setting
build setting
Gitlab Webhook Setting
๋จผ์ webhook์ผ๋ก ์ฐ๋๋ gitlab repository ์ค์ ์ ํฉ๋๋ค.
Credentials๊ฐ Jenkins์ ์ค์ ๋์ด ์์ด์ผ gitlab์์ Webhook ์ ์ก์ ํ ๋์ ์ธ์ฆ์ด ๋๋ ๊ผญ ๋จผ์ ์ค์ ํด์ฃผ์ธ์ !
Gitlab Repository๋ฅผ ์ค์ ํ์๋ค๋ฉด ๊ทธ ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
Jenkins์ build ๋งค๊ฐ๋ณ์๋ ํน์ Parameter๊ฐ ์ ๋ฌ๋์์๋ ์คํ๋๋ ์กฐ๊ฑด์ ์๋ฏธ ํฉ๋๋ค.
gitlab repository์์ develop์ผ๋ก push๋ commit์ webhook์ผ๋ก ๋ฐ์กํ ๋์ Jenkins์์ ๊ฐ์งํ๊ธฐ ์ํด branch : develop ์ผ๋ก ์ค์ ํฉ๋๋ค. ์ฆ, Jenkins์์๋ develop branch์ ๊ดํ webhook๋ง ๊ฐ์งํ๋ค๋ ์๋ฏธ์
๋๋ค.
๋น๋ ์ ๋ฐ ์ด๋ฒคํธ๋ฅผ ์ค์ ํฉ๋๋ค.
ํด๋น ์ค์ ์ Gitlab์์ Webhook์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ ์กํ ๋์ ์ด๋ป๊ฒ ํ์ฉํ ๊ฑด์ง์ ๋ํ ์ค์ ์
๋๋ค.
๋งจ ํ๋จ์ ๋ณด์๋ฉด Secret token ์์ฑ ์นธ์ด ์๋๋ฐ, ํด๋น ๊ฐ์ gitlab webhook ์ค์ ํ๋ฉด์์ secret token ์
๋ ฅ์นธ์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๊ทธ ํ Gitlab Repository์ Webhook ๋ฉ๋ด๋ก ์ด๋ํ์ฌ URL์๋ Jenkins Project URL์ ์
๋ ฅํ๊ณ , Scret Token์๋ ์์์ ์์ฑ๋ Secret Token๊ฐ์ ๋ฃ์ด์ค๋๋ค.
์! ์ด๋ฌ๋ฉด Jenkins์ Gitlab์ Wehook ์ฐ๋์ด ์๋ฃ๋์์ต๋๋ค.
์ด์ Gitlab reposiory์์ ํน์ branch(์ฌ๊ธฐ์ develop)์ git push ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด Jenkins์ Webhook์ ๋ฐ์กํ์ฌ ๋น๋๊ฐ ์์๋ฉ๋๋ค.
jenkins build
์ด ๋ถ๋ถ์ build ์ค์ ๋จ๊ณ์
๋๋ค.
ํด๋น ํ๋ก์ ํธ๋ node.js๊ธฐ๋ฐ์ Vue.js ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ Jenkins ์์ node.js๋ฅผ ์ค์นํ ํ ์คํฌ๋ฆฝํธ๋ก build๋ฅผ ์งํํด์ผํฉ๋๋ค.
Jenkins Market Place์์ Node.js๋ฅผ ์ค์นํด์ฃผ์ ํ ํด๋น Jenkins ํ๋ก์ ํธ์์ Provide ์ค์ ์ ํฉ๋๋ค.
๊ทธ ํ Build ํญ์์ Script๋ฅผ ์์ฑํฉ๋๋ค.
npm install yarn -g
yarn cache clean
yarn install
yarn build:test
๊ทธ ํ chmod ๋ช
๋ น์ด๋ฅผ ํตํด ํด๋น direcoty์ ๊ถํ์ ์์ ํฉ๋๋ค. directory์ ๊ถํ์ ์์ ํด์ฃผ์
์ผ SSH ํต์ ์ ํตํด AWS EC2 ์๋ฒ๋ก build๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ฎ๊ธธ ์ ์์ต๋๋ค.
node.js ๊ธฐ๋ฐ์ Vue.js ํ๋ก์ ํธ๋ฅผ build ํ ํ ๊ฒฐ๊ณผ๋ฌผ์ธ dist ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ๊น์ง ์๋ฃ๋์์ต๋๋ค.
SSH setting
์ด์ ๋ SSH Plugin์ ์ด์ฉํ์ฌ AWS EC2์ ์ ์ํ ํ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ฎ๊ฒจ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ ํด๋น AWS EC2์ ์๋ฒ์ ์ ์์ ํ ํ ssh-keygen ๋ช
๋ น์ด๋ฅผ ํตํด rsa key๋ฅผ ์์ฑํด์ค๋๋ค.
์์ฑ๋ rsa-key๋ ์์ ํ๋ฉด์์ ๋ณด์ฌ์ง๋ ๊ฒ ์ฒ๋ผ ~/.ssh ๊ฒฝ๋ก์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค.
$ vim id_rsa.pubid_rsa.pub ํ์ผ์ ํธ์งํ์ฌ ์์ฑ๋ ssh-key๊ฐ์ ํ์ธํฉ๋๋ค.
๊ทธ ํ Jenkins๋ก ๋์์ SSH Server ์ค์ ์ ํฉ๋๋ค.
Hostname:AWS EC2์IP์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.Username:AWS EC2์User๋ฅผ ์ ๋ ฅํฉ๋๋ค. (์ฌ๊ธฐ์Ubuntu)Remote Directory: ์ ์ํ์์๋์ ์ฒซ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํฉ๋๋ค.use Password Authenticaton, or use a different Key์ฒดํฌ ๋ฐ์ค๋ฅผ ์ ํ ํ ํKey์ ๋ ฅ์นธ์ ์์์ ์์ฑํด๋์ssh-rsa๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
์ด๋ ๊ฒ ํด์ฃผ์๋ฉด Jenkins SSH Publish ์ค์ ์ด ์๋ฃ๋์์ต๋๋ค!! ๐๐
์ด์ Jenkins์์ build๊ฐ ์๋ฃ๋๋ฉด SSH ํต์ ์ผ๋ก AWS EC2 ์๋ฒ์ ์ ์ ํ ํ ์ค์ ํด๋์ ๊ฒฝ๋ก์ build ๊ฒฐ๊ณผ๋ฌผ์ ์ ์กํ๊ฒ๋ฉ๋๋ค !
Deploy
๋ชจ๋ ์ค์ ์ ๋ง์น ํ ํ๋ฒ develop branch์ PUSH๋ฅผ ํด๋ณด์์ต๋๋ค.
์ ์์ ์ผ๋ก build๊ฐ ์๋ฃ๊ฐ ๋ ํ SSH ํต์ ์ ํตํด file์ ์ ์กํ log๋ฅผ ํตํด ํ์ธํด๋ณด์ค ์ ์์ต๋๋ค! ๐๐
๋ง์น๋ฉฐ
์ฌ์ค ๋ณด์์์ ์ด์๋ก ์ธํด Jenkins์์ SSH Publish ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค,,ใ
ใ
ํ์ง๋ง ์ด๋ ๊ฒ ๊ตฌ์ฑํด๋ณด๊ณ ์๋ฃ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ์ด์ ๋ "์ด๋ฌํ ๋ฐฐํฌ ๋ฐฉ์๋ ์์๋ค."๋ผ๋ ๊ฒ์ ๊ฒฝํํด๋ณด๊ณ ์ถ์์ต๋๋ค. ๐บ๐บ