[DevOps]/CI & CD

μ  ν‚¨μŠ€(jenkins)에 λŒ€ν•΄ μ•Œμ•„λ³΄κ³  무쀑단 배포 κ³„νšμ„ μ„Έμ›Œλ³΄μž

νŒ‘νŽ‘ν 2023. 11. 15. 11:40
728x90
πŸ’‘ 사내 ν”„λ‘œμ νŠΈμ— μ  ν‚¨μŠ€λ₯Ό μ μš©ν•˜μ—¬ 기쑴의 고전적인 λΉŒλ“œ & 배포 λ°©μ‹μ—μ„œ λ²—μ–΄λ‚˜λŠ” 과정을 κΈ°λ‘ν•˜λ €κ³  ν•œλ‹€.

 

πŸ€” What is Jenkins?

  • μ  ν‚¨μŠ€(Jenkins)λŠ” 지속적인 톡합(Continuous Integration)κ³Ό 지속적인 배포(Continuous Deployment)λ₯Ό μ§€μ›ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ μžλ™ν™” 도ꡬ이닀.
  • μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, λ°°ν¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό ꡬ좕할 수 μžˆλ„λ‘ 도와쀀닀.
  • μ  ν‚¨μŠ€λŠ” λ‹€μ–‘ν•œ ν”ŒλŸ¬κ·ΈμΈκ³Ό ν™•μž₯성을 μ œκ³΅ν•˜μ—¬ μ‚¬μš©μžκ°€ λ‹€μ–‘ν•œ 개발 ν™˜κ²½κ³Ό μš”κ΅¬ 사항에 맞게 μ μš©ν•  수 μžˆλ‹€.
  • 이λ₯Ό 톡해 μ†Œν”„νŠΈμ›¨μ–΄ 개발 νŒ€μ€ ν’ˆμ§ˆ ν–₯상, 개발 생산성 ν–₯상, 지속적인 톡합 및 배포λ₯Ό 효율적으둜 μˆ˜ν–‰ν•  수 μžˆλ‹€.

 

πŸ“Œ μ  ν‚¨μŠ€μ˜ μ£Όμš” κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™λ‹€:

지속적인 톡합: κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό 주기적으둜 λΉŒλ“œν•˜κ³ , ν…ŒμŠ€νŠΈν•˜μ—¬ ν’ˆμ§ˆμ„ μœ μ§€ν•˜λ©°, 버그λ₯Ό 쑰기에 λ°œκ²¬ν•  수 μžˆλ‹€.

지속적인 배포: λΉŒλ“œλœ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μžλ™μœΌλ‘œ λ°°ν¬ν•˜μ—¬ μ‹ μ†ν•˜κ³  μ•ˆμ •μ μΈ 배포λ₯Ό μ§€μ›ν•œλ‹€.

μžλ™ν™”λœ ν…ŒμŠ€νŠΈ: λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈ 도ꡬ와 ν†΅ν•©ν•˜μ—¬ μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κ³  ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό λ³΄κ³ ν•œλ‹€.

ν™•μž₯μ„±: λ‹€μ–‘ν•œ ν”ŒλŸ¬κ·ΈμΈκ³Ό 톡합을 μ§€μ›ν•˜μ—¬ μ  ν‚¨μŠ€λ₯Ό λ‹€λ₯Έ 도ꡬ와 μ—°λ™ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

  • ex ) slackκ³Ό μ—°κ²°ν•˜μ—¬ λΉŒλ“œ 성곡 μ‹€νŒ¨ μ—¬λΆ€ μ•ŒλžŒ 보내기 λ“±

λͺ¨λ‹ˆν„°λ§ 및 μ•Œλ¦Ό: λΉŒλ“œ 및 배포 μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³ , 이상이 λ°œμƒν•  경우 μ•Œλ¦Όμ„ μ œκ³΅ν•œλ‹€.

 

πŸ“œ μ •리

μ  ν‚¨μŠ€λŠ” λ§Žμ€ κΈ°μ—…κ³Ό ν”„λ‘œμ νŠΈμ—μ„œ 널리 μ‚¬μš©λ˜λ©°, κ°œλ°œμžλ“€μ˜ 생산성을 ν–₯μƒν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄ 개발 과정을 μžλ™ν™”ν•˜μ—¬ μ•ˆμ •μ μ΄κ³  효율적인 κ°œλ°œμ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

 

πŸ“Ž ν˜„μž¬ ν”„λ‘œμ νŠΈ λΉŒλ“œ 파일 배포 μ§„ν–‰ 방식

  • λ‘œμ»¬μ—μ„œ μ„œλ²„ 변경사항 및 좔가사항을 μ μš©ν•œλ‹€.
  • λ‘œμ»¬μ—μ„œ 각자의 λ°©μ‹μœΌλ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•œλ‹€.
  • 둜컬 PCμ—μ„œ λΉŒλ“œν•œ jar νŒŒμΌμ„ SFTP ν”„λ‘œκ·Έλž¨μ„ 톡해 원격 μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€.
  • 둜컬 PCμ—μ„œ 원격 μ„œλ²„λ‘œ SSH 접속을 ν•œλ‹€.
  • 원격 μ„œλ²„μ—μ„œ μ‰˜ 슀크립트 파일(ex. start.sh) 등을 μ΄μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈ μ„œλ²„λ₯Ό μ‹€ν–‰ν•œλ‹€.
  • κΉƒν—ˆλΈŒλ‘œμ˜ PUSHλŠ” λ³„λ„λ‘œ μ§„ν–‰ν•œλ‹€.

 

🚨 λ¬Έμ œμ 

  1. ν˜„μž¬ 배포쀑인 파일의 버전과 κΉƒν—ˆλΈŒμ— μ—…λ‘œλ“œλœ 버전이 λ‹€λ₯Έ κ²½μš°κ°€ λ§Žμ•„ 버전관리가 μ „ν˜€ 되고 μžˆμ§€ μ•ŠμŒ
  2. ν•œ 번 배포할 λ•Œλ§ˆλ‹€ κ°œλ°œμžκ°€ ν•΄μ•Όν•˜λŠ” μž‘μ—…μ΄ 많음(μ‹œκ°„μ„ 많이 λΉΌμ•—κΉ€)

 

πŸ§‘πŸ»‍πŸ”¬ κ³„νšμ€‘μΈ Jenkins blue & Green λΉŒλ“œ 파일 배포 방식

  • λ‘œμ»¬μ—μ„œ μ„œλ²„ 변경사항 및 좔가사항을 μ μš©ν•œλ‹€.
  • λ‘œμ»¬μ—μ„œ κΉƒν—ˆλΈŒλ‘œ PUSHν•œλ‹€.
  • κΉƒν—ˆλΈŒμ—μ„œ 좩돌 사항 및 λ™λ£Œ 개발자의 체크 ν›„ MERGE ν•œλ‹€.
  • κΉƒν—ˆλΈŒμ˜ MERGE μ‹ ν˜Έλ₯Ό μˆ˜μ‹ ν•œ μ  ν‚¨μŠ€κ°€ μ΅œμ‹  λ²„μ „μ˜ jar νŒŒμΌμ„ λΉŒλ“œν•œλ‹€.
  • 블루가 μ‚΄μ•„μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

 

상황 1) 블루 μ‹€ν–‰ 쀑 → 그린에 배포 ν›„ μ‹€ν–‰ → 블루 쀑단

 

if) 블루가 μ‚΄μ•„μžˆλŠ” 경우

  • 그린에 λΉŒλ“œν•œ μ΅œμ‹ λ²„μ „μ˜ jar νŒŒμΌμ„ μ „μ†‘ν•˜κ³  μ‹€ν–‰μ‹œν‚¨λ‹€.
  • κ°œλ°œμžκ°€ μ„€μ •ν•œ λͺ‡ 초의 μ£ΌκΈ°λ§ˆλ‹€ κ·Έλ¦° μ„œλ²„κ°€ μ œλŒ€λ‘œ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.
  • κ·Έλ¦° μ„œλ²„κ°€ μ„±κ³΅μ μœΌλ‘œ λ™μž‘ν•œλ‹€λ©΄ NGINXμ—κ²Œ ν”„λ‘μ‹œ λ°©ν–₯을 그린으둜 λ³€κ²½ν•˜λ„λ‘ λͺ…λ Ήν•œλ‹€.
  • 블루 μ„œλ²„μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•œλ‹€.

 

상황 2) κ·Έλ¦° μ‹€ν–‰ 쀑 → 블루에 배포 ν›„ μ‹€ν–‰ → κ·Έλ¦° 쀑단

if) 블루가 μ£½μ–΄μžˆλŠ” 경우

  • 블루에 λΉŒλ“œν•œ μ΅œμ‹ λ²„μ „μ˜ jar νŒŒμΌμ„ μ „μ†‘ν•˜κ³  μ‹€ν–‰μ‹œν‚¨λ‹€.
  • κ°œλ°œμžκ°€ μ„€μ •ν•œ λͺ‡ 초의 μ£ΌκΈ°λ§ˆλ‹€ 블루 μ„œλ²„κ°€ μ œλŒ€λ‘œ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.
  • 블루 μ„œλ²„κ°€ μ„±κ³΅μ μœΌλ‘œ λ™μž‘ν•œλ‹€λ©΄ NGINXμ—κ²Œ ν”„λ‘μ‹œ λ°©ν–₯을 λΈ”λ£¨λ‘œ λ³€κ²½ν•˜λ„λ‘ λͺ…λ Ήν•œλ‹€.
  • κ·Έλ¦° μ„œλ²„μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•œλ‹€.

 

πŸ™πŸ» κΈ°λŒ€ 효과

  1. κΉƒν—ˆλΈŒμ— ν‘Έμ‹œν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ λͺ¨λ“  배포 과정을 μžλ™μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλ‹€.
  2. κΉƒν—ˆλΈŒμ™€ μƒμš© μ„œλ²„μ˜ 배포 버전이 ν†΅μΌλœλ‹€.
  3. 무쀑단 배포가 κ°€λŠ₯ν•΄μ§„λ‹€.

 

 

 

μ°Έκ³ 

뀼튼

https://iizz.tistory.com/341

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

https://hudi.blog/zero-downtime-deployment-with-jenkins-and-nginx/

 

728x90