๋ฉ‹์‚ฌ Backend Plus 38์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 12์›” 25์ผ

์˜ค๋Š˜์€ Jenkins (์  ํ‚จ์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ถ€๋”ชํžŒ ์—๋Ÿฌ ์ƒํ™ฉ๋“ค๊ณผ ๋ฐฐ์šด์ ์„ ์ •๋ฆฌ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋จผ์ € ์ฝ๊ณ  ๋”ฐ๋ผ์˜ค์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

1. Jenkins ์ ‘์†

ํผ๋ธ”๋ฆญ IPv4:[์„ค์ •ํ•œ ํฌํŠธ or ๊ธฐ๋ณธ ํฌํŠธ 8080]์œผ๋กœ ์ ‘์†์„ ํ•ฉ๋‹ˆ๋‹ค.
(์„ค์ •ํ•œ ํฌํŠธ = Jenkins ์„ค์น˜ ํ• ๋•Œ ์ž‘์„ฑํ•œ ํฌํŠธ ๋ช…๋ น์–ด)
(ํผ๋ธ”๋ฆญ IPv4๋Š” ํƒ„๋ ฅ์  IP๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค)

์˜ˆ์‹œ : http://3.39.162.190:8080/ ์ฃผ์†Œ๋กœ ์ ‘์† ํ•ฉ๋‹ˆ๋‹ค.

์ ‘์†ํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ Git Bash ์—์„œ Jenkins๋ฅผ ์‹คํ–‰ (docker run ~~ jenkins) ํ–ˆ๋‹ค๋ฉด ๋žœ๋คํ•œ ๋น„๋ฐ€ ๋ฒˆํ˜ธ๋ฅผ ์ฝ˜์†”์—์„œ ์•Œ๋ ค์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด,
cat /var/lib/jenkins/secrets/initialAdminPassword ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์˜ˆ์‹œ 4cd995a3e7264511ac87a4f61341f1fc)

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ›„ Jenkins์˜ ํ”Œ๋กœ๊ทธ์ธ์„ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋กœ๊ทธ์ธ ์„ค์น˜ํ›„ Jenkins์—์„œ ์‚ฌ์šฉํ•  ๊ณ„์ •์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ Jenkins๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋‹ค ๋œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

2. Jenkins ํฌ๋ฆฌ๋ด์…œ ์„ค์ •

Credential (ํฌ๋ฆฌ๋ด์…œ) ์ด๋ž€ ?

Jenkins ๋นŒ๋“œ์‹œ ๋ฏธ๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋… ์ž…๋‹ˆ๋‹ค.

Jenkins์— ๋กœ๊ทธ์ธ ํ•˜์—ฌ ์ ‘์† ํ›„ Jenkins ๊ด€๋ฆฌ ํƒญ์„ ํด๋ฆญ ํ•ฉ๋‹ˆ๋‹ค.

Credential ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋ฆฌ๋ด์…œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(์ €๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  secret-yml ํŒŒ์ผ์„ ์ถ”๊ฐ€ ํ–ˆ์Šต๋‹ˆ๋‹ค.)

application.secret-yml์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด
Kind : Secret File
scope : ๊ธฐ๋ณธ ์„ค์ •
file : application.secret-yml ํŒŒ์ผ์„ ์ฐพ์•„์„œ ์ ์šฉ
Id : ์ด๋ถ€๋ถ„์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค, ์ถ”ํ›„ ํŒŒ์ดํ”„ ๋ผ์ธ์—์„œ ์ž‘์„ฑํ•  ์ด๋ฆ„์„ ๋ถ€์—ฌ ํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
์ด๋ฆ„์—๋Š” - (ํ•˜์ดํ”ˆ) ์ด ๋“ค์–ด๊ฐ€๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ผญ _ (์–ธ๋”๋ฐ”)๋ฅผ ํฌํ•จํ•ด์„œ ์ž‘์„ฑํ•ด์•ผ ๋œ๋‹ค. (๋ฌผ๋ก  ํ•˜์ดํ”ˆ, ์–ธ๋”๋ฐ” ๋‘˜๋‹ค ์ž‘์„ฑ ์•ˆํ•˜๊ณ  ์ด๋ฆ„์„ ์ž‘์„ฑํ•ด๋„ ๋จ)

Jenkins ํŒŒ์ดํ”„ ๋ผ์ธ ์ž‘์„ฑ

์ƒˆ๋กœ์šด Item์„ ํด๋ฆญํ•˜์—ฌ Item์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
(Jenkins๋ฅผ ํ•˜๋ฉด์„œ ๋А๋‚€์ ์œผ๋กœ Item์€ ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋œ ๋‹จ๊ณ„? ์ฑ•ํ„ฐ? ์ธ ๊ฒƒ ๊ฐ™๋‹ค)

์ƒˆ๋กœ์šด Item์˜ ์ด๋ฆ„๊ณผ PipeLine์„ ์„ ํƒํ•˜์—ฌ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑํ•˜์—ฌ ๋งŒ๋“  Item์„ ํด๋ฆญํ•˜์—ฌ, ๊ตฌ์„ฑ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ํŒŒ์ดํ”„ ๋ผ์ธ์„ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํŒŒ์ดํ”„ ๋ผ์ธ ์ด๋ž€ ?

์†Œ์Šค ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ
(Stage, Step) ๋‹จ๊ณ„๊ฐ€ ์กด์žฌ

Pipeline ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Groovy ์–ธ์–ด ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
(์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ž˜ ์ž‘์„ฑํ•˜์—ฌ ์ •๋ฆฌํ•ด์ค€ ๋ธ”๋กœ๊ทธ๊ฐ€ ๋งŽ์•„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.)

application.secret-yml์˜ stage ์ž‘์„ฑ

์•„๊นŒ ํฌ๋ ˆ๋Œ„์…œ์—์„œ ์ž‘์„ฑํ•œ Id ๊ฐ’์ด variable ์˜ต์…˜์œผ๋กœ ๋ฐ”์ธ๋”ฉ ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

stage('secret.yml download') {
        	steps {
            	withCredentials([file(credentialsId: 'jw_secret', variable: 'jw_secret')]) {
                	script {
                    	sh 'cp -f $jw_secret ./src/main/'
                    	
                    }
        		}
        	}
        }

๋งˆ๋ฌด๋ฆฌ

Jenkins๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ Pipeline์˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ๋ฒ•๊ณผ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์ˆ˜ ์žˆ๋Š” ํ•˜๋ฃจ ์˜€๋‹ค.

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