ํด๋น ๊ธ์ Jenkins์ Github Webhook์ ์ด์ฉํ CICD ํ์ดํ๋ผ์ธ ๊ตฌ์ฑํ๊ธฐ ์๋ฆฌ์ฆ ์ ๋๋ค. ์์ธํ ์ฌํญ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
๋ง์ฝ ํด๋น ์ค์ต ๋ด์ฉ์ ์ฝ๋๊ฐ ๊ถ๊ธํ๋ค๋ฉด ํ๋ก์ ํธ ๊นํ๋ธ ์์ ํ์ธํ ์ ์์ต๋๋ค.
- 1ํธ ์๋ฆฌ์ฆ๋ฅผ ์์ํ๋ฉฐ :: ์ปจํ ์ธ ๊ฐ์์ ๋๊ธฐ
- 2ํธ ํ๋ก ํธ์๋ ๊ฐ๋ฐํ๊ธฐ :: ๋ฆฌ์กํธ์ axios
- 3ํธ ๋ฐฑ์๋ ๊ฐ๋ฐํ๊ธฐ :: SpringBoot ์ h2
- 4ํธ ec2 ์์ฑ ๋ฐ Jenkins ์ค์น :: AWS EC2๋ก Jenkins ์๋ฒ ๋ง๋ค๊ธฐ
- 5ํธ Dockerizing ๋ฐ Nginx ์ค์ :: ๋ฐฐํฌ๋ฅผ ์ํ ๋์ปค ๋น๋์ Nginx์ ๋ฆฌ๋ฒ์ค ํ๋ก์
- 6ํธ ์นํ ์ค์ ํ๊ธฐ :: Github Webhook ์ฐ๋ํ๊ธฐ
- 7ํธ pipeline์ผ๋ก ๋ฐฐํฌํ๊ธฐ :: Jenkins Pipeline Script ์์ฑํ๊ธฐ
์ง๋ ์๊ฐ๊น์ง ์ฐ๋ฆฌ๋ ์น ์๋น์ค๋ฅผ ๋ชจ๋ ์์ฑํ์๋ค.
๋ง์ฝ ์น ์๋น์ค ๊ฐ๋ฐํ๊ธฐ ํํธ๋ฅผ ๊ฑด๋ ๋๊ณ ์จ ์ฌ๋์ด๋ผ๋ฉด ์์ ๊นํ๋ธ์์ ์์ค์ฝ๋๋ฅผ ๋ค์ด๋ฐ๊ฑฐ๋ ๋ณธ์ธ์ด ๊ฐ์ง๊ณ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋นํด๋์ผ๋ฉด ๋ ๊ฒ์ด๋ค.
์์
- ec2 ์ธ์คํด์ค ์์ฑ
- ์ค์ต์ ํ์ํ ํ๊ฒฝ ๊ตฌ์ฑ
- jenkins ์ค์น
- ์ ํจ์ค ์ ์ ๋ฐ ์ ํจ์ค ์น ์ค์
์ด๋ฒ ์๊ฐ์๋ ์ง์ EC2๋ฅผ ๋ง๋ค์ด์ Jenkins ๋ฅผ ์ค์นํ๋ฉฐ ํ์ํ ์ฌ๋ฌ ์ค์ ์ ํด์ค ์ฐจ๋ก์ด๋ค
์ด๋ฒ ์๊ฐ์๋ EC2 ์์ฑ์ ์ํ AWS ๊ณ์ ์ด ํ์ํ๋ ํ์ํ๋ค๋ฉด ๊ผญ ๋ง๋ค์ด ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
๋ํ Freetier ๋ฅผ ์ฌ์ฉํ์ง ์์ ์์ ์ด๋ค.
aws ์ freetier ์ธ t2-micro ๋ ๋งค์ฐ ์ ํ์ ์ธ cpu core ๊ณผ ๋ฉ๋ชจ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ t2-medium ์ ๋๋ ๊ตฌ๋งคํ ๊ณํ์ด๋ค.
ํ๋ฃจ ์ ๋๋ t2-medium ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด๋ ํฐ ๊ธ์ก์ด ์ฒญ๊ตฌ๋์ง ์์ผ๋ ์ค์ต์ ์ํด์๋ผ๋ ๊ตฌ๋งคํด๋ณด์ ใ ใ
์ฐธ๊ณ ๋ก T2-medium ์ ์๊ฐ๋น 100์ ์ ๋? ๋ผ๊ณ ํ๋ค! ์ค์ต ๊ตฌ์ฑํ๊ณ ํ ์คํธ ํ๋ฉด ๋ญ ์ฒ์? ์ ๋๋ ๋ง๊ณ ์๋ฌดํผ ์ฒ์ ์ดํ? ์ ๋ ์์ํ๋ค
์๋ฌดํผ ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก EC2 ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ Jenkins ๋ฅผ ์ค์นํด๋ณด๋๋ก ํ์
1. EC2 ์ธ์คํด์ค ์์ฑํ๊ธฐ
์ฐ๋ฆฌ๊ฐ EC2 ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ํด์ผํ ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ธ์คํด์ค ์์ฑ
- ๋ณด์๊ทธ๋ฃน ์ค์
- ssh ํค ์์ฑ
์ธ์คํด์ค ์์ฑ ๋ฐ ๋ณด์๊ทธ๋ฃน ์ค์
์์์ ์ธ์คํด์ค๋ T2-Medium ์ผ๋ก ๊ฒฐ์ ํ๊ณ , ์ด์ aws์ ๋ก๊ทธ์ธํด์ ์ธ์คํด์ค ์์ฑ์ ์งํํด๋ณด์
๋ค์ ๋ฒํผ์ผ๋ก ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ด ๋์ฌ ๋ ๊น์ง ์งํํ๋ค.
์ด์ ๋ณด์ ๊ทธ๋ฃน์ ์ค์ ํ ์ฐจ๋ก์ธ๋ฐ, ๋ณด์ ๊ทธ๋ฃน์ด๋? ์ธ์คํด์ค ๋ด๋ถ๋ก ์ ๊ทผํ ์ ์๋ ํธ๋ํฝ์ ์ด๋ ํ ๋ณด์ ์์น๊ณผ ์์ค๋ก ํ์ฉํ๊ณ ๊ธ์งํ ๊ฒ์ธ์ง๋ฅผ ๋ช ์ํด์ฃผ๋ ๋ถ๋ถ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด 2๊ฐ์ ํฌํธ๋ฅผ ์ด์ด๋์
- 22
- 80
- 9999
80 ํฌํธ๋ ์ฐ๋ฆฌ์ ์น ์๋น์ค๊ฐ ์ ๊ณต๋ ํฌํธ์ด๊ณ 9999 ํฌํธ๋ ๋ค์์ ์ค์ ํ github์ webhook ์ด commit ๋ ์ฝ๋๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ํฌํธ์ด๋ค.
ssh ํค ์์ฑ
์ฐ๋ฆฌ๋ EC2 ์ธ์คํด์ค๋ก ์ ์ํ ํ๋กํ ์ฝ๋ก ssh ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์์ ์ด๋ค.
์ฌ์ค์ aws ์ ํ์ค์ด๊ธฐ๋ ํ๊ณ ๋ฆฌ๋ ์ค ์ ๊ทผํ ๋ ๊ฐ์ฅ ๋ฒ์ฉ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ธ๋ฐ, ssh ์ ์์ ํ๊ธฐ ์ํด์๋ ํน์ ์ธ์ฆ ์๋จ์ด ํ์ํ๋ค.
์ฐ๋ฆฌ๋ ๊ทธ ์ธ์ฆ์ ์ํด์ .pem
ํํ์ ํค๋ก ์ ์ํ ๊ฒ์ด๊ณ , ์ง๊ธ ํ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ์์ฑํ ์ธ์คํด์ค์๊ฒ ์ด๋ค ํค๋ก ์ ๊ทผํ๋๋ก ํ ๊ฒ์ธ์ง ์๋ ค์ฃผ๋ ๋ถ๋ถ์ด๋ค.
ํค ํ์ด์์ ์๋ก์ด ํคํ์ด๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ฉด .pem
ํ์ผ์ ๋ค์ด ๋ฐ์ ์ ์๊ณ , ํด๋น ํ์ผ์ ๋ค์ด๋ฐ์ ์์น๋ฅผ ์ ๊ธฐ์ตํ๋๋ก ํ์.
๋ฐ๋ก ์๋์์ ์ฐ๋ฆฌ๋ ํด๋น ํค ํ์ผ๋ก ssh ์ ์์ ํ ๊ฒ์ด๋ค.
๊ณ์ํด์ ์งํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋ก์ด t2-medium ์ธ์คํด์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์์ฑ๋ ๊ฒ์ ์ ์ ์๋ค.
2. ์ค์ต์ ํ์ํ ํ๊ฒฝ ๊ตฌ์ฑ
์ด์ ์ค์ต์ ํ์ํ ํ๊ฒฝ ๊ตฌ์ฑ์ ํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒ์ด๋ค.
- ssh ํด๋ผ์ด์ธํธ๋ก ์๋ฒ ์๊ฒฉ ์ ์
- ubuntu ์ ๋ฐ์ดํธ & ์ ๊ทธ๋ ์ด๋
- ํ์ ์์กด์ฑ ๋ฐ ํจํค์ง ์ค์น
- docker
- jdk
- nginx
์ด์ ๋ถํฐ๋ ์ฐ๋ฆฌ๊ฐ ๋ฐฉ๊ธ ๋ง๋ ์ธ์คํด์ค ๋ด๋ถ์์ ์์ ์ ํด์ผ ํ๋ค.
ssh ํด๋ผ์ด์ธํธ๋ก ์๋ฒ ์๊ฒฉ ์ ์
ssh ํ๋กํ ์ฝ์ ์ด์ฉํด์ ์ธ์คํด์ค ๋ด๋ถ๋ก ์ ๊ทผํ๊ธฐ ์ํด์๋ SSH ํด๋ผ์ด์ธํธ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
๋ํ์ ์ธ SSH ํด๋ผ์ด์ธํธ๋ก๋ Xshell, Putty, MobaXterm, vscode extension ๋ฑ์ด ์๋ค.
์ด๋ ๋ณธ์ธ ์ค์ต ํ๊ฒฝ์ ๋ฐ๋ผ์ ๋ง์ถฐ์ ์ค์นํ๋ฉด ๋ ๊ฒ ๊ฐ๊ณ , ๊ฐ์ธ์ ์ผ๋ก ์ถ์ฒํ๋ ๊ฒ์ vscode ํ์ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ์ค์นํ๋ ssh ํด๋ผ์ด์ธํธ์ด๋ค.
๋๋ ํ์ฌ ๋งฅ์ ์ด์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํฐ๋ฏธ๋์์ ๋ฐ๋ก ์ ์์ ํ ์์ ์ธ๋ฐ, ๋ง์ฝ ๋ณธ์ธ์ด ssh ํด๋ผ์ด์ธํธ๋ ๊น์ง ๋ชปํ๋ ์ํฉ์ด๋ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ์์ ๋ง๋ EC2 ์ธ์คํด์ค์์ ์น ์ฝ์๋ก ์ฐ๊ฒฐ ํ์ฌ ๋ค์ด๊ฐ ์๋ ์๋ค.
์ฌ๊ธฐ์ ์ฐ๊ฒฐ์ ํด๋ฆญํ๊ณ ์น ์ฝ์๋ก ์ ์์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์น์์๋ ์ฌ์ฉํ ์ ์๋ค.
๋๋ ์์ ์ด์ผ๊ธฐํ๋ฏ ํฐ๋ฏธ๋์์ ๋ฐ๋ก ssh ์ ์์ ์๋ํ ๊ฒ์ด๋ค
๋ณธ์ธ๋ ํฐ๋ฏธ๋์์ ์ ์์ ์ํ๋ค๋ฉด (๋งฅ์ด๋ ๋ฆฌ๋
์ค๋ง ๊ฐ๋ฅ) ํฐ๋ฏธ๋์์ ์๊น ๋ค์ด๋ฐ์ .pem
ํ์ผ์ด ์๋ ๊ณณ์ผ๋ก ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ณ๋ณด์.
$ chmod 400 [ํคํ์ผ๋ช
]
$ ssh -i [ํคํ์ผ๋ช
] ubuntu@[ec2 ์ธ์คํด์ค ํผ๋ธ๋ฆญ ip]
chmod
๋ ์ต์ด 1ํ๋ง ์งํํ๋ฉด ๋๋๋ฐ, ์ต์ด์๋ ssh ํค ํ์ผ์ด public ์ผ๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์ฑ์ค์ธ Host PC์ USER ์๊ฒ๋ง Read(4) ๊ถํ๋ง ์ฃผ๊ณ ๊ทธ๋ฃน๊ณผ ์ ์ฒด์๊ฒ๋ Non(0) ์ ์ฃผ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ๊ถํ ์ค์ ์ด ์๋์ด ์๋ค๋ฉด aws ์์ ์ ๊ทผ์ ๋ง์ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์ ์๋ํ๋ฉด ์ ์ ์ ๋๋๊ฒ์ ์ ์ ์๋ค.
Ubuntu ์ ๋ฐ์ดํธ ๋ฐ ์ ๊ทธ๋ ์ด๋
์ด์ ์ ์์ ํ๋ค๋ฉด ์ฐ๋ฆฌ์ ์๋ฒ๋ฅผ ์ ๋ฐ์ดํธํด์ค์ผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฐจ๋ก๋ก ์ ๋ ฅํ์
$ sudo apt update -y
$ sudo apt upgrade -y
๊ทธ๋ผ ์ ๋ฐ์ดํธ์ ์ ๊ทธ๋ ์ด๋๋ฅผ ์ฐจ๋ก๋ก ์งํํ๊ฒ ๋๊ณ , ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ์ ์ํ๊ฐ ์ต์ ์ด ๋์ด์์ ๊ฒ์ด๋ค.
ํ์ ์์กด์ฑ ๋ฐ ํจํค์ง ์ค์นํ๊ธฐ
์ด์ jdk ๋ฅผ ์ค์นํด์ค์ผ ํ๋ค.
Jenkins ๋ Java๋ก ๋ง๋ค์ด์ง ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ JVM ์ด ์กด์ฌํด์ผ ํ๋ค.
์ด JVM์ ์ฝ๊ฒ ์ค์นํ๊ธฐ ์ํด์ openjdk 8 ์ ์ค์นํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ์น ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ ํ๊ฒฝ์์ ๋์๊ฐ ๊ฒ์ด๊ณ ์ปจํ ์ด๋ ๋ฐํ์์ docker๋ก ๊ตฌ์ฑํ ๊ฒ์ด๋ค.
๋ํ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋๋๋ ๊ตฌ์กฐ์์ ์ฐ๋ฆฌ๋ ์๋น์ค ์ํธ๋ฆฌํฌ์ธํธ๋ฅผ ํ๋๋ก ํฉ์น๊ธฐ ์ํ Reverse Proxy ๋๊ตฌ๋ก nginx ์น์๋ฒ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์์ ํ์ ํจํค์ง๋ค์ ๋ค์ ๋ช ๋ น์ด๋ก ์ฐจ๋ก๋๋ก ์ค์นํ์
$ sudo apt install -y openjdk-11-jdk
$ sudo apt install -y docker.io
$ sudo apt install -y nginx
์ด์ ๋ชจ๋ ์ค๋น๋ ๋๋ฌ๋ค. Jenkins ๋ฅผ ์ค์นํด๋ณด์!
3. Jenkins ์ค์นํ๊ธฐ
- jenkins ์ค์น์ ์ค์
- jdk ์ค์น
- jenkins ์ค์
- default port ๋ณ๊ฒฝ
- jenkins ์ฌ์คํ
Jenkins ์ค์น์ ์ค์
Jenkins๋ฅผ docker ์ปจํ ์ด๋ ์์์ ๋๋ฆด ์๋ ์๋ค.
ํ์ง๋ง Key์ ๊ด๋ฆฌ๋ ์์ฑ์ ๊ดํ ๋ฌธ์ ๋ค ๋๋ฌธ์ ๊ฐ์ธ์ ์ผ๋ก docker ๋ณด๋ค๋ host pc ์ ์ง์ ์ค์นํ๋๊ฒ์ ์ข์ํ๋ค.
๊ทธ๋์ host pc ์ ์ง์ ์ค์น๋ฅผ ํ๊ธฐ ์ํด์ apt์ sources.list ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฐจ๋ก๋ก ์ํํด๋ณด์.
$ wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add
$ echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5
$ sudo apt update -y
$ sudo apt install -y jenkins
๊ทธ๋ฆฌ๊ณ jenkins ๋ฅผ ์ค์นํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก jenkins๊ฐ ์ค์น๋ ๊ฒ์ด๋ค.
5. ์ ํจ์ค ์ ์ ๋ฐ ์ ํจ์ค ์น ์ค์ ํ๊ธฐ
- default port ๋ณ๊ฒฝํ๊ธฐ
์ ํจ์ค๊ฐ ์ค์น๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 8080 ํฌํธ๋ก ์ด๋ฆฌ๊ฒ ๋๋ค.
ํด๋น ํฌํธ๋ฅผ 9999 ํฌํธ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ์ํด์ sudo vi /etc/default/jenkins
๋ฅผ ์น๊ณ
HTTP_PORT=8080 ์ 9999๋ก ๋ณ๊ฒฝํ์
๊ทธ๋ฐ ๋ค, systemctl ๋ช ๋ น์ด๋ฅผ ํตํด์ jenkins ๋ฅผ ๋ค์ ์คํํ์. ๊ทธ๋ผ 9999 ํฌํธ๋ก ๋ค์ ์ด๋ฆฌ๊ฒ ๋ ๊ฒ์ด๋ค.
$ sudo systemctl restart jenkins
๊ทธ๋ฆฌ๊ณ ๋์ ec2-instance ์ public ip์ 9999 ํฌํธ๋ก ์ ์ํ๊ฒ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด jenkins ์น ๋์๋ณด๋๊ฐ ๋ํ๋๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ์ด๊ธฐ ๋น๋ฐ๋ฒํธ๋ /var/lib/jenkins/secrets/initialAdminPassword
์ ์์นํด ์๋๋ฐ, cat ๋ช
๋ น์ด๋ก ํด๋น ํ์ผ์ ํ์ธํ ๋ค, ๋ณต์ฌํด์ ์น ๋์๋ณด๋์ ์ด๊ธฐ ๋น๋ฐ๋ฒํธ ์
๋ ฅ ๋์ ์
๋ ฅํด์ฃผ์!
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์ค์ ํ์ด์ง๊ฐ ๋์ค๊ฒ ๋๋๋ฐ, Jenkins Suggested Plugins ๋ฅผ ์ ํํ๊ณ , ๊ณ์ ์ ์์ฑํด์ค๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ ํจ์ค์ ์น ๋์๋ณด๋๊ฐ ํ์ฑํ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ์ฐ๋ฆฌ๋ Jenkins ๋ฅผ ์ฐ๋ฆฌ์ ์ด์ ์๋ฒ์ ์ค์นํ๊ณ ์น ๋์๋ณด๋๋ฅผ ํ์ฑํ ํ๋๊ฒ ๊น์ง ๋๋๋ค.
๋ค์ ์๊ฐ ๋ถํฐ๋ ๋์ปค๋ผ์ด์ง๊ณผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๊นํ ๋ ํฌ์งํ ๋ฆฌ์ ์น ํ ์ ํ์ฑํ ํ๊ณ commit ํ๋ค๋ฉด Jenkins ์ ์นํ ์ด Integration ํ๋ ๊ฒ์ ํด๋ณผ ์์ ์ด๋ค.
๋๊ธ