๐Ÿณ ์ธํ”„๋ผ/Jenkins

Jenkins ์›๊ฒฉ ์„œ๋ฒ„ ๋ฐฐํฌ(Publish Over SSH) (1)

๊ณ„๋ž€์†Œ๋…„ 2024. 5. 13. 16:15

1. Architecture

์„ค๋ช…

1 GitHub์— ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐœ์ƒ

2 GitHub์— ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฐ์ง€๋˜๋ฉด, ์„ค์ •๋œ GitHub Webhook์ด Jenkins์—๊ฒŒ HTTP POST ์š”์ฒญ

3 Jenkins์—์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฐ์ง€ํ•˜๊ณ  CI / CD ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰

4  ๋นŒ๋“œ & ๋ฐฐํฌ

5 ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ํ›„, Docker ์ด๋ฏธ์ง€๋กœ ํŒจํ‚ค์ง•ํ•˜๊ณ  EC2 ์ธ์Šคํ„ด์Šค์— ๋ฐฐํฌํ•œ๋‹ค.

 

๋จผ์ € ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ๋นŒ๋“œ๊ฐ€ ์ž˜๋˜๋Š”์ง€ ๋กœ์ปฌ์—์„œ ํ™•์ธํ•œ๋‹ค.

 

2. EC2 ์„ธํŒ…

EC2์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ดํ•ด์˜ ํŽธ์˜์„ฑ๊ณผ ์‚ฌ์šฉ ํ›„ ec2๋ฅผ ๋‚ด๋ฆด๊ฑฐ๊ธฐ์— ip๋ฅผ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

๋ณธ์ธ์€ Ubuntu ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ํƒ„๋ ฅ์  IP๋กœ ์ ‘์†์„ ์œ„ํ•œ IP๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋งŒ๋“  ec2์™€ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

ec2์ƒ์„ฑ์‹œ ์‚ฌ์šฉํ•œ .pemํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์›๊ฒฉ์— ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

ssh -i opensource.pem ubuntu@3.35.152.81

 

3. docker ์„ค์น˜

SWAP MEMORY

$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

 

์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œจ๋ฉด ์„ฑ๊ณต์ด๋‹ค.

 

repository setup

$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

docker GPG ์ถ”๊ฐ€

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

repository setup

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

docker install

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

docker install check

$ sudo docker run hello-world

๋„์ปค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋‹ค.

 

4. ์  ํ‚จ์Šค ์„ค์น˜

 

์  ํ‚จ์Šค ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ

$ docker pull jenkins/jenkins:lts


์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ

$ sudo docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts

 

docker-compose ์‚ฌ์šฉํ•˜๊ธฐ

docker-compose๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ์‹คํ–‰์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„์ปค์˜ ๊ธฐ๋Šฅ์œผ๋กœ, ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์‚ฌ์šฉ ํ•  ๋•Œ๋„ ์œ ์šฉํ•˜๋‹ค.

$ sudo apt install docker-compose

 

Docker Compose ์—…๊ทธ๋ ˆ์ด๋“œ

$ sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

 

๋„์ปค ์‹คํ–‰ ๊ฒฝ๋กœ์—์„œ 

$ sudo vim docker-compose.yml

์•„๋ž˜ ๋‚ด์šฉ ์ž‘์„ฑ

version: "3"
services:
  jenkins:
    image: jenkins/jenkins:lts
    user: root
    volumes:
      - ./jenkins:/var/jenkins_home
    ports:
      - 8081:8080

 

์ƒ์„ฑํ•œ docker-compose.yml ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ๋กœ์—์„œ ์•„๋ž˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ณต์žกํ•œ ๋ช…๋ น ์—†์ด๋„ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • version: Docker Compose ํŒŒ์ผ์˜ ๋ฒ„์ „
  • services: Docker Compose๊ฐ€ ๊ด€๋ฆฌํ•  ์„œ๋น„์Šค๋ฅผ ์ •์˜
    • jenkins: ๊ด€๋ฆฌํ•  ์„œ๋น„์Šค ์ด๋ฆ„
      • image: ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€  ์ง€์ •
      • user: ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •
      • volumes: ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ํ˜ธ์ŠคํŠธ์˜ ./jenkins ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ /var/jenkins_home ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฐ๊ฒฐ
      • ports: ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํฌํŠธ ๋งคํ•‘, ํ˜ธ์ŠคํŠธ์˜ 8081 ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ 8080 ํฌํŠธ๋กœ ๋งคํ•‘

์ด๋ ‡๊ฒŒ ์„ค์ •๋œ Docker Compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ์ปฌ ๋จธ์‹ ์—์„œ Jenkins๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๊ณ , 8081 ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ sudo docker-compose up -d

-d ์˜ต์…˜์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰๋จ์„ ์˜๋ฏธ

๋ฐ๋ชฌ์ด๋ž€?

๋”๋ณด๊ธฐ

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค.

ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ฃผ๋กœ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋‚˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์‹คํ–‰

"-d" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ๋ณดํ†ต ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ณ , ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ ์—†์ด ์ž‘์—…์„ ์ˆ˜ํ–‰

8080ํฌํŠธ์™€ http๋ฅผ ์—ด์–ด์ค˜์•ผํ•œ๋‹ค.

http๋ฅผ ์—ด์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด webhooks๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์ง€์•Š์•„ ๊นƒํ—ˆ๋ธŒ์— Pushํ•ด๋„ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜์ง€์•Š๋Š”๋‹ค.