์์ ์ค๋ช ํ EC2์ Jenkins์ Docker๋ฅผ ์ค์นํ ํ GitLab๊น์ง ์ฐ๋์์ผ์ ์๋์ผ๋ก ๋ฐฐํฌ ๋ฐ ๋น๋๊ฐ ๊ฐ๋ฅํ๊ฒ๋ ํ๋ ค๊ณ ํ๋ค. ์ด ๋ถ๋ถ๊น์ง ์์ฑ๋๋ฉด ์ ๋ง ๋! ๐
[โฌ๏ธ AWS EC2์ Jenkins ์๋ฒ ๊ตฌ์ถ ๋ธ๋ก๊ทธ ๊ธ ์ฐธ๊ณ ๋งํฌ]
https://velog.io/@hmyanghm/AWS-EC2์-Jenkins-์๋ฒ-๊ตฌ์ถ
[โฌ๏ธ AWS EC2์ Docker ์ค์น ๋ธ๋ก๊ทธ ๊ธ ์ฐธ๊ณ ๋งํฌ]
https://velog.io/@hmyanghm/AWS-EC2์-Docker-์ค์น
$ ssh -i your-pem-file.pem ec2-user@your-ec2-dns-์ฃผ์
$ sudo yum install git
GitLab์ SSH Public Key๋ก ์ธ์ฆ ํ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ GitLab์ ์ฐ๋์ํค๊ธฐ ์ํด์๋ SSH ์ ์์ ์ํ ํค ์์ฑ์ด ํ์ํ๋ค.
$ ssh-keygen -t rsa -C "your-gitlab-email"
๐ฌ ย ํ๋จ ์ด๋ฏธ์ง ์ค๋ช
- 1๋ฒ: Key ํ์ผ ์ ์ฅ ์์น๋ฅผ ๋ฌป๋ ๋ด์ฉ์ผ๋ก ๋ํดํธ๋ก ์ ํด์ค ์์น์ ์ ์ฅํ ๊ฑฐ๋ฉด ๊ทธ๋ฅ ์ํฐโ!
ย ย ย ย ๋ง์ฝ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ํ๋ ์์น ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.- 2๋ฒ: ํด๋น Key ํ์ผ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ด์ฉ์ด๋ค. (์ฐ๋ ์ ํ์ํ๋ ๊ผญ ๊ธฐ์ตํด๋๊ธฐโ๏ธ)
ย ย ย ย ๋ง์ฝ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ ์ํ์ง ์์ผ๋ฉด ๊ทธ๋ฅ ์ํฐโ!- 3๋ฒ: 2๋ฒ์์ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ ํ์ธ
SSH Key ์์ฑ์ด ์๋ฃ๋๋ฉด 'cd ~/.ssh' ์์น์ id_rsa, id_rsa.pub ๋ ๊ฐ์ง ํ์ผ๋ก ์ ์ฅ์ด ๋๋ค.
ํด๋น ํ์ผ๋ค์ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๋ชจ๋ ๊ถํ์ ์ฌ์ฉ์๋ง ๊ฐ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ถํ์ ๋ถ์ฌํด์ค๋ค.
$ chmod 700 ~/.ssh/id_rsa*
SSH Key ์์ฑ์ด ์๋ฃ๋๋ฉด 'cd ~/.ssh' ์์น์ id_rsa, id_rsa.pub ๋ ๊ฐ์ง ํ์ผ๋ก ์ ์ฅ์ด ๋๋ค.
ํด๋น ํ์ผ๋ค์ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๋ชจ๋ ๊ถํ์ ์ฌ์ฉ์๋ง ๊ฐ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ถํ์ ๋ถ์ฌํด์ค๋ค.
$ cat ~/.ssh/id_rsa.pub
๐ ย ssh-rsa ๋ถํฐ ์
๋ ฅํ๋ GitLab ๊ณ์ ์ด๋ฉ์ผ ์ฃผ์๊น์ง ๋ชจ๋ Key ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ถ ๋ค ๋ณต์ฌโ๏ธ
GitLab ๋ก๊ทธ์ธ
GitLab ํ๋ฉด ์ฐ์ธก ์๋จ ํ๋กํ ์ ํ ํ Edit profile๋ก ์ด๋
SSH Keys ๋ฉ๋ด ์ด๋
๋ณต์ฌํ pub key ๊ฐ ๋ถ์ฌ๋ฃ์ ํ Add key ๋ฒํผ ํด๋ฆญ
Jenkins ๋ก๊ทธ์ธ
Jenkins ๊ด๋ฆฌ > ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ
์ค์น ๊ฐ๋ฅ ํญ์์ git plugin ๊ฒ์ ํ ํด๋น ํ๋ฌ๊ทธ์ธ ์ค์น
(๋๋ ์ด๋ฏธ ์ค์น๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ ์ด๋ฏธ์ง๋ ์ค์น๋ ํ๋ฌ๊ทธ์ธ ๋ชฉ๋ก ํญ์ด๋ค.)
์ค์น ์๋ฃ ํ Jenkins ์ฌ์์ (์ค์น ํ์ด์ง ๋งจ ํ๋จ์ '์ค์น๊ฐ ๋๋๊ณ ์คํ์ค์ธ ์์
์ด ์์ผ๋ฉด Jenkins ์ฌ์์' ๋ฌธ๊ตฌ์ ์ฒดํฌํ๋ฉด ์ค์น ์๋ฃ ํ ์๋ ์ฌ์์)
์๋ก์ด Item์ ์ ํ ํ ์ํ๋ Project๋ช
์ ์
๋ ฅ ํ Freestyle project๋ก ์์ฑ
์์ค ์ฝ๋ ๊ด๋ฆฌ์์ Git ์ ํ ๋ฐ ๋น๋ ์ํ๋ Branch ์ค์
GitLab repository ์ค ๋น๋ ์ํ๋ repository๋ฅผ ์ ํํ์ฌ SSH ์ฃผ์ ๋ณต์ฌ
Jenkins ์์ค ์ฝ๋ ๊ด๋ฆฌ ํ๋ฉด์์ Git์ ์ฒดํฌ ํ Repository URL์ ๋ณต์ฌํ SSH ์ฃผ์ ๋ถ์ฌ๋ฃ๊ธฐ
๊ทธ ํ ์๋์ Branch Specifier ๋ถ๋ถ์๋ ๋น๋ ํ GitLab Branch๋ช
์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ธฐ๋ณธ ์ค์ ์ master๋ก ๋์ด์๋๋ฐ ๋๋ develop ๋ธ๋์น๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ผ ์์ ํด์คฌ๋ค.
Credentials(private key) ์์ฑ
์๋๋ก ์คํฌ๋กค ํด๋ณด๋ฉด Enter derectly๊ฐ ๋ณด์ผ ๊ฒ์ด๋ค. ์ด ๋ถ๋ถ ์ฒดํฌ ํ Add ๋ฒํผ์ ํด๋ฆญํ์ฌ SSH Private Key ๊ฐ์ ๋ฃ์ ์ค๋น๋ฅผ ํ๋ค.
AWS EC2 ์๋ฒ์์ ๋ฐ๊ธ ๋ฐ์ SSH Private Key ๊ฐ ์ ๋ ฅ
//SSH Private Key ๊ฐ ๊ฐ์ง๊ณ ์ค๋ ๋ช
๋ น์ด
$ cat ~/.ssh/id_rsa
'----BEGIN RSA PRIVATE KEY----' ๋ถํฐ '----END RSA PRIVATE KEY----' ๊น์ง ์ ๋ถ ๋ณต์ฌ
๋ณต์ฌํ SSH Private Key ๊ฐ ๋ถ์ฌ๋ฃ๊ธฐ
๋๋ ์ฌ๊ธฐ์ GitLab Webhook ์ฐ๋๊น์ง ๋ฃ์ ์์ ์ด๊ธฐ์ ์ด์ด์ ํด๋น ์ค์ ๋ถ๋ถ๊น์ง ์์ฑํ๋ค.
๋ง์ฝ GitLab Webhook ์ฐ๋์ด ํ์ํ์ง ์๋ค๋ฉด ์ฌ๊ธฐ๊น์ง ์ค์ ํ Jenkins ์ค์ ํ๋ฉด์์ Build ํญ ๋ถ๋ถ์ ๊ฐ์ ํ๋ก์ ํธ์ ๋ง๋ ๋น๋ ๋ฐฉ๋ฒ๋ง ์ถ๊ฐํด์ ์ฌ์ฉํ๋ฉด ๋๋ค!๐
'Build when a change is pushed to GitLab. GitLab webhook ~~' ์ด ๋ถ๋ถ์ ์ฒดํฌํด์ฃผ๊ณ GitLab webhook URL: ๋ค์ ์ ํ์๋ URL์ GitLab์์ ์ค์ ์ ์ฌ์ฉํ ์์ ์ด๋ ๊ธฐ์ตํด๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ๋ฒํผ ํด๋ฆญ๐ฑ
์ด์ ๋จ๊ณ์์ ๊ณ ๊ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋์ค๋ ํ๋ฉด์ผ๋ก ์๋ง ์ฒ์์ ์์ ์ด๋ฏธ์ง์ ๋ฌ๋ฆฌ ๊ณต๋์ผ ๊ฒ์ด๋ค.
๊ทธ๋ผ Generate ๋ฒํผ์ ํด๋ฆญํด์ ์์ ์ด๋ฏธ์ง์ฒ๋ผ Secret token์ ์์ฑ์ํจ๋ค.
(์ด๋ฏธ ํ ํฐ์ด ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด Generate ๋ฒํผ ํด๋ฆญ ์ ์๋ก์ด ํ ํฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ฃผ์ํ์โ๏ธ)
์ด ํ ํฐ ์ญ์ GitLab์์ ์ฌ์ฉํ ์์ ์ด๋ ๊ธฐ์ตํด๋๋ค.
Jenkins ๋น๋ ์ ๋ฐ ์ค์ ์ ๊ธฐ์ตํด๋๋ URL๊ณผ Secret token ์ ๋ณด ์
๋ ฅ ํ ์ ์ฅ
๋๋ Jenkins ์์ค ์ฝ๋ ๊ด๋ฆฌ ๋ถ๋ถ์์ develop ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ push events ๋ถ๋ถ๋ develop์ผ๋ก ์ค์ ํ๋ค.
ํ
์คํธ ์งํ์ผ๋ก ์ค์ ํ์ธ
์์ฑํ Project Hooks์์ Push events ํ
์คํธ ์งํ!
์ด๋ ๊ฒ 200 ์ฝ๋๊ฐ ๋ณด์ด๋ฉด ์ฑ๊ณต!๐
Jenkins ์์์๋ ์ด๋ ๊ฒ Build History๊ฐ ์๊ธด๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค.๐คก
์์ฑํด์ฃผ์ ๊ธ ๋๋ถ์ ๋ง์ ๋์์ ๋ฐ์์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค!!