๐ŸณDocker? Jenkins? ๊ทธ๊ฒŒ ๋ญ์ง€? ๐Ÿค”

๋‘๋ณ„ยท2023๋…„ 1์›” 28์ผ
1

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
34/46

ํ˜„์žฌ ์ง„ํ–‰ํ•˜๋˜ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ ๋‹จ๊ณ„์—์„œ Docker์™€ Jenkins๋ฅผ ํ™œ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ๋‹ค.
๋„์ปค๋Š” ๋ญ๊ณ  ์  ํ‚จ์Šค๋Š” ๋ญ”์ง€ ์ฒ˜์Œ์—๋Š” ์ƒ์†Œํ–ˆ์ง€๋งŒ, ๋‚˜๋ฆ„๋Œ€๋กœ Local ํ™˜๊ฒฝ์—์„œ ์ด๊ฒƒ ์ €๊ฒƒ ํ…Œ์ŠคํŠธ ํ•˜๋ฉด์„œ ์™œ ๋„์ปค์™€ ์  ํ‚จ์Šค๋ฅผ ์“ฐ๋Š”์ง€ ์ž๋™ ๋ฐฐํฌ์˜ ํŽธ๋ฆฌํ•จ์— ๋Œ€ํ•ด ๊นจ๋‹ฌ์•˜๋˜ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.
๋„์ปค๋Š” ๋„์ปค๋งŒ์˜ ๋ช…๋ น์–ด๋“ค์ด ์žˆ์–ด์„œ ๋ฆฌ๋ˆ…์Šค๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ์ฒ˜๋Ÿผ ์žฅ๋ฒฝ์ด ๋†’์•„๋ณด์˜€๋Š”๋ฐ ํ•˜๋‹ค๋ณด๋ฉด ๋ญ .. ์—ญ์‹œ ์ธ๊ฐ„์€ ์ ์‘์˜ ๋™๋ฌผ์ž„์„ ์•Œ๊ฒŒ ๋œ๋‹ค..

Docker๋ž€?

๋„์ปค ๊ฐœ๋… ์ •๋ฆฌ ์ฐธ๊ณ 

๋„์ปค๋Š” ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด ์„œ๋ฒ„๋งˆ๋‹ค ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ธํŒ…ํ•ด์ค˜์•ผํ•˜๋Š” ์ž‘์—…๋“ค์„ ๋œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ was ์„œ๋ฒ„๊ฐ€ ๋‹ค์ค‘ํ™” ๋˜์–ด์žˆ์„๋•Œ ๊ฐ was ์„œ๋ฒ„๋งˆ๋‹ค (์˜ˆ๋ฅผ ๋“ค์–ด) jdk๋„ ๊น”๊ณ  shell ํŒŒ์ผ๋„ ๋งŒ๋“ค๊ณ  log ํด๋”๋„ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๊ฒƒ ์ €๊ฒƒ ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ์ž‘์—…๋“ค์ด ๋งŽ์€๋ฐ ๋„์ปค๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์€ Dockerfile๋กœ ์ด๋ฏธ์ง€๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด OS๋ฅผ ํ†ต์งธ๋กœ ๋„์›Œ๋ฒ„๋ฆผ์œผ๋กœ์จ ํ•ด๊ฒฐ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋„์›Œ์ง„ OS๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์š”์ฆ˜ ์ฑ„์šฉ๊ณต๊ณ ์—์„œ MSA๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋งŽ์ด ๋ณด์ด๋Š”๋ฐ, MSA๋ž€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ„์˜ ์˜์กด์„ฑ์„ ์—†์• ๊ณ  ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ๋“ค๋กœ ์ชผ๊ฐœ๋†“๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งํ•œ๋‹ค.
Docker๊ฐ€ MSA์˜ ์šฉ๋„๋กœ๋งŒ ์“ฐ์ด๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒ OS๋ฅผ ๋„์›Œ OS๊ฐ„์˜ ๊ฒฉ๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ ์•„๋‹๊นŒ ์‹ถ๋‹ค.

Jenkins๋ž€?

์  ํ‚จ์Šค๋Š” ๊นƒ ์†Œ์Šค๋ฅผ ์ž๋™ ๋นŒ๋“œ, ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋งŒ์€ ์•„๋‹ˆ๋‹ค.
ํฌ๊ด„์ ์œผ๋กœ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” CIํˆด์ด๊ณ ,
์›น ๊ธฐ๋ฐ˜ ์ฝ˜์†”๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž๋™ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊นƒ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ž๋™ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ๊ทธ ์ผ๋ถ€ !

Local์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ

1. Docker App ์„ค์น˜

https://www.docker.com/

! ์œˆ๋„์šฐ10์—์„œ ๋„์ปค ์„ค์น˜์‹œ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์—…๋ฐ์ดํŠธ !

๋„์ปค ๋ฐ์Šคํฌํƒ‘์—์„œ WSL 2 installation is incomplete ์—๋Ÿฌ ๋ฐœ์ƒ

https://blog.nachal.com/1691

์ด๊ฑฐํ•˜๊ณ  ์ปดํ“จํ„ฐ ๊ป๋‹ค ์ผœ์•ผ๋จ

2. Docker - Jenkins ์„ค์น˜

Jenkins ์„ค์น˜ ๋ฐ ์…‹ํŒ… ์ฐธ๊ณ !

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์  ํ‚จ์Šค์˜ ์„ค์ • ํŒŒ์ผ๋“ค์ด ๋ฆฌ์…‹๋˜๊ธฐ ๋•Œ๋ฌธ์—
์•„๋ž˜์™€ ๊ฐ™์ด ๋ณผ๋ฅจ ์„ค์ •์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

$ docker pull jenkins/jenkins:lts
$ docker run -d -p 9090:8080 -v shared:/data/shared -v jenkins_home:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts

! Jenkins Maven ๋นŒ๋“œ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ !

Caused: java.io.IOException: Cannot run program "mvn" 

๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ 
Jenkins ๋‚ด์— ์ธ์Šคํ†จ๋Ÿฌ๋ฅผ ์ด์šฉํ•ด์„œ Maven์„ ์„ค์น˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
https://midas123.tistory.com/230
https://4urdev.tistory.com/91

! Jenkins npm not found !

NodeJS๋„ ์„ค์น˜ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ
https://javaju.tistory.com/126

3. ์  ํ‚จ์Šค ๋นŒ๋“œ โ†’ war copy โ†’ tomcat run

Volume์— ๋ฐ์ดํ„ฐ ๊ณต์œ ์šฉ ํด๋” Shared ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ
Jenkins์˜ War ํŒŒ์ผ์„ Tomcat ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

volume ์˜ ์ €์žฅ๊ณต๊ฐ„ : C:\Users\user\AppData\Local\Docker\wsl\data

๋„์ปค๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ ํ™•์žฅ์ž๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค. (vhdx : ์œˆ๋„์šฐ์—์„œ ๊ฐ€์ƒํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ™•์žฅ์ž )

# jenkins pull
docker pull jenkins/jenkins:lts

# jenkins run
docker run -d -p 9090:8080 -v shared:/data/shared -v jenkins_home:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts

# jenkins shell
echo 'REMOVE shared data / COPY shared data war' 
mkdir -p /data/shared
rm -rf /data/shared/* 
cp /var/jenkins_home/workspace/ํ”„๋กœ์ ํŠธ๋ช…/target/ํ”„๋กœ์ ํŠธ๋ช…-0.0.1-SNAPSHOT.war /data/shared/ํ”„๋กœ์ ํŠธ๋ช….war

# tomcat run
docker run --rm -d -p 8080:8080 -v shared:/usr/local/tomcat/webapps --name ํ”„๋กœ์ ํŠธ๋ช…_tomcat tomcat:9.0

Local ํ…Œ์ŠคํŠธ ์™„๋ฃŒ!




+ ์‹ค์ œ ๊ฐœ๋ฐœ, ์šด์˜์„œ๋ฒ„์—์„œ Docker, Jenkins๋ฅผ ์ด์šฉํ•ด๋ณธ ํ›„๊ธฐ ..

Local์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ํ…Œ์ŠคํŠธ ํ• ๋•Œ๋Š” docker compose, SSH ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ

์‹ค์ œ ์šด์˜์€ ๋˜ ๊ตฌ์กฐ๊ฐ€ ๋งŽ์ด ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ, ์ •์‹ ์—†์ด ์„ค๊ณ„ํ•˜๊ณ  ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ณ  ๋„์šฐ๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ๋Š˜์—ˆ๋˜ ๊ฒƒ์€ .. ์‚ฌ์‹ค ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋„ ์ž˜ ์“ธ ์ค„ ๋ชฐ๋ž๋Š”๋ฐ Docker + Linux ๋ช…๋ น์–ด ๋‹ค๋ฃจ๋Š”๊ฒŒ ์ข€ ์ต์ˆ™ํ•ด์กŒ๋‹ค๋Š” ๊ฒƒ?

๊ทธ๋ฆฌ๊ณ  ๋˜, Dockerfile ๋š๋”ฑ ๋งŒ๋“ค๊ณ  ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐ ํ•œ๋‹ค๊ณ  ์‰ฝ๊ฒŒ ๋๋‚˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์Šˆ๋„ ๋งŽ์ด ๊ฒช์–ด์„œ ๊ณ ์ƒ์„ ํ–ˆ๋‹ค.
์  ํ‚จ์Šค์—์„œ ๋นŒ๋“œ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ์ฃฝ๋Š”๋‹ค๋˜์ง€.. ์ด ๋ฌธ์ œ๋Š” ์  ํ‚จ์Šค JVM ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •์„ ํ•ด์ฃผ์–ด์„œ ํ•ด๊ฒฐ ํ–ˆ์—ˆ๊ณ , ์ด ์™ธ์— ์ž๋™ ๋ฐฐํฌ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ Shell ํŒŒ์ผ๋„ ๋งŽ์ด ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
ํœด ..
๊ทธ๋ž˜๋„ ๊ณผ์ •๋งŒ ์ž˜ ๋ฌธ์„œํ™” ํ•ด๋‘๋ฉด ๋‹ค์ค‘ํ™”๋˜๋”๋ผ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์•ˆ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค 2358938501859189๋ฐฐ ๋‚˜์•˜์Œ!

0๊ฐœ์˜ ๋Œ“๊ธ€