Full_Stack developer

Azure DevOps์—์„œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜๊ธฐ ๋ณธ๋ฌธ

Devops/Azure

Azure DevOps์—์„œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜๊ธฐ

develkbh 2025. 4. 8. 14:31


๐Ÿš€ Azure DevOps์—์„œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜๊ธฐ

์ง€๋‚œ ๊ธ€์—์„œ๋Š” Azure DevOps์˜ ๊ฐœ๋…๊ณผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์†Œ๊ฐœํ–ˆ์–ด์š”.
์ด๋ฒˆ์—๋Š” ์‹ค์ œ๋กœ Azure DevOps๋ฅผ ์‚ฌ์šฉํ•ด์„œ
CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„
๋‹จ๊ณ„๋ณ„๋กœ ์†Œ๊ฐœํ•ด๋ณผ๊ฒŒ์š”!

๋ชฉํ‘œ: GitHub์— ์ปค๋ฐ‹ํ•˜๋ฉด → ์ž๋™์œผ๋กœ ๋นŒ๋“œ → Azure์— ๋ฐฐํฌ๋˜๋Š” ํ๋ฆ„ ๋งŒ๋“ค๊ธฐ!


๐Ÿ’ก CI/CD๋ž€ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ„๋‹จํžˆ?

  • CI (Continuous Integration):
    ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ํ†ตํ•ฉํ•˜๊ณ , ์ž๋™ ํ…Œ์ŠคํŠธ/๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด ํ’ˆ์งˆ ์œ ์ง€
  • CD (Continuous Delivery/Deployment):
    ํ…Œ์ŠคํŠธ๋œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•ด, ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ๊ฐ€๋Šฅ

๐Ÿงฉ Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ํ๋ฆ„

Azure DevOps์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์–ด์š”:

  1. Classic Editor (GUI ๊ธฐ๋ฐ˜)
    • ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹, UI ์นœ์ˆ™ํ•จ
    • ์ดˆ๋ณด์ž์—๊ฒŒ ์ข‹์Œ
  2. YAML ๊ธฐ๋ฐ˜ Pipeline
    • ์ฝ”๋“œ๋กœ ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ (๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ)
    • DevOps ์ˆ™๋ จ์ž์—๊ฒŒ ์ถ”์ฒœ

์ด๋ฒˆ์—๋Š” YAML ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์Šต ๊ตฌ์„ฑํ•ด๋ณผ๊ฒŒ์š”!


๐Ÿ› ๏ธ ์‹ค์Šต: React ์•ฑ์„ Azure์— CI/CD๋กœ ๋ฐฐํฌํ•˜๊ธฐ

๋ชฉํ‘œ: GitHub → ๋นŒ๋“œ → Azure Static Web App ์ž๋™ ๋ฐฐํฌ


1. Azure DevOps ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • https://dev.azure.com ์ ‘์†
  • ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (my-react-cicd-project ๋“ฑ)

2. GitHub ์ €์žฅ์†Œ ์—ฐ๊ฒฐ

  • Pipelines > New pipeline ํด๋ฆญ
  • ์ฝ”๋“œ ์ €์žฅ ์œ„์น˜: GitHub ์„ ํƒ
  • ์ €์žฅ์†Œ ์ธ์ฆ → ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ ํƒ

3. azure-pipelines.yml ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ํŒŒ์ผ ์ž‘์„ฑ:


 

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '18.x'
    displayName: 'Install Node.js'

  - script: |
      npm install
      npm run build
    displayName: 'Install and Build'

  - task: CopyFiles@2
    inputs:
      SourceFolder: 'build'
      Contents: '**'
      TargetFolder: '$(Build.ArtifactStagingDirectory)'

  - task: PublishBuildArtifacts@1
    inputs:
      pathToPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: 'drop'


๐Ÿ’ก ์ด ํŒŒ์ดํ”„๋ผ์ธ์€ main ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์ด ๋ฐœ์ƒํ•  ๋•Œ
React ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ , build ํด๋” ๊ฒฐ๊ณผ๋ฌผ์„ ์•„ํ‹ฐํŒฉํŠธ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


4. ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€ (์˜ˆ: Azure Static Web App, App Service ๋“ฑ)

  • ๋ฐฐํฌ ํƒ€๊ฒŸ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ ธ์š”:
    • Static Web App์ด๋ฉด GitHub Actions ์ถ”์ฒœ (์ž๋™ ์„ค์ • ๊ฐ€๋Šฅ)
    • Azure App Service๋ฉด Release Pipeline ๊ตฌ์„ฑ

๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ App Service ๋ฐฐํฌํ•  ๋•Œ๋Š” Release ๋‹จ๊ณ„์—์„œ
Azure App Service deploy ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์š”.


โœ… ๋ฐฐํฌ๊นŒ์ง€ ์™„์„ฑ๋œ ํ๋ฆ„

  1. GitHub์— ์ปค๋ฐ‹
  2. Azure DevOps Pipeline ์‹คํ–‰
  3. ๋นŒ๋“œ ๋ฐ ์•„ํ‹ฐํŒฉํŠธ ์ƒ์„ฑ
  4. ์ž๋™์œผ๋กœ Azure์— ๋ฐฐํฌ ์™„๋ฃŒ!

๐Ÿ” ํŒ & ์ถ”์ฒœ ์„ค์ •

  • ๋‹จ๊ณ„๋ณ„ ์บ์‹œ ์ถ”๊ฐ€: npm install ์บ์‹ฑ์œผ๋กœ ์†๋„ ํ–ฅ์ƒ
  • ํ™˜๊ฒฝ๋ณ„ ๋ถ„๋ฆฌ: dev, staging, prod ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌ
  • ํ…Œ์ŠคํŠธ ํ†ตํ•ฉ: npm test ์ถ”๊ฐ€ํ•ด์„œ ์ž๋™ ํ…Œ์ŠคํŠธ
  • Slack/Email ์•Œ๋ฆผ ์—ฐ๋™ ๊ฐ€๋Šฅ

๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ

Azure DevOps๋Š” ๊น”๋”ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ CI/CD ํ”Œ๋žซํผ์ด์—์š”.
ํ•œ ๋ฒˆ ์„ค์ •๋งŒ ํ•ด๋‘๋ฉด,
์ฝ”๋“œ ์ปค๋ฐ‹ → ๋นŒ๋“œ → ํ…Œ์ŠคํŠธ → ๋ฐฐํฌ๊นŒ์ง€ ์™„์ „ ์ž๋™ํ™”๋œ
๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.