1. ์ ํจ์ค ํ์ดํ๋ผ์ธ ์ค์
Dashboard > New Item > Pipeline

Github project์ webhook ๋ฑ๋กํ repository URL ์ ๋ ฅ

Build Triggers > Github hook trigger for GITscm polling ์ฒดํฌ
ํ์ดํ๋ผ์ธ

ํฌ๊ฒ 3๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
- Git Clone ๋จ๊ณ
- Git ์ ์ฅ์์์ ์์ค ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋จ๊ณ
- branch ๊ฐ์ ธ์ฌ ๋ธ๋์น๋ฅผ ์ง์
- credentialsId ์ฌ์ฉํ Git ์๊ฒฉ ์ฆ๋ช ์ ID๋ฅผ ์ง์ ํ๋ค. ์ฌ์ ์ Jenkins์์ ์ค์ ๋ ๊ฒ
- url ๊ฐ์ ธ์ฌ Git ์ ์ฅ์์ URL์ ์ง์
- Build ๋จ๊ณ
- Gradle์ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋๋ฅผ ๋น๋ํ๋ ๋จ๊ณ
- ./gradlew clean build ๋ช ๋ น์ ์คํํ์ฌ Gradle ๋น๋๋ฅผ ์ํ
- Deploy ๋จ๊ณ
- sshagent ๋ธ๋ก์ ์ฌ์ฉํ์ฌ SSH ์๊ฒฉ ์ฆ๋ช ์ ์ค์ . ์ฌ์ ์ Jenkins์์ ์ค์ ๋ ๊ฒ
- ${DEPLOY_HOST} ๋ณ์๋ ๋ฐฐํฌํ ํธ์คํธ์ ์ฃผ์
- scp ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋น๋๋ JAR ํ์ผ์ ๋ฐฐํฌ ํธ์คํธ๋ก ์ ์ก
- deploy.sh ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ค์ ๋ฐฐํฌ ์์ ์ ์ํ
- environment ๋ธ๋ก
- ํ์ดํ๋ผ์ธ ์คํ ์ค ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์
- DEPLOY_HOST ๋ฐฐํฌํ ํธ์คํธ์ ์ฃผ์
์ด๋ environment์์ DEPLOY_HOST๋ private IP๋ก ์ค์ ํด์ผ ํ๋ค.
2. ํ์ดํ๋ผ์ธ ์คํฌ๋ฆฝํธ ์์ฑ

opensource๋ผ๋ ํด๋๋ฅผ ๋ง๋ ๋ค.
๋ด ํ์ดํ๋ผ์ธ ๊ฒฝ๋ก๋ฅผ ์ ๊ธฐ๋ก ์ง์ ํ๊ธฐ๋๋ฌธ

๋น๋๊น์ง ์ฑ๊ณต์ ์ผ๋ก ๋๋ฉด /jenkins/workspace/opensource ์์ ๋ด์ฉ์ด ์๋์ ๊ฐ๋ค.
ํด๋น ํด๋์์
$ sudo vim deploy.sh
์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
#!/bin/bash
REPOSITORY=/home/ubuntu/opensource
cd $REPOSITORY/
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
PID ํ์ธ"
CURRENT_PID=$(sudo lsof -i tcp:8080 | awk 'NR!=1 {print$2}')
if [ -z "$CURRENT_PID" ]; then
echo "ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค."
else
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
PID: $CURRENT_PID"
echo "> kill -9 $CURRENT_PID"
sudo kill -9 $CURRENT_PID
sleep 5
fi
echo "> ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ"
JAR_NAME="demo-0.0.1-SNAPSHOT.jar"
echo "> JAR Name: $JAR_NAME"
rm -rf $REPOSITORY/deploy.log $REPOSITORY/deploy-err.log
nohup sudo java -jar $JAR_NAME --spring.profiles.active=prod --spring.config.location=$REPOSITORY/application.yml >> $REPOSITORY/deploy.log 2> $REPOSITORY/deploy-err.log &
echo "> ์ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์๋ฃ"
๋ง๋ deploy.sh์ ๊ถํ์ ์ค๋ค.
$ sudo chmod +x /home/ubuntu/opensource/deploy.sh
ํ์ํ application.yml ํ์ผ์ ๋ง๋ ๋ค.
$ sudo vim application.yml
server:
port: 8080
java๋ฅผ ์คํํ๊ธฐ ์ํด
sudo apt install openjdk-17-jre-headless
ํ์ํ java-version์ ์ค์นํ๋ค.

์ด์ ๊น์ Push ํ๊ฒ ๋๋ฉด


ํ์ดํ๋ผ์ธ์ด ์คํ๋๋ค.



์ฑ๊ณต์ ์ผ๋ก ์๋ํ๊ฐ ์งํ๋์๊ณ ,

์ฑ๊ณต์ ์ผ๋ก ์คํ๋ง์ด ์คํ๋จ์ log์ ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณด๊ณ ํ์ธ๊ฐ๋ฅํ๋ค.
sudo lsof -i :8080

์ด์์ผ๋ก Jenkins๋ฅผ ์ฌ์ฉํ CI / CD ๋ฐฐํฌ์ ๋ํด ์์๋ณด์๋ค.
'๐ณ ์ธํ๋ผ > Jenkins' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (3) (0) | 2024.05.13 |
---|---|
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (2) (0) | 2024.05.13 |
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (1) (0) | 2024.05.13 |
Jenkins๋? (0) | 2024.05.13 |
1. ์ ํจ์ค ํ์ดํ๋ผ์ธ ์ค์
Dashboard > New Item > Pipeline

Github project์ webhook ๋ฑ๋กํ repository URL ์ ๋ ฅ

Build Triggers > Github hook trigger for GITscm polling ์ฒดํฌ
ํ์ดํ๋ผ์ธ

ํฌ๊ฒ 3๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
- Git Clone ๋จ๊ณ
- Git ์ ์ฅ์์์ ์์ค ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋จ๊ณ
- branch ๊ฐ์ ธ์ฌ ๋ธ๋์น๋ฅผ ์ง์
- credentialsId ์ฌ์ฉํ Git ์๊ฒฉ ์ฆ๋ช ์ ID๋ฅผ ์ง์ ํ๋ค. ์ฌ์ ์ Jenkins์์ ์ค์ ๋ ๊ฒ
- url ๊ฐ์ ธ์ฌ Git ์ ์ฅ์์ URL์ ์ง์
- Build ๋จ๊ณ
- Gradle์ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋๋ฅผ ๋น๋ํ๋ ๋จ๊ณ
- ./gradlew clean build ๋ช ๋ น์ ์คํํ์ฌ Gradle ๋น๋๋ฅผ ์ํ
- Deploy ๋จ๊ณ
- sshagent ๋ธ๋ก์ ์ฌ์ฉํ์ฌ SSH ์๊ฒฉ ์ฆ๋ช ์ ์ค์ . ์ฌ์ ์ Jenkins์์ ์ค์ ๋ ๊ฒ
- ${DEPLOY_HOST} ๋ณ์๋ ๋ฐฐํฌํ ํธ์คํธ์ ์ฃผ์
- scp ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋น๋๋ JAR ํ์ผ์ ๋ฐฐํฌ ํธ์คํธ๋ก ์ ์ก
- deploy.sh ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ค์ ๋ฐฐํฌ ์์ ์ ์ํ
- environment ๋ธ๋ก
- ํ์ดํ๋ผ์ธ ์คํ ์ค ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์
- DEPLOY_HOST ๋ฐฐํฌํ ํธ์คํธ์ ์ฃผ์
์ด๋ environment์์ DEPLOY_HOST๋ private IP๋ก ์ค์ ํด์ผ ํ๋ค.
2. ํ์ดํ๋ผ์ธ ์คํฌ๋ฆฝํธ ์์ฑ

opensource๋ผ๋ ํด๋๋ฅผ ๋ง๋ ๋ค.
๋ด ํ์ดํ๋ผ์ธ ๊ฒฝ๋ก๋ฅผ ์ ๊ธฐ๋ก ์ง์ ํ๊ธฐ๋๋ฌธ

๋น๋๊น์ง ์ฑ๊ณต์ ์ผ๋ก ๋๋ฉด /jenkins/workspace/opensource ์์ ๋ด์ฉ์ด ์๋์ ๊ฐ๋ค.
ํด๋น ํด๋์์
$ sudo vim deploy.sh
์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
#!/bin/bash
REPOSITORY=/home/ubuntu/opensource
cd $REPOSITORY/
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
PID ํ์ธ"
CURRENT_PID=$(sudo lsof -i tcp:8080 | awk 'NR!=1 {print$2}')
if [ -z "$CURRENT_PID" ]; then
echo "ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค."
else
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
PID: $CURRENT_PID"
echo "> kill -9 $CURRENT_PID"
sudo kill -9 $CURRENT_PID
sleep 5
fi
echo "> ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ"
JAR_NAME="demo-0.0.1-SNAPSHOT.jar"
echo "> JAR Name: $JAR_NAME"
rm -rf $REPOSITORY/deploy.log $REPOSITORY/deploy-err.log
nohup sudo java -jar $JAR_NAME --spring.profiles.active=prod --spring.config.location=$REPOSITORY/application.yml >> $REPOSITORY/deploy.log 2> $REPOSITORY/deploy-err.log &
echo "> ์ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์๋ฃ"
๋ง๋ deploy.sh์ ๊ถํ์ ์ค๋ค.
$ sudo chmod +x /home/ubuntu/opensource/deploy.sh
ํ์ํ application.yml ํ์ผ์ ๋ง๋ ๋ค.
$ sudo vim application.yml
server:
port: 8080
java๋ฅผ ์คํํ๊ธฐ ์ํด
sudo apt install openjdk-17-jre-headless
ํ์ํ java-version์ ์ค์นํ๋ค.

์ด์ ๊น์ Push ํ๊ฒ ๋๋ฉด


ํ์ดํ๋ผ์ธ์ด ์คํ๋๋ค.



์ฑ๊ณต์ ์ผ๋ก ์๋ํ๊ฐ ์งํ๋์๊ณ ,

์ฑ๊ณต์ ์ผ๋ก ์คํ๋ง์ด ์คํ๋จ์ log์ ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณด๊ณ ํ์ธ๊ฐ๋ฅํ๋ค.
sudo lsof -i :8080

์ด์์ผ๋ก Jenkins๋ฅผ ์ฌ์ฉํ CI / CD ๋ฐฐํฌ์ ๋ํด ์์๋ณด์๋ค.
'๐ณ ์ธํ๋ผ > Jenkins' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (3) (0) | 2024.05.13 |
---|---|
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (2) (0) | 2024.05.13 |
Jenkins ์๊ฒฉ ์๋ฒ ๋ฐฐํฌ(Publish Over SSH) (1) (0) | 2024.05.13 |
Jenkins๋? (0) | 2024.05.13 |