๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/CI & CD

๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋„์ปค ์  ํ‚จ์Šค(Jenkins) ์ปจํ…Œ์ด๋„ˆ๋กœ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ํด๋ก  ํ…Œ์ŠคํŠธํ•˜๊ธฐ(with Ngrok) | ๋กœ์ปฌ ์  ํ‚จ์Šค ์„ค๋ช… ํฌํ•จ

by ํŒกํŽ‘ํ 2023. 11. 18.
728x90

๐Ÿ’ก ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

 

  • ๋„์ปค์˜ jenkins ๊ณต์‹์ด๋ฏธ์ง€๋Š” Deprecated ๋˜์—ˆ๋‹ค.
  • ๋‚˜์˜ ๊ฒฝ์šฐ ์ž๋ฐ” 11 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— lts-jdk 11 ๋ฒ„์ „์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • LTS(Long Term Support)๋Š” ์žฅ๊ธฐ ์ง€์› ๋ฒ„์ „์ด๋ž€ ์˜๋ฏธ๋กœ, ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋ณด๋‹ค ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์ณ ์ง€์›ํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ๊ณ ์•ˆ๋œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฒ„์ „ ๋˜๋Š” ์—๋””์…˜์ด๋‹ค.

 

 

 

๐Ÿ“ฆ ์ค€๋น„ํ•˜๊ธฐ

wonyong@Wonyongui-MacBookAir:~$docker volume create jenkins 
jenkins
  • ๋ณผ๋ฅจ ์‚ฌ์šฉ์„ ์œ„ํ•ด jenkins ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ–ˆ๋‹ค.
  • ์ด ๊ธ€์€ ๋„์ปค ์  ํ‚จ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๋กœ ์  ํ‚จ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋กœ์ปฌ์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
    • ๋กœ์ปฌ์—์„œ ์  ํ‚ค์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, https://www.jenkins.io/์— ์ ‘์†ํ•˜์—ฌ ์šด์˜์ฒด์ œ์— ๋งž๊ฒŒ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค. 

 

๐Ÿ“Œ ๋„์ปค๋กœ jenkins ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

docker run -d --name jenkins -v jenkins:/var/jenkins_home -p 18080:8080 -p 50000:50000 --restart=on-failure -e TZ=Asia/Seoul jenkins/jenkins:lts-jdk11
  • -d๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • --name์€ ์ƒ์„ฑํ•  ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.
  • -v๋Š” ๋ณผ๋ฅจ ์„ค์ •์ด๋‹ค. ์œ„์—์„œ ์ƒ์„ฑํ•œ ๋ณผ๋ฅจ jenkins์™€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ฒฝ๋กœ๋ฅผ ๋งคํ•‘ํ•ด ์ฃผ์—ˆ๋‹ค.
  • -p ํฌํŠธ๋Š” ๋กœ์ปฌ์˜ 18080 ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 8080 ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค. 50000 ํฌํŠธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ๋กœ์ปฌ์— ์ง์ ‘ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์•„๋ž˜์˜ mac ๊ธฐ์ค€ ์  ํ‚จ์Šค ํฌํŠธ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์ž.

8080 ํฌํŠธ

  • 8080 ํฌํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Jenkins์˜ ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ด ํฌํŠธ๋ฅผ ํ†ตํ•ด Jenkins ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ๋นŒ๋“œ, ๋ฐฐํฌ, ๊ด€๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

50000 ํฌํŠธ

  • Jenkins ์—์ด์ „ํŠธ(๋˜๋Š” ์Šฌ๋ ˆ์ด๋ธŒ)์™€ ๋งˆ์Šคํ„ฐ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ํฌํŠธ์ด๋‹ค.
  • Jenkins ์—์ด์ „ํŠธ๋Š” ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ์ž‘์—…์„ ๋ฐ›์•„ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ๋ณด๊ณ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

--restart=on-failure

  • ์ด ์˜ต์…˜์€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ์ง€์†์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

-e TZ=Asia/Seoul

  • ์ด ์˜ต์…˜์€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž„์กด์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ๋Š” "Asia/Seoul"๋กœ ํƒ€์ž„์กด์„ ์„ค์ •ํ•˜์˜€์œผ๋ฉฐ, ์„œ์šธ ์‹œ๊ฐ„๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์‹œ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค.

 

โŒจ๏ธ mac ๊ธฐ์ค€ ์  ํ‚จ์Šค ํฌํŠธ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

wonyonghwang@Wonyongs-MacBook-Pro ~ % cd /usr/local/opt/jenkins
wonyonghwang@Wonyongs-MacBook-Pro jenkins % ls
INSTALL_RECEIPT.json		homebrew.jenkins.service	libexec
bin				homebrew.mxcl.jenkins.plist
  • mac ๊ธฐ์ค€ ์  ํ‚จ์Šค์˜ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์˜ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด๊ฐ€ homebrew.mxcl.jenkins.plist๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งŒ์•ฝ homebrew.mxcl.jenkins.plist๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์„ค์น˜๋œ ๊ฒฝ์šฐ find / -name jenkins.plist ๋ช…๋ น์–ด๋กœ ์ฐพ์•„๋ณด์ž.
    • ์•„๋งˆ m ์‹œ๋ฆฌ์ฆˆ ๋งฅ๋ถ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด /opt/homebrew/opt/jenkins์— ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ๋‹ค๋ฅธ ์šด์˜์ฒด์ œ์ธ ๊ฒฝ์šฐ๋Š” find / -name jenkins.service๋กœ ํŒŒ์ผ์„ ์ฐพ๊ณ  ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

wonyonghwang@Wonyongs-MacBook-Pro jenkins % vi homebrew.mxcl.jenkins.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>homebrew.mxcl.jenkins</string>
        <key>LimitLoadToSessionType</key>
        <array>
                <string>Aqua</string>
                <string>Background</string>
                <string>LoginWindow</string>
                <string>StandardIO</string>
                <string>System</string>
        </array>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/local/opt/jenkins/bin/jenkins</string>
                <string>--httpListenAddress=127.0.0.1</string>
                <string>--httpPort=8080</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/usr/local/var/log/jenkins/error.log</string>
        <key>StandardOutPath</key>
        <string>/usr/local/var/log/jenkins/output.log</string>
</dict>
</plist>
  • vi ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋“ค์–ด๊ฐ€ <string>--httpPort=8080</string> ์ด ๋ถ€๋ถ„์„ ์›ํ•˜๋Š” ํฌํŠธ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“Œ ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ ์ ‘์†

  • ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ ‘์†ํ•˜๋ ค๋ฉด ์œ„์—์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ ๋งคํ•‘ํ•œ ๋กœ์ปฌ PC์˜ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•œ๋‹ค.
    • ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” localhost:18080์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•œ๋‹ค.
    • ๋กœ์ปฌ ์  ํ‚จ์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ์„ค์ •ํ•œ ํฌํŠธ๋กœ ์ž…๋ ฅํ•˜์—ฌ ์ ‘์†ํ•˜๋ฉด ๋œ๋‹ค.
  • jenkins์— ์ฒ˜์Œ ์ ‘์†ํ•˜๋ฉด ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

โŒจ๏ธ ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ

๋ฐฉ๋ฒ• 1)

dokcer logs jenkins(์ปจํ…Œ์ด๋„ˆ ๋ช…)

  • ๋‚˜๋Š” docker run ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด -d ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์—†์—ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๊ฐ„๋‹จํžˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด์ธ docker logs๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

๋ฐฉ๋ฒ• 2)

docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
  • ์œ„์™€ ๊ฐ™์ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ์ ‘์†ํ•˜์—ฌ ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
  • ๋งŒ์•ฝ MacOS์— ์ง์ ‘ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด /User/<user๋ช…>/.jenkins/secret/initialAdminPassword์— ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์  ํ‚จ์Šค์—์„œ ๊ถŒ์žฅํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค.(์™ผ์ชฝ ํด๋ฆญ)

 

  • ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์„ค์น˜๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.

 

  • ์ดˆ๊ธฐ Admin ์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

  • jenkins URL์„ ์„ค์ •ํ•œ๋‹ค.
  • AWS ๋“ฑ์˜ ์ธ์Šคํ„ด์Šค ์„œ๋ฒ„๋กœ ์  ํ‚จ์Šค๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๊ฐ€ ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ๋‚˜๋Š” ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ˆ ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ๋‹ค.

 

๋กœ๊ทธ์ธ ์‹œ

  • ์œ„์—์„œ ๋งŒ๋“  ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โŒจ๏ธ ์Šคํ”„๋ง๋ถ€ํŠธ ์„œ๋ฒ„ ์„ธํŒ…

  • ์  ํ‚จ์Šค์šฉ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • localhost:8080์œผ๋กœ ์ ‘์†ํ•˜๋ฉด get ์š”์ฒญ์„ ๊ธฐ๋ณธ์œผ๋กœ ์œ„์˜ ๋ฆฌํ„ด ๋ฌธ์ž์—ด์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ๋‹ค.

 

โŒจ๏ธ github Repository์™€ ์—ฐ๊ฒฐ

  • ํ…Œ์ŠคํŠธ์šฉ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์ ‘๊ทผ ๊ถŒํ•œ์€ private๋กœ ํ–ˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์‹ค๋ฌด์—์„œ๋Š” private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ์ ์šฉํ•  ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ์•„๋ž˜์— ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ Private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋Š” Public ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์  ํ‚จ์Šค๋ฅผ ์„ค์ •ํ•  ๋•Œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.
    • Public์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ธ”๋กœ๊ทธ ๊ธ€๋งŒ ๋ณด๊ณ  ๋”ฐ๋ผ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

 

โŒจ๏ธ ๋กœ์ปฌ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐ

Initialized empty Git repository in /Users/wonyong/study/jenkinsTest/.git/
wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$git remote add origin git@github.com:wonyongg/jenkinsTest.git
wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$git add .
wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$git commit -m "first commit"
[main (root-commit) c730eb8] first commit
 11 files changed, 464 insertions(+)
 create mode 100644 forJenkins/.gitignore
 create mode 100644 forJenkins/build.gradle
 create mode 100644 forJenkins/gradle/wrapper/gradle-wrapper.jar
 create mode 100644 forJenkins/gradle/wrapper/gradle-wrapper.properties
 create mode 100755 forJenkins/gradlew
 create mode 100644 forJenkins/gradlew.bat
 create mode 100644 forJenkins/settings.gradle
 create mode 100644 forJenkins/src/main/java/test/ForJenkinsApplication.java
 create mode 100644 forJenkins/src/main/java/test/MainController.java
 create mode 100644 forJenkins/src/main/resources/application.properties
 create mode 100644 forJenkins/src/test/java/test/ForJenkinsApplicationTests.java
wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$git push origin main
  • ๋กœ์ปฌ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด …or create a new repository on the command line๊ณผ ์œ„ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋”ฐ๋ผํ•˜๋ฉด ๋œ๋‹ค.

 

  • ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค.

 

๐Ÿ“– ๋ณธ๊ฒฉ์ ์ธ ํ…Œ์ŠคํŠธ ์‹œ์ž‘

์ˆœ์„œ๋Š” ์ด๋ ‡๋‹ค.

  1. ๊นƒํ—ˆ๋ธŒ ํ† ํฐ ์–ป๊ธฐ
  2. ์  ํ‚จ์Šค ๊ธฐ๋ณธ ์„ค์ •
  3. ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์  ํ‚จ์Šค ์—ฐ๊ฒฐ
  4. Ngrok ์„ค์ •
  5. ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์›นํ›… ์„ค์ •
  6. ํ…Œ์ŠคํŠธ ์„ฑ๊ณต ๊ณผ์ • : ๋กœ์ปฌ์—์„œ ์ปค๋ฐ‹ & ํ‘ธ์‹œํ•œ๋‹ค -> ๋กœ์ปฌ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ์›นํ›…์ด ์  ํ‚จ์Šค์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค. -> ์  ํ‚จ์Šค๊ฐ€ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

๐Ÿ“Œ ๊นƒํ—ˆ๋ธŒ ํ† ํฐ ์–ป๊ธฐ

  • User - Settings์— ๋“ค์–ด๊ฐ„๋‹ค.
  • Developer settings์— ๋“ค์–ด๊ฐ„๋‹ค.

 

  • Personalaccess tokens - Tokens (classic)์— ๋“ค์–ด๊ฐ„๋‹ค.
  • Generate new Token - Generate new token (classic)์— ๋“ค์–ด๊ฐ„๋‹ค.

 

  • Note(token ๋ฐœ๊ธ‰ ๋ชฉ์  ๊ธฐ๋ก)๊ณผ  Expiration์„ ์„ค์ •ํ•œ๋‹ค.(์ž์œ ์ž„)
  • repo , admin:repo_hook์„ ์ฒดํฌํ•œ๋‹ค.
  • ํ† ํฐ์„ ๋ฐœํ–‰ํ•œ๋‹ค.

 

  • ํ† ํฐ์„ ๋ณต์‚ฌํ•œ๋‹ค.
  • ์ฐธ๊ณ ๋กœ ์ด ํ† ํฐ์€ ํŽ˜์ด์ง€๋ฅผ ๋‚˜๊ฐ€๋ฉด ๋‹ค์‹œ๋Š” ๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ œ๋Œ€๋กœ ๋ณต์‚ฌํ•˜์ž.

 

๐Ÿ“Œ ์  ํ‚จ์Šค ๊ธฐ๋ณธ ์„ค์ •

  • ์  ํ‚จ์Šค ๋Œ€์‹œ๋ณด๋“œ์—์„œ Jenkins ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•œ๋‹ค.
  • System Configuration -> System์„ ํด๋ฆญํ•œ๋‹ค.

 

 

  • Add Github Server - Github Server๋ฅผ ํด๋ฆญํ•œ๋‹ค.

 

  • ์ด๋ฆ„์„ ์ •ํ•˜๊ณ , API URL์€ ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค.
  • Credentials์—๋Š” Add - Jenkins๋ฅผ ํด๋ฆญํ•œ๋‹ค.

 

Crederntial - Secret test

  • Kind๋ฅผ Secret test๋กœ ์„ ํƒํ•œ๋‹ค๋ฉด public ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ๋Š” ๊ทธ๋Œ€๋กœ ๋นŒ๋“œ ์‹œ Credential ์ •๋ณด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Secret์— ์œ„์—์„œ ๋ณต์‚ฌํ•œ ๊นƒํ—ˆ๋ธŒ ํ† ํฐ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    • ID, Description์€ ์ž์œ ์ด๋‹ค. ๋ง˜๋Œ€๋กœ ์ ๋Š”๋‹ค.
     

  • ์ด์ œ Credentials๋ฅผ ์œ„์—์„œ ์ •ํ•œ ID๋ช…์œผ๋กœ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด ์ž‘์—…์„ ์ฒ˜์Œ ํ•  ๋‹น์‹œ์—๋Š” secret text๋กœ ํ•  ๊ฒฝ์šฐ private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฑธ ๋ชจ๋ฅด๊ณ  secret text๋กœ Credential์„ ๋งŒ๋“ค์—ˆ๋‹ค. private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์— ์„ค๋ช…ํ•ด ๋†“์•˜๋‹ค.

 

  • ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— Test connection์„ ํด๋ฆญํ•˜์—ฌ Credentials๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด์ œ Apply - Save(์ €์žฅ)์„ ๋ˆ„๋ฅธ๋‹ค.

 

๐Ÿ“Œ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์  ํ‚จ์Šค ์—ฐ๊ฒฐ

  • ์ด์ œ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด ๋ณด์ž.
  • ์ƒˆ๋กœ์šด Item์„ ํด๋ฆญํ•œ๋‹ค.

 

  • item ์ด๋ฆ„์„ ๋งŒ๋“ค๊ณ  Freestyle project๋กœ ์„ค์ • ํ›„ OK๋ฅผ ๋ˆ„๋ฅธ๋‹ค.
    • ์—ฌ๊ธฐ๋Š” ๊นƒํ—ˆ๋ธŒ ํด๋ก  ํ…Œ์ŠคํŠธ๊ฐ€ ์ฃผ ๋ชฉ์ ์ด๋‹ˆ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ Freestyle project๋ฅผ ๊ณจ๋ž๋‹ค.
  • ์—ฌ๋Ÿฌ ์„ค์ •์ด ์žˆ๋Š”๋ฐ ๋‹ค ๊ฑด๋„ˆ๋›ฐ๊ณ  ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ค์ •ํ•˜๊ฒ ๋‹ค.

 

  • ๋งจ ์œ„ Github project์—์„œ Project Url์„ ์ž…๋ ฅํ•œ๋‹ค.

 

  • ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ์—์„œ Git์„ ๋ˆ„๋ฅธ๋‹ค.
  • Repository URL์—๋Š” ์œ„์˜ Url๊ณผ ๋™์ผํ•œ Url์„ ์ ๊ณ 
  • Credential์€ Add - Jenkins๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋“ฑ๋กํ•ด ์ค€๋‹ค.
  • Branches to build์—์„œ ๋ธŒ๋žœ์น˜ ๋ช…์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ˆ˜์ •ํ•ด ์ค€๋‹ค.
    • ๋งŒ์•ฝ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๊ฐ€ master๊ฐ€ ์•„๋‹ˆ๋ผ main์ด๋ผ๋ฉด main์œผ๋กœ ์ˆ˜์ •ํ•ด ์ฃผ์ž.

 

  • ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์ด๋‹ค. ์—ฌ๊ธฐ์„œ Public ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ผ๋ฉด ์œ„์— Credential์„ ์„ค์ •ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Secret text๋กœ Credential์„ ๋“ฑ๋กํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋‚ด๊ฐ€ ๋งŒ๋“  jenkinsTest๋Š” Private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์ด๋ฏ€๋กœ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

๐Ÿš’ ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • Private ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Kind์—์„œ Username with password๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • Username์€ ๊นƒํ—ˆ๋ธŒ์˜ username Password๋กœ๋Š” ์œ„์—์„œ ๋งŒ๋“  token ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.(username์˜ ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹ˆ๋‹ค!)

 

  • ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง„ ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๋นŒ๋“œ ์œ ๋ฐœ์€ Github hook trigger fot GITScm polling์„ ์„ ํƒํ•œ๋‹ค.

 

  • ๋นŒ๋“œ ์Šคํƒญ์€ Invoke Gadle script๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ž˜๋“ค ๋ฒ„์ „์„ ๊ณจ๋ผ์•ผ ํ•˜๋Š”๋ฐ ๋งŒ์•ฝ Default ๋ฐ–์— ์—†๋‹ค๋ฉด ๋นŒ๋“œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.
  • ๋งŒ์•ฝ ๋ฒ„์ „์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑธ ํด๋ฆญํ•˜์ž.
  • ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋‚˜์˜ค์ง€ ์•Š์•„ ๋”ฐ๋กœ ๊ทธ๋ž˜๋“ค์„ ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์šฐ์„  ์—ฌ๊ธฐ์„œ ์ €์žฅ์„ ํด๋ฆญํ•œ๋‹ค.

 

๐Ÿš’ ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • ๋ฐ–์œผ๋กœ ๋‚˜์™€ Jenkins ๊ด€๋ฆฌ - System Configuration - Tools์— ๋“ค์–ด๊ฐ„๋‹ค.

 

  • Gradle Installations - Add Gradle์„ ํด๋ฆญํ•œ๋‹ค.

 

  • ์ด๋ฆ„์„ ์“ฐ๊ณ  ๋ฒ„์ „์„ ์ ๋‹นํžˆ ๊ณจ๋ผ์ค€๋‹ค. ๋‚˜๋Š” ๊ทธ๋ƒฅ ์ด๋ฆ„์„ ๋ฒ„์ „์ด๋ž‘ ๋˜‘๊ฐ™์ด ์ผ๋‹ค.

 

  • ์•„๊นŒ ๋งŒ๋“  item์˜ ๊ตฌ์„ฑ์— ๋“ค์–ด๊ฐ€ ๊ทธ๋ž˜๋“ค ๋ฒ„์ „์„ ์ •ํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค.

 

๐Ÿ“Œ ๊นƒํ—ˆ๋ธŒ ์›นํ›… ์„ค์ •

  • ์„ค์ •ํ•ด ๋†“์€ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ๋“ค์–ด๊ฐ€ Settings - Webhooks - add webhook์„ ํด๋ฆญํ•œ๋‹ค.

 

  • ์ž, ์—ฌ๊ธฐ์„œ Payload URL์„ ํ˜ธ์ŠคํŒ… ๋˜์–ด์žˆ๋Š” ๋งํฌ๋ฅผ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ AWS์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์  ํ‚จ์Šค๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๋ฅผ ์ ์œผ๋ฉด ๋˜์ง€๋งŒ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ Ngrok์„ ์ด์šฉํ–ˆ๋‹ค.
    • Ngrok์ด ๋ญ”์ง€ ๋ชจ๋ฅด๋ฉด ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์•Œ์•„๋ณด์ž
    • ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋ช…๋ น์–ด ํ•˜๋‚˜์น˜๊ณ  ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๊ฐ€์ž…ํ•˜๋ฉด 3๋ถ„ ๋งŒ์— ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์— ๋ฌด๋ฃŒ๋กœ ํ˜ธ์ŠคํŒ… ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก Ngrok ์„ค์ •

wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED      STATUS       PORTS                                               NAMES
291cbb2ddcda   jenkins/jenkins:lts-jdk11   "/usr/bin/tini -- /u…"   3 days ago   Up 2 hours   0.0.0.0:50000->50000/tcp, 0.0.0.0:18080->8080/tcp   jenkins
  • Ngrok์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
    • ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋งˆ ๊ฐ€์ž…ํ•˜๋ผ๊ณ  ํ•  ํ…๋ฐ ๊ทธ๋•Œ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์œผ๋กœ ๊ฐ€์ž…ํ•˜๊ณ  ์ธ์ฆ ํ† ํฐ์„ ์ž…๋ ฅํ•ด๋ฉด ๋์ด๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.
  • ๋‚˜์˜ ๊ฒฝ์šฐ jenkins๊ฐ€ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์›Œ์ ธ ์žˆ์œผ๋ฏ€๋กœ Ngrok์ด 18080 ํฌํŠธ๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์—์„œ ์  ํ‚จ์Šค ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด๊ฐ€ ์  ํ‚จ์Šค ์„œ๋ฒ„๋ฅผ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์™€ webhook์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.
  • ๋กœ์ปฌ์— ์  ํ‚จ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ฐจ์ด๊ฐ€ ์—†๋‹ค ๊ธฐ๋ณธ ํฌํŠธ๋Š” 8080์ผํ…Œ๊ณ , ์œ„์—์„œ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝ ํ–ˆ๋‹ค๋ฉด ๋ณ€๊ฒฝํ•œ ์  ํ‚จ์Šค ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค.

 

wonyong@Wonyongui-MacBookAir:~/study/jenkinsTest$ngrok http 18080

ngrok                                                                                             (Ctrl+C to quit)
                                                                                                                  
Build better APIs with ngrok. Early access: ngrok.com/early-access                                                
                                                                                                                  
Session Status                online                                                                              
Account                       kakaohwy@gmail.com (Plan: Free)                                                     
Version                       3.4.0                                                                               
Region                        Japan (jp)                                                                          
Latency                       -                                                                                   
Web Interface                 http://127.0.0.1:4040                                                               
Forwarding                    https://dad8-222-109-220-21.ngrok-free.app -> http://localhost:18080                
                                                                                                                  
Connections                   ttl     opn     rt1     rt5     p50     p90                                         
                              0       0       0.00    0.00    0.00    0.00
  • ngrok http (์  ํ‚จ์Šค ํฌํŠธ) ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ˜ธ์ŠคํŒ… ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ค.

 

  • ์œ„ ๋งํฌ์— ์ ‘์†ํ•˜๋ฉด ngrok์—์„œ ๋งŒ๋“ค์–ด๋†“์€ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ Visit Site๋ฅผ ๋ˆ„๋ฅด๋ฉด ์  ํ‚จ์Šค ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€์ง„๋‹ค.
  • ์ฒ˜์Œ์— ์ด ํŽ˜์ด์ง€ ๋•Œ๋ฌธ์— ์›นํ›…์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ• ๊นŒ ์‹ถ์—ˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋‹ˆ ๋ฌด์‹œํ•ด๋„ ์ข‹๋‹ค.

 

โŒจ๏ธ ์›นํ›… ์„ค์ • ๋งˆ๋ฌด๋ฆฌ

  • webhook ์„ค์ •์œผ๋กœ ๋Œ์•„๊ฐ€ Ngrok์œผ๋กœ๋ถ€ํ„ฐ ๋ฌด๋ฃŒ๋กœ ๋ฐ›์€ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ๋„ฃ๊ณ  /github-webhook/์„ ๋ถ™์—ฌ์ฃผ์ž.
    • /๋ฅผ ๋นผ๋จน์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์ž.
  • Add webhook์„ ๋ˆ„๋ฅธ๋‹ค.

 

  • ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค. ์ด์ œ ํ…Œ์ŠคํŠธํ•ด๋ณด์ž.

 

๐Ÿ“Œ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ -> ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ ํด๋ก  ํ…Œ์ŠคํŠธ

  • ๋ฌธ๊ตฌ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ปค๋ฐ‹ & ํ‘ธ์‹œํ•ด ๋ณด์ž.

 

  • ๋นŒ๋“œ ์„ฑ๊ณตํ–ˆ๋‹ค!

 

๐Ÿ“œ ๋„์ปค ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ ๋‚ด ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ™•์ธ

  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— forJenkins๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.
    • ๋กœ์ปฌ์—์„œ๋Š” mac ๊ธฐ์ค€ /User/<user ๋ช…>/.jenkins/workspace ํด๋”์— ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  • ์ •์ƒ์ ์œผ๋กœ ๊นƒํ—ˆ๋ธŒ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ์—…๋กœ๋“œ ํŒŒ์ผ๋“ค์ด ์  ํ‚จ์Šค ์ปจํ…Œ์ด๋„ˆ ๋‚ด ์›Œํฌ์ŠคํŽ˜์ด์Šค ํด๋”์— ํด๋ก (clone)๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฐธ๊ณ 

๋คผํŠผ

https://iizz.tistory.com/305

https://hyunminh.github.io/nonstop-deploy/

https://stackoverflow.com/questions/8646762/cannot-run-program-gradle-in-jenkins

https://be-developer.tistory.com/14

https://narup.tistory.com/224

728x90