๊ด€๋ฆฌ ๋ฉ”๋‰ด

<Hello Hosung๐Ÿ˜Ž/>

[์  ํ‚จ์Šค] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ž๋™๋ฐฐํฌ ๋ณธ๋ฌธ

๐ŸฑCI, CD

[์  ํ‚จ์Šค] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ž๋™๋ฐฐํฌ

์ขŒ์ถฉ์šฐ๋Œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ผ๊ธฐ๐Ÿง 2024. 9. 13. 13:49

 
Docker ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ณ , ์ด๋Ÿฐ๋ถ€๋ถ„์„ ๊ณ„์†ํ•ด์„œ ํ•˜๋Š”๊ฒƒ์€ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด์—์š”๐Ÿฅฒ
 
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์ข€๋” ํŽธํ•˜๊ฒŒ ํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ ์ƒ๊ฐํ–ˆ์–ด์š”
์•„๋ž˜์™€ ๊ฐ™์ด ์ค‘๊ฐ„์— Jenkins๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉด ์–ด๋–จ๊ฐ€ ํ•˜๊ณ ์š”!
 
 

๊ทธ๋ฆผ์„ ์ข€ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

1. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ์†Œ์Šค๋ฅผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— GitHub์— ์ปค๋ฐ‹ & push ํ•œ๋‹ค.
2. Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ๋™์ค‘์ธ Jenkins ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•˜์—ฌ GitHub์— ์žˆ๋Š” ์†Œ์Šค๋ฅผ ์ฒดํฌ์•„์›ƒ ํ•œ๋‹ค
3. Jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

 

 
 
 

1. ๋„์ปค๋กœ Jenkins Server ๋งŒ๋“ค๊ธฐ

 

ใ†DockerHub๋ฅผ ํ†ตํ•ด ์  ํ‚จ์Šค ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์ค„๊ฒŒ์š”.

docker pull jenkins/jenkins




ใ† Docker์™€ Jenkins๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์†Œ์ผ“์„ ๊ณต์œ  ํ•ด์ค˜์•ผ
    Jenkins๊ฐ€ Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”

docker run -d --name {์ปจํ…Œ์ด๋„ˆ๋ช…} -p {ํฌํŠธ}:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock {์ด๋ฏธ์ง€๋ช…}:{ํƒœ๊ทธ}

 
 
ใ†๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด Jenkins ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋™๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.

CONTAINER ID   IMAGE             COMMAND                  CREATED       STATUS        PORTS                               NAMES
a77d9e2a02ab   jenkins/jenkins   "/usr/bin/tini -- /uโ€ฆ"   4 days ago    Up 20 hours   50000/tcp, 0.0.0.0:7070->8080/tcp   JENKINS_SVR
5a323f056ae7   mysql             "docker-entrypoint.sโ€ฆ"   12 days ago   Up 12 days    3306/tcp, 33060/tcp                 MYSQL_DB
์  ํ‚จ์Šค ํ™ˆํŽ˜์ด์ง€

 
 
 

 
ใ†๊ทธ๋Ÿผ ์  ํ‚จ์Šค์—์„œ Docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Jenkins ์„œ๋ฒ„์— ๋„์ปค๊ฐ€ ์„ค์น˜๊ฐ€ ๋˜์–ด์•ผ ํ•ด์š”.
   ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋ฉด Jenkins ์„œ๋ฒ„์—์„œ Docker ๋ช…๋ น์–ด๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์š”.

/* Jenkins ์„œ๋ฒ„์˜ Root ์ ‘์† */
docker exec -it -u root <jenkins_container_id> /bin/bash

/* ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ */
apt-get update

/* ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ */
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

/* Docker์˜ ๊ณต์‹ GPG ํ‚ค ์ถ”๊ฐ€ */
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

/* Docker ์ €์žฅ์†Œ ์ถ”๊ฐ€ */
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

/* ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ */
apt-get update

/* Docker CLI ์„ค์น˜ */
apt-get install -y docker-ce-cli

/* ์˜ˆ์™ธ์‚ฌํ•ญ */
# apt-get install docker.io           /* ๋„์ปค ์„ค์น˜๊ฐ€ ์•ˆ๋ ๊ฒฝ์šฐ */
# sudo chmod 666 /var/run/docker.sock /* Docker ์†Œ์ผ“์— ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์ด ์„ค์ •*/

 
 
 

์œ„์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋ฉด 1์ฐจ์ ์ธ ์ค€๋น„๋Š” ๋๋‚ฌ์–ด์š”. 
 
๋‹ค์Œ์—๋Š” Jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ, ์‹ค์ œ๋กœ ๋ฐฐํฌ๊นŒ์ง€ ์ง„ํ–‰ ํ•ด๋ณผ๊ฒŒ์š” ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด GitHub์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋„๋ก Token, SSH๋“ฑ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค์Œ์— ํ™•์ธํ•ด ๋ณด๋„๋กํ•ด์š”.

1. GitHub ์ธ์ฆ ๋ฌธ์ œ - Personal Access Token (PAT) ๋˜๋Š” SSH ํ‚ค๋ฅผ ์‚ฌ์šฉ