Blue Chicken - The Legend Of Zelda
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ต์œก

์˜ฎ๊ธฐ๊ธฐ feat. jenkins ๊ต์œก 1์ผ์ฐจ

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Spring Boot ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€</title>
</head>
<body>
    <h1>๐ŸŽ‰ Spring Boot ์ •์  ํŒŒ์ผ ์„œ๋น™ ์„ฑ๊ณต!</h1>
    <p>์ด ํŽ˜์ด์ง€๋Š” src/main/resources/static/index.html ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.</p>
</body>
</html>

# ์ž๋ฐ” 17 Amazon Corretto ์„ค์น˜
$ sudo yum install -y java-17-amazon-corretto-devel
# ์ž๋ฐ” ์„ค์น˜ ํ™•์ธ
$ java -version
# โ†’ openjdk 17 ๋ฒ„์ „์ด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
# Apache Maven 3.9.12 ๋‹ค์šด๋กœ๋“œ
4. Jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD ํ™˜๊ฒฝ ๊ตฌ์„ฑ - Jenkins ๊ตฌ์„ฑ ๋ฐ ์›น ์•ฑ ๋ฐฐํฌ 1
$ wget https://archive.apache.org/dist/maven/maven-3/3.9.1
2/binaries/apache-maven-3.9.12-bin.tar.gz
# ์••์ถ• ํ•ด์ œ
$ tar -xvzf apache-maven-3.9.12-bin.tar.gz
# Maven ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ /opt ์•„๋ž˜๋กœ ์ด๋™
$ sudo mv apache-maven-3.9.12 /opt/maven
# JAVA_HOME ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
$ echo "export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corret
to.x86_64" >> ~/.bashrc
$ echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
$ source ~/.bashrc # ๋ณ€๊ฒฝ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ์šฉ
# MAVEN_HOME ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
$ echo "export MAVEN_HOME=/opt/maven" >> ~/.bashrc
$ echo "export PATH=\$MAVEN_HOME/bin:\$PATH" >> ~/.bashrc
$ source ~/.bashrc # ๋ณ€๊ฒฝ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ์šฉ
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ
$ echo $JAVA_HOME # โ†’ Java ์„ค์น˜ ๊ฒฝ๋กœ ํ™•์ธ
$ echo $MAVEN_HOME # โ†’ Maven ์„ค์น˜ ๊ฒฝ๋กœ ํ™•์ธ

# Jenkins ์ €์žฅ์†Œ ๋“ฑ๋ก
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.je
nkins.io/redhat-stable/jenkins.repo
# Jenkins ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/je
nkins.io-2023.key
# Jenkins ์„ค์น˜
$ sudo yum install jenkins -y
4. Jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD ํ™˜๊ฒฝ ๊ตฌ์„ฑ - Jenkins ๊ตฌ์„ฑ ๋ฐ ์›น ์•ฑ ๋ฐฐํฌ 2
# systemd ๋ฐ๋ชฌ ์žฌ๋กœ๋“œ (์„œ๋น„์Šค ์ •๋ณด ๊ฐฑ์‹ )
$ sudo systemctl daemon-reload
# Jenkins ์„œ๋น„์Šค ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹คํ–‰ ์„ค์ •
$ sudo systemctl enable jenkins
# Jenkins ์„œ๋น„์Šค ์‹œ์ž‘
$ sudo systemctl start jenkins
# Jenkins ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
$ sudo systemctl status jenkins
# Ctrl + c ๋กœ ์ƒํƒœ ์ข…๋ฃŒ
# Git ์„ค์น˜
$ sudo yum install git -y
# Jenkins ์ดˆ๊ธฐ ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ (์›น UI ์ตœ์ดˆ ๋กœ๊ทธ์ธ ์‹œ ํ•„์š”)
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
485b492b5f3d456c8aa77499e8476d53
# ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณต์‚ฌ
# Jenkins ์ ‘์†: ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„๋ž˜ ์ฃผ์†Œ๋กœ ์ ‘๊ทผ
# Jenkins URL: http://{ํƒ„๋ ฅ์  ์•„์ดํ”ผ}:8080/
# โ†’ ์œ„์—์„œ ๋ณต์‚ฌํ•œ ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ โ†’ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ

sudo dnf install -y https://get.jenkins.io/redhat-stable/jenkins-2.462.3-1.1.noarch.rpm

sed -i 's/java-17-amazon-corretto.x86_64/java-21-amazon-corretto.x86_64/g' ~/.bashrc

source ~/.bashrc

/usr/lib/jvm/java-21-amazon-corretto.x86_64

sudo ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/jenkins_rsa_key

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

cat ~/.ssh/known_hosts | grep github.com

# /tmp ๋””๋ ‰ํ† ๋ฆฌ์— tmpfs ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํฌ๊ธฐ 2GB๋กœ ์„ค์ •ํ•˜์—ฌ ๋งˆ์šดํŠธํ•˜
๋„๋ก fstab ํŒŒ์ผ์— ์ถ”๊ฐ€
# fstab ํŒŒ์ผ์— ์„ค์ •๋œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ /tmp ๋””๋ ‰ํ† ๋ฆฌ์˜ tmpfs ํŒŒ์ผ
์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๋งˆ์šดํŠธ
$ echo 'tmpfs /tmp tmpfs defaults,size=2G 0 0' | sudo tee -
a /etc/fstab && sudo mount -o remount /tmp && df -h /tmp
# ๋ฃจํŠธ ํŒŒ์ผ์— swapfile ์ƒ์„ฑ ํ›„ ๊ถŒํ•œ ๋ถ€์—ฌ
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ
# ์Šค์™‘ ํŒŒ์ผ(swap file)์˜ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝ
$ sudo chmod 600 /swapfile
4. Jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD ํ™˜๊ฒฝ ๊ตฌ์„ฑ - Jenkins ๊ตฌ์„ฑ ๋ฐ ์›น ์•ฑ ๋ฐฐํฌ 12
# swap ์˜์—ญ ์„ค์ •
$ sudo mkswap /swapfile
# swap ์˜์—ญ์— swapfile ์ถ”๊ฐ€ ์‚ฌ์šฉ
$ sudo swapon /swapfile
# ํ™•์ธ
$ sudo swapon -s
# ๋ถ€ํŒ… ์‹œ, ์Šค์™‘ ํŒŒ์ผ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก vim ์—๋””ํ„ฐ๋กœ ์ˆ˜์ •
$ sudo vi /etc/fstab
# vim ์—๋””ํ„ฐ INSERT๋Š” i ์ž…๋ ฅ
# INSERT ๋‚˜์˜ฌ ๋•Œ๋Š” esc ์ž…๋ ฅ
# ์ €์žฅ ํ›„ ์ข…๋ฃŒ๋Š” :wq! ์ž…๋ ฅ
# ๋งˆ์ง€๋ง‰ ์ค„์— ์•„๋ž˜ ์ž…๋ ฅํ•˜๊ณ  ์ €์žฅ ํ›„ ์ข…๋ฃŒ
/swapfile swap swap defaults 0 0
# ์ถ”๊ฐ€ ๊ณต๊ฐ„ ํ™•์ธ
$ sudo free
# ์žฌ์‹œ์ž‘ ํ•„์ˆ˜
$ sudo reboot

$ cd /var/lib/jenkins/workspace/Test-Project/target
$ ls

$ sudo nohup java -jar /var/lib/jenkins/workspace/Test-P
roject/target/demo-0.0.1-SNAPSHOT.jar > /home/ec2-user/a
pp.log 2>&1 &
# ์ด ๋ช…๋ น์–ด๋Š” Jenkins์—์„œ ๋นŒ๋“œ๋œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(JAR ํŒŒ์ผ)์„
์„œ๋ฒ„์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ, ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜์–ด๋„ ๊ณ„์† ์‹คํ–‰
๋˜๋„๋ก(๋ฐ๋ชฌํ™”) ๋กœ๊ทธ๋ฅผ ํŠน์ • ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฐํฌ ๋ช…๋ น์ž…๋‹ˆ
๋‹ค.
# ๋กœ๊ทธ ์‹ค์‹œ๊ฐ„ ํ™•์ธ
tail -f /home/ec2-user/app.log
# ๋กœ๊ทธ ๋งˆ์ง€๋ง‰ 100์ค„๋งŒ ํ™•์ธ
tail -n 100 /home/ec2-user/app.log
# ๋กœ๊ทธ ์ „์ฒด ํ™•์ธ
cat /home/ec2-user/app.log


sudo nohup java -jar /var/lib/jenkins/workspace/Test-Project/target/demo-0.0.1-SNAPSHOT.jar > /home/ec2-user/app.log 2>&1 &

tail -n 100 /home/ec2-user/app.log