์ด ์๋ฆฌ์ฆ์์๋ MSA ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ค, Docker์ Jenkins๋ฅผ ์ด์ฉํ์ฌ CI/CD๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
์ด์ ํฌ์คํ ์์๋ Docker๋ฅผ ์ค์น์ ์๋ ๋ฐฐํฌ ๊ณผ์ ๊ณผ ์๋ ๋ฐฐํฌ์ ํ์์ฑ์ ๋ํด ์ค๋ช ํ์๋ค.
https://programmingiraffe.tistory.com/123
์ด๋ฒ ํฌ์คํ ์์๋ ์ง์์ ํตํฉ๊ณผ ์๋ ๋ฐฐํฌ๋ฅผ ์ํด ํ์ํ Jenkins ์ค์น ๊ณผ์ ์ ๋ํด ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
๐ป ํ๊ฒฝ
- OS : Window
- Server : AWS EC2
- Backend : Spring boot, Spring Cloud(Gateway, Eureka), Gradle, Java11
- Deploy : Docker, Dockerhub, Jenkins
- Git : Gitlab
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ๋
CI/CD ๊ณผ์
- ์์ค์ฝ๋๊ฐ ํด๋น ๋ธ๋์น์ push ๋๋ค. (ํธ์ฌ ์ด๋ฒคํธ ๋ฐ์)
- ํ๋ก์ ํธ ๋ด์ Jenkinsfile์ ์ฝ์ด ์คํํ๋ค.
- Git์ ์๋ ํ๋ก์ ํธ๋ฅผ Cloneํด, ๋น๋๋ฅผ ํ๋ค.
- jar ํ์ผ์ด ์์ฑ๋๊ณ , ๋์ปค ์ด๋ฏธ์ง๋ก ๋น๋ํ๋ค.
- ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋์ปค ํ๋ธ์ ์ ๋ก๋ ํ๋ค.
- ์ง๊ธ ๋์ปค์์ run ๋๊ณ ์๋ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ค์งํ๊ณ , ์ญ์ ์ํจ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋์ปค ํ๋ธ์ ์๋ ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ run ํ๋ค.
- Spring ์๋ฒ๊ฐ ๋์ปค ์ปจํ ์ด๋๋ก AWS์ ๋ฐฐํฌ๋๋ค.
Jenkins๋ฅผ ์ด์ฉํ๋ฉด, ์์ ๊ฐ์ ๊ณผ์ ์ ์๋์ผ๋ก ์คํํ ์ ์๋ค.
๐คต Jenkins ์ค์น
Docker in docker ๋ฐฉ์์ผ๋ก Jenkins๋ฅผ ์ค์นํ๋ค.
- ์ ํจ์ค ์ค์น์ ์๋ ์ต์ ์ ์ถ๊ฐํด ๋์ปค์ ์์ผ ํ์ผ ๋ง์ดํธ
sudo mkdir /home/opendocs/jenkins
sudo docker run \\
--name jenkins \\
-d \\
-p 8080:8080 \\
-p 50000:50000 \\
-v /home/opendocs/jenkins:/var/jenkins_home \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-u root \\
jenkins/jenkins:lts
- Jenkins ์ปจํ ์ด๋ ์ ์
docker exec -it jenkins /bin/bash
- Jenkins ์ Docker ์ค์น
์ด๊ฑธ ์ํ๋ฉด Jenkins ์์ Docker๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋์ค์ docker ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๋ค๋ฉฐ ์๋ฌ๊ฐ ๋ฌ๋ค.
# Docker ์ค์น
## - Old Version Remove
apt-get remove docker docker-engine docker.io containerd runc
## - Setup Repo
apt-get update
apt-get install \\
ca-certificates \\
curl \\
gnupg \\
lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/debian/gpg> | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/debian> \\
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
## - Install Docker Engine
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
๐คต Jenkins ์ ์
- ๋๋ฉ์ธ์ฃผ์:8080 ์ผ๋ก ์ ์ํ๋ค.
Jenkins ์ค์น ์, ํฌํธ ๋ฒํธ๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํด์คฌ์ผ๋ฉด ๊ทธ ํฌํธ ๋ฒํธ๋ฅผ ๋ถ์ฌ์ค๋ค.
์ํธ๋ฅผ ์ ๋ ฅํด์ค์ผ ํ๋๋ฐ, ๋นจ๊ฐ์ ๊ธ์จ๋ก ๋์จ ๊ฒฝ๋ก๋ก ์ ์ํด์ ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด์ผ ํ๋ค.
- ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ ์์๋ด๊ธฐ
cat /var/jenkins_home/secrets/initialAdminPassword
- ํ๋ฌ๊ทธ์ธ ์ค์น
Install suggested plugins์ ์ ํํ๋ค.
- Jenkins URL ์ค์
Save and Finish๋ฅผ ๋๋ฅด๊ณ ๋ง์น๋ฉด ๋๋ค.
๋ค์ ํฌ์คํ ์์ GitLab Webhook๊ณผ Jenkinsfile์ ํ์ฉํ์ฌ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.