Full_Stack developer

Azure DevOps์—์„œ ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ ์‹œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต ๋ณธ๋ฌธ

Devops/Azure

Azure DevOps์—์„œ ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ ์‹œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต

develkbh 2025. 4. 9. 15:09


๐Ÿ“ฃ Azure DevOps์—์„œ ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ ์‹œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต

๐Ÿงญ ์™œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์ด ์ค‘์š”ํ•œ๊ฐ€?
๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ, ์Šคํ…Œ์ด์ง•, ํ”„๋กœ๋•์…˜)์— ๋งž๋Š” ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๋ช…ํ™•ํžˆ ์„ค์ •ํ•จ์œผ๋กœ์จ, ๋ฐฐํฌ์˜ ์ผ๊ด€์„ฑ, ์•ˆ์ •์„ฑ, ์ถ”์ ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Azure DevOps๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์„ ํ†ตํ•ด ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 1. ๋ฐฐํฌ ๋ฒ„์ „ ๋ฒˆํ˜ธ ๊ทœ์น™ ์„ค์ •

โ–ถ ๋ชฉํ‘œ: ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๊ฐ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋กค๋ฐฑ์ด๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ๋ฒˆํ˜ธ ๊ตฌ์„ฑ ์˜ˆ์‹œ:

  • ์ฃผ ๋ฒ„์ „.๋ถ€ ๋ฒ„์ „.์ˆ˜์ • ๋ฒ„์ „-๋นŒ๋“œ ๋ฒˆํ˜ธ
  • ์˜ˆ: 1.2.3-42
    • ์ฃผ ๋ฒ„์ „: ์ฃผ์š” ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์ด๋‚˜ ํฐ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ๋ณ€๊ฒฝ
    • ๋ถ€ ๋ฒ„์ „: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€, ์„ฑ๋Šฅ ๊ฐœ์„  ๋“ฑ
    • ์ˆ˜์ • ๋ฒ„์ „: ๋ฒ„๊ทธ ์ˆ˜์ •, ์ž‘์€ ์ˆ˜์ • ์‚ฌํ•ญ
    • ๋นŒ๋“œ ๋ฒˆํ˜ธ: ์ž๋™ ์ฆ๊ฐ€ํ•˜๋Š” ๋นŒ๋“œ ๋ฒˆํ˜ธ (์ž๋™ํ™”๋œ ๋ฐฐํฌ์™€ ์—ฐ๊ณ„)

๐Ÿ“ฉ 2. ๊ฐ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฒ„์ „ ํƒœ๊น… ์ „๋žต

โ–ถ ๋ฐฉ๋ฒ•: ๊ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฒ„์ „ ํƒœ๊น…์„ ์„ค์ •ํ•ด ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” 1.2.3-dev, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” 1.2.3-prod์™€ ๊ฐ™์€ ๋ฒ„์ „ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: 1.2.3-dev-42
  • ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ: 1.2.3-staging-42
  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ: 1.2.3-prod-42

์ด๋ ‡๊ฒŒ ๊ฐ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฒ„์ „ ํƒœ๊ทธ๋ฅผ ๋ถ€์—ฌํ•˜๋ฉด ๋ฐฐํฌ์˜ ์ถ”์ ์ด ์‰ฌ์›Œ์ง€๊ณ , ๋กค๋ฐฑ ์‹œ์—๋„ ํŠน์ • ํ™˜๊ฒฝ์˜ ๋ฒ„์ „์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ฌ 3. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ž๋™ํ™”

โ–ถ ๋ฐฉ๋ฒ•: Azure DevOps์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Build.BuildId ๋˜๋Š” Git ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ๋ฒ„์ „ ํƒœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฐ ๋นŒ๋“œ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ๋ฒ„์ „ ๋ฒˆํ˜ธ ๋ถ€์—ฌ ์˜ˆ์‹œ:

 


[yaml]

 

trigger:
  branches:
    include:
      - main

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: Docker@2
    inputs:
      command: 'buildAndPush'
      containerRegistry: '$(dockerRegistryServiceConnection)'
      repository: 'myapp'
      dockerfile: '**/Dockerfile'
      tags: |
        $(Build.BuildId)


์œ„์˜ YAML์—์„œ $(Build.BuildId)๋Š” ๊ฐ ๋นŒ๋“œ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ, ์ด๋ฅผ Docker ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœจ ์‹ค์ „ ์˜ˆ: ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ

  1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ , ๋นŒ๋“œ ํƒœ๊ทธ๋Š” 1.2.3-dev๋กœ ์„ค์ •
  2. ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๋ฐฐํฌ ์‹œ, ๋ฒ„์ „ ํƒœ๊ทธ๋Š” 1.2.3-staging
  3. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ตœ์ข… ๋ฐฐํฌ ์‹œ, ๋ฒ„์ „ ํƒœ๊ทธ๋Š” 1.2.3-prod

โœ… ์ด๋ ‡๊ฒŒ ๋ฒ„์ „ ๊ด€๋ฆฌ ํƒœ๊น…์„ ํ†ตํ•ด ๊ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐฐํฌ์™€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜์–ด, ์‹ค์ˆ˜๋ฅผ ์ค„์ด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” ๋งˆ๋ฌด๋ฆฌ

Azure DevOps๋ฅผ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ ์‹œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์€, ๊ฐ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฒ„์ „ ๋ฒˆํ˜ธ ๊ทœ์น™ ์„ค์ •, ๋ฒ„์ „ ํƒœ๊น…, ๊ทธ๋ฆฌ๊ณ  CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ž๋™ํ™”๋œ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋ฐฐํฌ์˜ ์ผ๊ด€์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํšจ์œจ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์„ ์„ค์ •ํ•˜๋ฉด, ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ๋ฐฐํฌ ๊ด€๋ฆฌ๋ฅผ ๋”์šฑ ์ฒด๊ณ„์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DevOps๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ํŒ€ ๊ฐ„ ํ˜‘์—…๊ณผ ์‹ ๋ขฐ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š