์ด์ ๊ธ: (1) jenkins ์ค์
https://doteloper.tistory.com/81
[Jenkins - Gitlab] Jenkins๋ก SpringBoot + React ์๋ CI/CD ๊ตฌ์ถํ๊ธฐ (1) jenkins ์ค์
๊น๋ฉ repository์์ ํน์ ๋ธ๋์น์ push์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ฌ ๋น๋์ ๋ฐฐํฌ๋ฅผ ์งํํ๋ CI/CD ์ ์ฉ! 1. Docker๋ก jenkins ์ค์นํ๊ณ ์คํ jenkins ์ด๋ฏธ์ง๋ฅผ pull ๋ฐ๋๋ค. sudo docker pull jenkins/jenkins:lts ๋ค์ด๋ฐ..
doteloper.tistory.com
1ํธ์ ์ด์ด, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก Gitlab๊ณผ ์ฐ๋ํ๊ณ ๋ฐฐํฌ๋ฅผ ์งํํด๋ณด์.
1. ์์ดํ ์์ฑ
Jenkins Dashboard > ์๋ก์ด Item์ ํด๋ฆญํด ์์ดํ ์ ๋ง๋ ๋ค.๊ทธ ํ, Freestyle project๋ฅผ ์ ํํ๊ณ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ฑ๋กํ๋ค.
2. Item ์ค์ : ์์ค์ฝ๋ ๊ด๋ฆฌ
์์ดํ ์ ์์ฑํ๋ฉด ๋ฐ๋ก ์ค์ ํ์ด์ง๋ก ์ด๋ํ๋ค. ๋ง์ฝ, ๋ค์ ๋ค์ด๊ฐ๊ณ ์ถ๋ค๋ฉด ๋ด Item ํด๋ฆญ > ๊ตฌ์ฑ ์ผ๋ก ๋ค์ด๊ฐ๋ฉด ๋๋ค.
โ ์์ค ์ฝ๋ ๊ด๋ฆฌ ํด๋ฆญ!
โ None ์์ Git์ผ๋ก ๋ณ๊ฒฝ
โ Repository URL: ๋ฑ๋กํ gitlab repository url์ ๋ฑ๋กํ๋ค. ์ด URL์ https://~.git ํ์์ clone url ์ด๋ค.โ Credential: ์์ ๋ฑ๋กํ gitlab crediential์ ์ ํํ๊ฑฐ๋ ์๋ก Add ํ๋ค.๋ง์ฝ, ์ ๋๋ก ๋ฑ๋ก์ด ๋์๋ค๋ฉด ์๋์ฒ๋ผ ์ค๋ฅ๊ฐ ์๋จ๊ณ ๊นจ๋ํ ์ฐฝ์ด ๋๋ค!
โ ๋น๋๋ฅผ ์คํํ ๋ธ๋์น๋ฅผ ์ ๋๋ค. ๋์ ๊ฒฝ์ฐ develop ๋ธ๋์น์ ์๋ ์ฝ๋๋ค์ ๋น๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ฑ๋กํ์๋ค.
3. Item ์ค์ : ๋น๋ ์ ๋ฐ
webhook ์๊ทธ๋์ ๋ฐ๊ณ ๋น๋ํ ์ ์๋๋ก ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์
โ Build when a change is pushed to GitLab webhook URL: ... ์ฒดํฌ
โ Enabled GitLab triggers์์ ์์ ์ด ์ํ๋ trigger๋ฅผ ์ฒดํฌ
โ ์ค๋ฅธ์ชฝ ์๋, ๊ณ ๊ธ ๋ฒํผ์ ๋๋ฌ ๊ฐ์ฅ ์๋์ Secret Token์ generate ํ๋ค.
4. Item ์ค์ : ๋น๋ ํ๊ฒฝ
React ํ๋ก์ ํธ๋ฅผ ๋น๋ํด์ผ ํ๋ฏ๋ก ๋น๋ํ๊ฒฝ์ ์ค์ ํ๋ค.
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด Provide Node & npm bin/ folder to Path๋ฅผ ์ฒดํฌ,
์ด์ ์ ํ๋ฌ๊ทธ์ธ์ ํตํด ์ค์นํ ๊ฒ์ NodeJS Installation์ ๋ฑ๋ก
4. Gitlab ์ค์ : Webhook Setting
Gitlab repository > Settings > Webhooks
์ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ ์ ํ ์ ํด์ฃผ์.
URL: http://localhost:8080/project/{item๋ช } ( ์์ ์ฃผ์๋ ์ ํจ์ค ์ฃผ์๋ฅผ ์ ์ผ๋ฉด ๋๋ค ! )
Secret token: ๋ฐฉ๊ธ ์ ํจ์ค์์ generate ํ Secret token ๋ณต๋ถ
5. Build Now!
์์ ์ค์ ํ ๋ด์ฉ์ ์ ์ฅํ๊ณ Build Now ํด๋ฆญ!
์์ง ์์ ํ ๋น๋๊ฐ ๋์ง ์๊ฒ ์ง๋ง, git repository๊ฐ ๋ก๊ฒจ์์ง๋์ง ๋จผ์ ํ์ธํ๋ ์์ ์ด๋ค.
โ ๋น๋ ํํฉ์ ์ด๋ก๋ถ์ด ๋จ๋์ง ํ์ธ !
โ Docker volumn์ ์ค์ ํ ํ์ผ ๊ฒฝ๋ก์ git ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋ก๊ฒจ์ค๋์ง ํ์ธ
6. ๋น๋ ๋ด์ฉ ์ ๋ ฅํ๊ธฐ
Jenkins Item > ๊ตฌ์ฑ > Build
FrontEnd ๋น๋ ( React )
โ Add build step > Excute shell ํด๋ฆญ
ํ๋ก ํธ์๋ ํด๋๊ฐ ์๋ ๊ณณ์ผ๋ก ์ด๋ํ์ฌ, ๊ฐ ํ๋ ์์ํฌ์ ๋ง๊ฒ ๋น๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
์ ํ์ผ ๊ตฌ์กฐ์ React Framework ๊ธฐ์ค,
cd frontend
npm install
npm run build
Backend ๋น๋ ( Spring Boot - Gradle)
โ Add build step > Invoke Gradle ํด๋ฆญ
์ด์ , ํ๋ฌ๊ทธ์ธ ์ค์น ํ ๋ฑ๋กํ๋ Gradle์ ๋ฑ๋กํด์ค๋ค.
โ Add build step > Excute shell ํด๋ฆญ
Build.gradle์ด ์๋ ํด๋๋ก ๊ฐ์,
gradle์ ๊ถํ์ ๋ถ์ฌํ ํ,
๊ธฐ์กด์ ๋น๋๋ฅผ cleanํ๊ณ
๋ค์ buildํ๋ Command๋ฅผ ์์ฑํ์๋ค.
Build ํ์ผ ์คํ
์ค์ํ ๊ฒ์, ๋น๋์์ ๋๋๋ ๊ฒ์ด ์๋๋ผ ์ด ํ์ผ๋ค์ Run ์์ผ์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๋๋ ์ด๋ฅผ ์ํด ์ฐ์ถ๋ ํ์ผ์ deploy ํด๋์ ์ฎ๊ธฐ๊ณ , java ๋ช ๋ น์ด๋ก ์คํ ์ํจ ํ nginx๋ฅผ ์ฌ๋ถํ ์ํค๋ ๋ฐฉ์์ ํํ๋ค.
โ Add build step > Send files or execute commands over SSH ํด๋ฆญ
โ SSH Server๋ ๊ธฐ์กด์ public over SSH ํ๋ฌ๊ทธ์ธ ์ค์ ์ ๋ฑ๋กํด๋์ ssh ์๋ฒ๋ก ์ ํํ๋ค.
โ Transer Set > Source files: ์ด๋ค ํ์ผ๋ค์ ์ฎ๊ธธ๊ฑด์ง ์ง์ ํ๋ค.
โ Transer Set > Remote directory: ์ด๋๋ก ํ์ผ์ ์ฎ๊ธธ๊ฑด์ง ์ง์ ํ๋ค.
โ Transer Set > Exec Command: ๋์ ๊ฒฝ์ฐ, ํ์ผ์ ์ฎ๊ธฐ๊ณ ๋ฐ๋ก Java ์คํ, nginx ์ฌ๋ถํ ํ๋๋ก ํ๋ ์ฝ๋๋ฅผ ์ด๊ณณ์ ์์ฑํ์๋ค. ํ์ผ๋ง ์ฎ๊ธฐ๋ ์์ ์ด ํ์ํ๋ค๋ฉด ๊ตณ์ด ๊ธฐ์ฌํ์ง ์์๋ ๋๋ค!
#!/bin/sh
echo ${PWD}
JAR_PATH="/home/{์ฌ์ฉ์๋ช
}/deploy"
PID_FILE="/home/{์ฌ์ฉ์๋ช
}/deploy/application.pid"
LOG_FILE="/home/{์ฌ์ฉ์๋ช
}/deploy/application.log"
echo ${PWD}
if [ -e ${PID_FILE} ]; then
kill -15 $(cat ${PID_FILE})
else
result_value=$(netstat -nap 2>/dev/null | grep {BE ํฌํธ ๋ฒํธ} | awk '{print $7}')
number_value=${#result_value}
if [ $number_value == 0 ]; then
echo 'ํด๋นํฌํธ๊ฐ ๋ฏธ์ฌ์ฉ์ค์ผ๋ก ์ด๋ฏธ ์ข
๋ฃ๋์์ต๋๋ค..'
else
echo '์ข
๋ฃ๋ฅผ ์์ํฉ๋๋ค.'
pid_val=${result_value%%'/'*}
kill -9 $pid_val
if [ $? == 0 ]; then
echo '์ ์์ข
๋ฃ'
else
echo '์ข
๋ฃ ์คํจ'
fi
fi
fi
if [ -e ${LOG_FILE} ]; then
rm ${LOG_FILE}
fi
nohup java -jar /home/{์ฌ์ฉ์๋ช
}/deploy/godlife-0.0.1-SNAPSHOT.jar --server.address=127.0.0.1 --spring.pid.file=${PID_FILE} >> ${LOG_FILE} 2>&1 &
sudo service nginx restart
์์ Shell Script๋
๊ฒฝ๋ก์ ๊ธฐ์กด์ ๋น๋๋์ด ๋ฐฐํฌ๋๊ณ ์๋ ํ๋ก์ธ์ค ์ข ๋ฃ & ๋ก๊ทธํ์ผ ์ญ์ ํ,
JAR ํ์ผ์ ์คํ์ํค๋ ์ฝ๋์ด๋ค.
( ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์ด๋ ๊ฒ ํด์ผํ๋ ๊ฒ์ ์๋๋ฉฐ ์์ ์ ํ๋ก๊ทธ๋จ์ ๋ง๊ฒ ์ง๋ฉด ๋๋ค! )
FrontEnd ๋ฐฐํฌ์ ๊ฒฝ์ฐ,
Nginx ์ค์ ํ์ผ์์ Root ๊ฒฝ๋ก๋ฅผ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์๊ธฐ๋
/app/swim/workspace/{item}/frontend/build ๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ฉด ๋๋ค.
Shell Script์์ ์ด๋ฅผ ๊ณ์ restart ํด์ฃผ๋ฏ๋ก Nginx ์ค์ ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋ณ๋ค๋ฅธ ์คํ ๊ณผ์ ์ด ํ์ ์๋ค!
์ด๋ ๊ฒ ํ๋ฉด!!!!!
Gitlab develop๋ธ๋์น์ ํธ์ฌ๋จ๊ณผ ๋์์ ๋น๋๊ฐ ๋๊ณ ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ค.
๋ฉ๊ณ ๋ ํ๋ํ Jenkins๊ฐ ๋๋ฌ๋ค. ์จ์จ์ง๊บใ ใฒ์ง๐
'๐ป ๊ฐ๋ฐ ์ผ์ง > Ubuntu' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MAC์์ AWS EC2 ์ ์ํ๊ธฐ (0) | 2023.11.24 |
---|---|
[Jenkins] ์นํ ์ ์ด์ฉํ Jenkins-Mattermost ์ฐ๊ฒฐ (0) | 2022.05.09 |
[Jenkins - Gitlab] Jenkins๋ก SpringBoot + React ์๋ CI/CD ๊ตฌ์ถํ๊ธฐ (1) jenkins ์ค์ (0) | 2022.04.27 |
[Docker] Docker MariaDB ์ปจํ ์ด๋ ( Ubuntu ) (0) | 2022.04.26 |
[Server] Ubuntu18.04 FTP ์ ์ ์ค์ ํ๊ธฐ (0) | 2021.07.24 |