1. ์๋ก
์๋ ํ์ธ์. ์ด๋ฒ์๋ AWS EC2์์ Jenkins Item์ FreeStyle ๋ฐฐํฌ์ ๋ํด์ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ธฐ ์ํด ๊ธ์ ์์ฑ์ ํ์ต๋๋ค. ๋ฐฐํฌ๋ฅผ ํฌ๊ฒ 2๊ฐ๋ก ๋๋์ด Github๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์๊ณผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ฆฌ๋ฅผ ํ๊ฒ ์ต๋๋ค.
ํน์ Jenkins์ ๋ํด์ ์ฒ์ ํ์ต์ ํ์ ๋ค๋ฉด ๊ธฐ์กด์ ์ ๋ฆฌํ Jenkins์ ๋ํด์ ํ๋ฒ ๋ณด์๋๊ฑธ ์ถ์ฒ์ ํฉ๋๋ค.
2. ๋ณธ๋ก
์ผ๋จ ํ๋์ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ ๋ฐฐํฌ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
์ผ๋จ ์ค์ต์ ํ๊ธฐ ์ํด Dockerfile์ ๋ง๋ค๊ฒ ์ต๋๋ค.
FROM openjdk:11-jdk
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
AWS EC2์ ์ ์ํ๊ธฐ
AWS EC2 ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํด๊ฒฐ์ ์ํด SWAP ํ ๋น
sudo dd if=/dev/zero of=/swapfile bs=128M count=32
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo vi /etc/fstab
--------------------
[ vi์ ํ๋จ์ ์ถ๊ฐ ]
/swapfile swap swap defaults 0 0
----------------------
## ์ฉ๋ ํ์ธ
free
์ด๋ ๊ฒ free๋ฅผ ์ ๋ ฅํ๋ฉด ์ ์์ ์ผ๋ก swap์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ์ด ๋์์ต๋๋ค.
AWS EC2(ubuntu 20.04)์ Docker๋ฅผ ์ค์นํ๊ธฐ
# ์ค๋๋ ๋ฒ์ ์ญ์
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
# repository ์ค์
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Docker์ Official GPG Key ๋ฅผ ๋ฑ๋ก
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# stable repository ๋ฅผ ๋ฑ๋ก
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Docker Engine ์ค์น
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
# ์ค์น ์๋ฃ ํ์ธ, ๋ฒ์ ํ์ธ
docker --version
# /var/run/docker.sock ์ ๊ทผ ๊ถํ ํ์ฉ
sudo chmod 666 /var/run/docker.sock
# docker hub ๋ก๊ทธ์ธ id/pw ์
๋ ฅ
docker login
์ด๋ docker login์ docker hub์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๋์๋ค๋ฉด Login Success๊ฐ ๋์์ ํ๊ฒ ๋ฉ๋๋ค.
์ดํ Jenkins docker๋ก ์ค์น๋ฅผ ํ๊ฒ ์ต๋๋ค.
Docker๋ฅผ ์ด์ฉํด์ Jenkins ์ค์นํ๊ธฐ
docker run \
--name jenkins-docker \
-p 8080:8080 -p 50000:50000 \
-v /home/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-u root \
-d \
jenkins/jenkins:lts
# jenkins ์ปจํ
์ด๋ ์ ์
docker exec -it [jenkins ์ปจํ
์ด๋ID] bin/bash
# jenkins ์ปจํ
์ด๋ log ํ์ธ
docker logs [jenkins ์ปจํ
์ด๋ID]
์ด๋ Jenkins ์ปจํ ์ด๋ ID๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ docker ps -a๋ฅผ ์ ๋ ฅํด์ ์์ด๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
AWS EC2 ์ธ๋ฐ์ด๋ ๊ท์น ์ถ๊ฐ
Jenkins์ ๊ธฐ๋ณธ์ ์ธ ํฌํธ๋ 8080์ ๋๋ค.
๊ทธ๋์ ์ ํฌ๋ 8080ํฌํธ๋ฅผ ํ์ฉ์ ํด์ผ์ง ์ ํจ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐ๋ฅผ ํ๊ฒ ์ต๋๋ค.
1. aws์ ์ ์ํ์ฌ ec2์ ์ ์์ ํฉ๋๋ค.
2. ์ดํ ๋ณด์์ ํด๋ฆญํ์ฌ ๋ณด์ ๊ทธ๋ฃน์ ๋ฐ์ sg-xxxx์ ์ ์์ ํฉ๋๋ค.
3. ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง์ ํ์ฌ ๊ท์น ์ถ๊ฐ๋ฅผ ํตํด 8080 ํฌํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
Jenkins ์ ์ํ๊ธฐ
์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํ๋ฉด { ํ๋ ฅ์ IP } : 8080 ์ฃผ์๋ฅผ ํตํ์ฌ Jenkins์ ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ์ ํด์ผ๋๋๋ฐ ์ด ๊ฒฝ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ์ ํด์ผ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด docker์ ๋ช ๋ น์ด๋ฅผ ํตํด ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
# docker ์ด๋ฏธ์ง๋ก ๋ฐฐํฌ์ ํ์ธ
docker exec jenkins-docker cat /var/jenkins_home/secrets/initialAdminPassword
์ดํ ํจ์ค์๋ ์ ๋ ฅํ๋ฉด Jenkins Plugins Installํ๋ฉด์ด ๋์ต๋๋ค. ์ด๋ Install suggested Plugins๋ฅผ ์ ๋ ฅ์ ํฉ๋๋ค.
๋ง์ฝ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ์ ํ์ผ๋ฉด ๋ค์์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ต๋๋ค.
Public-over-ssh ์ค์นํ๊ธฐ
์ฌ๊ธฐ๊น์ง ์ฑ๊ณต์ ํ๋ค๋ฉด public-over-ssh๋ฅผ ์๋์ผ๋ก ์ค์น๋ฅผ ํด์ผ๋ฉ๋๋ค.
์ดํ Jenkins๊ด๋ฆฌ - Plugin Manager - Advanced settings - Deploy Plugin์ ์ค์นํ ํ์ผ์ ์ถ๊ฐํ์ฌ submit์ ํฉ๋๋ค.
์ดํ ์ ์ถ์ ๋๋ฅด๊ฒ ๋๋ฉด public-over-ssh๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋น๋ก ๋์ต๋๋ค. ์ด๋ ์๋ฃ๊ฐ ๋๋ฉด
๋ค์ Jenkins ๊ด๋ฆฌ๋ฅผ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค.
(์ค์) - ๊ณต๊ฐํค & ๊ฐ์ธํค ์์ฑํ์ฌ ์ฐ๊ฒฐํ๊ธฐ
๊ธฐ์กด์ Dashboard > Jenkins ๊ด๋ฆฌ > Configure System์ ๋ค์ด๊ฐ๋ฉด publish over SSH๊ฐ ์์ต๋๋ค.
์ ๋ ๊ธฐ์กด์ ์ธํ ์ ํ์๊ธฐ ๋๋ฌธ์ ๋์์ ๊ดํด์๋ง ์ค๋ช ์ ํ๊ฒ ์ต๋๋ค.
์ผ๋จ ์ด ๋ถ๋ถ์ด ์ ์ผ ์ค์ํฉ๋๋ค. ์ ํจ์ค์ ๊ฐ์ธํค์ ๊ณต๊ฐํค๋ฅผ ์์ฑ์ ํด์ผ๋๋๋ฐ
์ผ๋จ ์ค๋ช ์ ํ๊ธฐ ์ด์ ์ ์ ๊น ์ค๋ช ์ ํ๊ฒ ์ต๋๋ค.
์ ํฌ๋ EC2๋ฅผ 2๊ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๋๋ Jenkins ์ธ์คํด์ค์ Work ์ธ์คํด์ค 2๊ฐ๊ฐ ์์ต๋๋ค. ์ ํฌ๋ ssh๋ฅผ ํตํด ์ค์ ์ ํด์ผ์ง ๊ฐ๋ฅํฉ๋๋ค.
SSH(Secure Shell)
ssh๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ ๋๋ค. ์ํธํ(RSA)๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๋ฉฐ, ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๊ธฐ๋ฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. SSH๋ฅผ ์ฌ์ฉํ๋ฉด ์ธํฐ๋ท์ ํตํด ์ ์ก๋๋ ๋์ ์ค๊ฐ์์ ํ์ทจ๋๊ฑฐ๋ ๋ณ๊ฒฝ ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ ํฌ๋ EC2 ์ธ์คํด์ค์ ์ ์ํ๋ฉด ์ํธํ๋ ํฐ๋์ ํตํด ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ค์ ์ ํด์ผ๋ฉ๋๋ค. ์ ํฌ๋ SSH์ฐ๊ฒฐ์ ํ์ฌ Jenkins ์ธ์คํด์ค์์ docker hub๋ฅผ ํตํด ๋ง๋ ์ด๋ฏธ์ง๋ฅผ Work ์ธ์คํด์ค์ ๋ฐฐํฌํ๋ ํํ๋ก ๋ฐฐํฌ๋ฅผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด ๊ฐ์ธํค์ ๊ณต๊ฐํค๋ฅผ ์์ฑํ๋ค. ์ด๋ฅผ work ์ธ์คํด์ค์ ssh-server์ ๋ฑ๋ก์ ํด์ผ๋๋ค.
ssh-keygen -t rsa -b 4096 -m PEM
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์๋ค๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ์ด ๋์์ต๋๋ค.
์ดํ ๊ฐ์ธํค๋ฅผ ํ์ธ์ ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅ์ ํฉ๋๋ค.
cd /root/.ssh
cat id_rsa.pub
Jenkins ๊ณต๊ฐํค Work ์ธ์คํด์ค์ ๋ฑ๋กํ๊ธฐ
์ผ๋จ ๊ธฐ์กด์ ๋ง๋ค์๋ Work ์ธ์คํด์ค์ ์ ์์ ํ์ฌ ๊ธฐ์กด์ ์์ ์ ํ๋ ๊ฒ์ ํฉ๋๋ค.
์ผ๋จ docker์ ๋ํ ์ค์น์ ๋ก๊ทธ์ธ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๊ณต๊ฐํค๋ฅผ ๋ฑ๋ก์ ํ๊ฒ ์ต๋๋ค.
# worker-instacne์์ ~/.ssh ๊ถํ์ค์
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# jenkins-instance์ ๊ณต๊ฐํค๋ฅผ worker-instance ์ธ์ฆํค์ ๋ฑ๋ก
vi ~/.ssh/authorized_keys
์ ํฌ๊ฐ Jenkins ์ธ์คํด์ค์ ์ฐพ์ ๊ฐ์ vi๋ฅผ ํตํด work ์ธ์คํด์ค์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ๋๋ค. ์ ํจ์ค์ ์ฐพ์ ๋ด์ฉ์ ์๋์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ๋๋ค.
๋ง์ฝ์ VI์ ๋ํด์ ์ฒ์ ํ์ต์ ํ์๋ฉด ์ด์ ์ ์์ฑํ ๊ธ์ ์ฐธ๊ณ ๋ฅผ ํด์ฃผ์ธ์.
์ผ๋จ ์ฌ๊ธฐ์๋ I๋ฅผ ์ ๋ ฅํ๋ฉด Insert ๋ชจ๋๊ฐ ๋๊ณ ๊ฐ์ ์ ๋ ฅํ๊ณ ESC์ ํ๊ณ :WQ์ ์ ๋ ฅํ๋ฉด ์ ๋ ฅ๋ ๋ด์ฉ์ ์ ์ฅ์ ํฉ๋๋ค.
Jenkins ๊ฐ์ธํค๋ฅผ Jenkins ์ฌ์ดํธ publish-over-ssh์ ๋ฑ๋กํ๊ธฐ
cat ~/.ssh/id_rsa
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด ๋์จ๋ค. ์ผ๋จ ์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ ์์
start, end ๋ถ๋ถ๋ ํ์์ ์ผ๋ก ์ ๋ ฅ์ ํด์ผ๋๋ค. ์ด ๋ถ๋ถ์ ์ถ๊ฐํ์ง ์์์ 5์๊ฐ์ ๋ญ๋นํ๋ค.
์ดํ ๊ณต๊ฐํค๋ฅผ Jenkins ์ฌ์ดํธ์ ์ถ๊ฐ๋ฅผ ํ๋ค.
์ด๋ SSH Servers์ ๋ฑ๋กํ ๊ฐ 4๊ฐ์ ์ ๋ณด๊ฐ ์๋ค.
Name | ๋ณธ์ธ์ด ์ฌ์ฉํ ์์์ SSH ์๋ฒ์ ์ด๋ฆ์ ์ ๋ ฅํ๋ค. |
Hostname | ์ค์ ๋ก ์ ์ํ ์๊ฒฉ ์๋ฒ๋ฅผ ์ ๋ ฅํ๋ค. |
Username | ์ ์ํ ์๊ฒฉ ์๋ฒ์ ์ด๋ฆ - whoami๋ฅผ ํตํด ํ์ธ ๊ฐ๋ฅ |
Remote Directory | ์๊ฒฉ์๋ฒ์์ ์ ์ํ์ฌ ์์ ์ ํ๊ฒ ๋๋ ๋๋ ํ ๋ฆฌ pwd ํ์ธ |
DockerHub ์ด๋ฏธ์ง ๋ฑ๋กํ๊ธฐ
๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง๋ฅผ ๋ฑ๋ก์ ํ๋ค.
์ด์ ์ ๋ง๋ค์๋ docker image๋ฅผ push ํ๊ณ ๋ฑ๋ก์ด ์ฑ๊ณต์ ์ผ๋ก ๋์๋์ง ํ์ธํ๋ค.
docker push mooh2jj/cpu-bound-application-1
Jenkins Item FreeStyle Project
ํ๋ฆฌ์คํ์ผ ํ๋ก์ ํธ๋ฅผ ํตํ์ฌ ์์ฑ์ ํ๋ค.
์ดํ ๋น๋ ํ ์กฐ์น > Send build artifacts over SSH๋ฅผ ์ ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค.
์ฌ๊ธฐ์ Exec command๋ฅผ ์ถ๊ฐ๋ก ์ ๋ ฅ์ ํ๋ค.
nohup docker run -p 8081:8080 kimmugeon/cpu-bound-applicatoin-1:tag > /dev/null 2>&1 &
์ด๋ tag๊ฐ ์ค์ํฉ๋๋ค. ์ด ๋ถ๋ถ์์ ๋ง์ ์ค์๋ฅผ ํ์ต๋๋ค.
์ด๋ 8081์ Work ์ธ์คํด์ค์ ํฌํธ์ด๋ค. ์ด ๊ฒฝ์ฐ์๋ ์์์ ํ๋ ์ธ๋ฐ์ด๋ ๊ท์น ์ค์ ์ ํด์ผ๋๋ค.
์ดํ ๋น๋๋ฅผ ํ๊ณ Console Output์ ํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ค. ์ดํ Work ์ธ์คํด์ค์ ํ๋ ฅ์ IP๋ฅผ ์ด์ฉํ์ฌ ํ์ธ์ ํ๋ฉด ์ ์์ ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ค.
์ดํ ์ฑ๊ณต์ ์ธ ๋ก์ง์ด ๋์ํ๋ค.
์ดํ ์ถ๊ฐ์ ์ธ log ํ์ธํ๊ธฐ
# ๊ผฌ๋ฆฌ๋ถํฐ ๋ณด๋ ๋ช
๋ น์ด
# docker contrainer์์ ํ์ธ์, docker exec ๋ช
๋ น์ด๋ก ๋ค์ด๊ฐ์ผ ํ๋ค.
cd ~
tail -f nohup.out
์ถ๊ฐ
'๐ AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ AWS ] Docker + AWS EC2 Aphache/ MySQL ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (0) | 2023.04.21 |
---|---|
[ Jenkins ] Jenkins FreeStyle Github ๋ฐฐํฌํ๊ธฐ (0) | 2023.04.21 |
[ Jenkins ] Jenkins CI/CD ๋ฌด์์ธ๊ฐ? (0) | 2023.04.15 |
[ AWS ] AWS๋ ์นํด์ง๊ธฐ - 3 (Docker๋ฅผ ์ด์ฉํด์ ๋ฐฐํฌํ๊ธฐ) (0) | 2023.04.07 |
[ AWS ] AWS๋ ์นํด์ง๊ธฐ -2 (์๊ฐ ์ค์ ) (0) | 2023.04.07 |