Search
๐Ÿ™Š

jenkins

Intro::

๋กœ์ปฌ์—์„œ jenkins๋ฅผ ์‚ฌ์šฉํ•ด์„œ ci/cd ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
jenkins-example
SONGS4RI
1.
jenkins ๋„์ปค ์‹คํ–‰
2.
jenkins plugin ์„ค์น˜
a.
docker ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋”ฐ๋กœ ์„ค์น˜ํ•จ
3.
์›นํ›… ์„ค

pipeline

pipeline { agent any environment { // ๋„์ปค ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ๋กœ์ปฌ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์„ค์ • APP1_IMAGE = "echo:latest" APP2_IMAGE = "time:latest" } stages { stage('Git Config Setting') { steps { sh 'git config --global http.sslVerify false' } } stage('Checkout') { steps { // GitHub ๋ชจ๋…ธ๋ ˆํฌ์—์„œ main ๋ธŒ๋žœ์น˜ ์ฒดํฌ์•„์›ƒ git branch: 'main', url: 'https://github.com/SONGS4RI/jenkins-example.git' } } stage('Build echo') { steps { sh "docker build -f echo/Dockerfile -t ${APP1_IMAGE} ." echo "App1 ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์™„๋ฃŒ: echo:${APP1_IMAGE}" } } stage('Build time') { steps { sh "docker build -f time/Dockerfile -t ${APP2_IMAGE} ." echo "App2 ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์™„๋ฃŒ: time:${APP2_IMAGE}" } } stage('Deploy') { steps { echo '๋ฐฐํฌ ๋‹จ๊ณ„: ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰' sh "docker run -d --name echo -p 8080:8080 ${APP1_IMAGE}" sh "docker run -d --name time -p 8081:8080 ${APP2_IMAGE}" } } } post { always { echo '๋นŒ๋“œ ์™„๋ฃŒ ํ›„ ์ž‘์—… ๊ณต๊ฐ„ ์ •๋ฆฌ' cleanWs() } success { echo 'ํŒŒ์ดํ”„๋ผ์ธ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.' } failure { echo 'ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.' } } }
YAML
๋ณต์‚ฌ

๋ฐฉ๋ฒ• 1: GitHub Webhook ์„ค์ • (๊ฐ€์žฅ ์‹ค์‹œ๊ฐ„ & ์ถ”์ฒœ)

Jenkins๊ฐ€ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›์•„ ๋นŒ๋“œํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹

1. GitHub ์ €์žฅ์†Œ โ†’ Settings โ†’ Webhooks

โ€ข
Payload URL:
http://<Jenkins์„œ๋ฒ„์ฃผ์†Œ>:ํฌํŠธ/github-webhook/
์˜ˆ: http://localhost:18081/github-webhook/ ๋˜๋Š” http://jenkins.mycompany.com/github-webhook/
โ€ข
Content type:
application/json
โ€ข
Trigger:
โ†’ Just the push event ์ฒดํฌ

2. Jenkins์—์„œ ํ”„๋กœ์ ํŠธ ์„ค์ •

โ€ข
"GitHub hook trigger for GITScm polling" ์ฒดํฌ
โ†’ ํ”„๋กœ์ ํŠธ ์„ค์ • > Build Triggers ํ•ญ๋ชฉ์—์„œ

References::

์  ํ‚จ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ ๊ด€๋ฆฌ
์„œ๋ก ย  ย  Jenkins๋Š” ๊ธฐ๋ณธ ์„ค์น˜๋งŒ์œผ๋กœ๋„ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋ณด์•ˆ ๊ด€๋ฆฌ ์—ญ์‹œ CI/CD ํ™˜๊ฒฝ์—์„œ ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์  ํ‚จ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ ์„ค์ •์„ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด์ž.ย ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ž€ย  ย Jenkins ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Jenkins์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  ํŠน์ • ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ์ถ”๊ฐ€ ๋ชจ๋“ˆ์ด๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Jenkins์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๊ณผ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.๊ด€๋ฆฌ Jenkins (Manage Jenkins) ํด๋ฆญํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ (Manage Plugins) ์„ ํƒ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ (Available Plugins) ํƒญ์—์„œ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฒ€์ƒ‰์„ค์น˜ํ•  ..