0Pricing
Azure Fundamentals · 강의

Azure Pipelines로 CI 파이프라인 구축

풀 리퀘스트에서 트리거되고 단위 테스트를 실행하며 빌드 아티팩트를 생성하는 YAML 파이프라인을 정의한 뒤, 포털에서 테스트 결과와 코드 검사율을 검토합니다.

Azure Pipelines로 CI 파이프라인 구축은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

지속적 통합이란 무엇입니까

지속적 통합(CI)은 코드 변경 사항을 공유 브랜치에 자주 병합하고, 병합할 때마다 빌드와 테스트 실행을 자동으로 시작하는 방식입니다. 목표는 통합 실패를 초기에 발견하여 해결하기 어렵고 규모가 큰 문제로 누적되기 전에 처리하는 것입니다. 우수한 CI 파이프라인은 코드를 빌드하고, 단위 테스트를 실행하며, 코드 커버리지를 측정하고, 정적 분석을 수행한 뒤, 몇 분 안에 배포 가능한 아티팩트를 생성합니다. Azure Pipelines는 이를 자동화하는 엔진을 제공합니다.

YAML 파이프라인 구조

Azure Pipelines CI 파이프라인은 저장소 루트에 있는 azure-pipelines.yml 파일에 정의합니다. YAML 파일에는 트리거(언제 실행할지), 풀(사용할 에이전트 유형), 그리고 단계, 작업, 스텝의 계층 구조를 지정합니다. 기본적으로 단계는 순차적으로 실행됩니다. 한 단계 내의 작업은 기본적으로 병렬로 실행됩니다. 작업 내의 스텝은 순차적으로 실행됩니다. 이 구조를 사용하면 파이프라인 실행 흐름을 세밀하게 제어할 수 있습니다.

# azure-pipelines.yml skeleton
trigger:
  branches:
    include:
    - main
    - 'feature/*'
  paths:
    exclude:
    - docs/**
    - '*.md'

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: Release
  nodeVersion: '18.x'

stages:
- stage: CI
  displayName: 'Build and Test'
  jobs:
  - job: Build
    displayName: 'Build Application'
    steps: []

트리거 구성

Azure Pipelines는 여러 트리거 유형을 지원합니다. 브랜치 트리거는 지정된 브랜치에 코드가 푸시될 때 파이프라인을 실행합니다. 풀 리퀘스트 트리거(PR 트리거)는 대상 브랜치에 대한 PR이 생성되거나 업데이트될 때 실행되며, 병합 전에 코드를 검증하는 데 필수적입니다. 예약된 트리거는 정해진 시간에 실행됩니다(예: 매일 밤 빌드). 파이프라인 트리거는 여러 파이프라인을 연결합니다. 자동 실행을 비활성화하고 수동 실행만 허용하려면 trigger: none을 지정하십시오.

# Branch trigger
trigger:
  branches:
    include: [main, develop]

# Pull request trigger
pr:
  branches:
    include: [main]
  autoCancel: true  # Cancel previous runs when PR is updated

# Scheduled trigger (nightly build at 02:00 UTC)
schedules:
- cron: '0 2 * * *'
  displayName: 'Nightly Build'
  branches:
    include: [main]
  always: true  # Run even if no new commits

스텝: 스크립트 및 작업

파이프라인 스텝은 스크립트(bash 또는 PowerShell 명령) 또는 작업(Azure DevOps 마켓플레이스에서 제공하는 미리 빌드된 매개 변수화 단위)입니다. NodeTool@0, DotNetCoreCLI@2, Maven@3과 같은 작업은 일반적인 빌드 작업을 캡슐화합니다. 읽기 쉬운 파이프라인 로그를 위해 모든 스텝에 displayName을 사용하십시오. 각 스텝은 순서대로 실행되며, continueOnError: true를 설정하지 않은 경우 어느 스텝이든 0이 아닌 코드로 종료되면 파이프라인이 실패합니다.

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

- script: npm ci
  displayName: 'Install dependencies (clean install)'

- script: npm run lint
  displayName: 'Run ESLint'

- script: npm run build
  displayName: 'Build production bundle'

- script: npm test -- --ci --coverage
  displayName: 'Run unit tests with coverage'

테스트 결과 게시

테스트를 실행한 후 PublishTestResults 작업을 사용하여 결과를 Azure DevOps에 게시하십시오. Azure Pipelines는 JUnit, NUnit, XUnit 또는 VSTest 결과 파일을 분석하여 파이프라인 실행 화면에 통과/실패 수, 테스트 실행 시간 및 개별 테스트 세부 정보를 표시합니다. 테스트 이력은 시간에 따라 추적되므로 불안정한 테스트와 회귀를 발견할 수 있습니다. 이는 팀 전체에서 코드 품질을 확인하는 데 필수적입니다.

# Example: Node.js project with Jest tests
steps:
- script: npm test -- --ci --reporters=jest-junit
  displayName: 'Run tests with JUnit reporter'
  env:
    JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/test-results'

- task: PublishTestResults@2
  displayName: 'Publish test results'
  inputs:
    testResultsFormat: JUnit
    testResultsFiles: '$(Agent.TempDirectory)/test-results/**/*.xml'
  condition: succeededOrFailed()  # Publish even if tests fail

코드 커버리지 게시

코드 커버리지 보고서를 게시하면 Azure Pipelines가 파이프라인 화면에 커버리지 비율과 추세를 표시합니다. PublishCodeCoverageResults 작업은 Cobertura 또는 JaCoCo 형식의 보고서를 허용합니다. 이를 브랜치 커버리지 게이트와 함께 사용하십시오. 최소 커버리지 임계값을 구성하고 커버리지가 그보다 낮아지면 빌드가 실패하도록 설정할 수 있습니다. 커버리지 추세를 통해 새 코드가 그에 상응하는 테스트 없이 추가되는 시점을 파악할 수 있습니다.

# Jest + coverage
- script: npm test -- --ci --coverage --coverageReporters=cobertura
  displayName: 'Run tests with coverage'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/coverage'

파이프라인 변수 및 변수 그룹

YAML에서 파이프라인, 단계 또는 작업 수준에 정의된 변수에 파이프라인 구성을 저장합니다. 민감한 값(API 키, 암호)에는 비밀 변수를 사용하십시오. 파이프라인 라이브러리(UI) 또는 변수 그룹에서 설정한 다음 YAML에서 참조하면 됩니다. 변수 그룹은 여러 파이프라인에서 공유하는 재사용 가능한 변수 모음입니다. 변수 그룹을 Azure Key Vault에 연결하면 Key Vault의 비밀을 파이프라인 변수로 자동 동기화할 수 있습니다.

# Reference a variable group in a pipeline
variables:
- group: 'Production-Secrets'  # Linked to Azure Key Vault
- name: buildConfiguration
  value: Release

# Use a variable
steps:
- script: echo 'Building $(buildConfiguration) configuration'
- script: az webapp deploy --src-path drop.zip
  env:
    AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)  # From Key Vault
    APP_API_KEY: $(APP_API_KEY)  # Secret, not printed in logs

아티팩트: 빌드 출력 패키징

빌드가 성공한 후 출력을 파이프라인 아티팩트로 패키징하면 이후 단계(예: 배포)에서 이를 사용할 수 있습니다. PublishPipelineArtifact를 사용하여 빌드 에이전트의 파일을 Azure DevOps 아티팩트 저장소에 업로드하십시오. 이후 단계나 작업에서는 DownloadPipelineArtifact를 사용하여 아티팩트를 가져옵니다. 이렇게 하면 빌드 작업과 배포 작업이 분리되므로 서로 다른 에이전트나 단계에서 실행할 수 있습니다.

# Publish build artifact
- task: PublishPipelineArtifact@1
  displayName: 'Publish build artifact'
  inputs:
    targetPath: '$(System.DefaultWorkingDirectory)/dist'
    artifactName: webapp-drop
    publishLocation: pipeline

# In a later deployment job, download the artifact
- task: DownloadPipelineArtifact@2
  inputs:
    artifactName: webapp-drop
    targetPath: '$(Pipeline.Workspace)/drop'

- script: ls -la $(Pipeline.Workspace)/drop

더 빠른 빌드를 위한 병렬 작업

단계 내에 여러 작업을 정의하여 서로 독립적인 작업을 병렬로 실행하십시오. 예를 들어 단위 테스트와 보안 검사를 순차적으로 실행하는 대신 동시에 실행할 수 있습니다. 병렬 작업에는 별도의 빌드 시간이 필요하지만 전체 파이프라인 실행 시간을 크게 줄일 수 있습니다. dependsOn 속성을 사용하면 작업이 시작하기 전에 하나 이상의 다른 작업이 완료될 때까지 기다리도록 설정하여 단계 내에 종속성 그래프를 만들 수 있습니다.

stages:
- stage: CI
  jobs:
  - job: UnitTests
    displayName: 'Run unit tests'
    steps:
    - script: npm test

  - job: LintAndSecurity
    displayName: 'Lint and security scan'
    steps:
    - script: npm run lint
    - script: npm audit --audit-level=high

  - job: BuildArtifact
    displayName: 'Build and publish artifact'
    dependsOn: [UnitTests, LintAndSecurity]
    condition: succeeded('UnitTests') and succeeded('LintAndSecurity')
    steps:
    - script: npm run build

브랜치 정책을 통한 빌드 검증

CI 파이프라인을 Azure Repos의 브랜치 정책에 연결하면 main을 대상으로 하는 풀 리퀘스트에서 빌드 검증 검사로 자동 실행되도록 할 수 있습니다. 파이프라인이 통과할 때까지 병합이 차단됩니다. 여러 검사를 결합할 수 있습니다. CI 파이프라인이 성공해야 하고, 최소 2명의 검토자가 승인해야 하며, 모든 댓글을 해결해야 하고, 연결된 작업 항목이 있어야 합니다. 이렇게 하면 손상된 코드가 기본 브랜치에 병합되는 것을 방지하는 품질 게이트가 만들어집니다.

# Add build validation via CLI
az repos policy build create \
  --blocking true \
  --branch main \
  --branch-match-type exact \
  --build-definition-id <pipeline-id> \
  --display-name 'CI Build Validation' \
  --enabled true \
  --project MyProject \
  --repository-id <repo-id> \
  --queue-on-source-update-only true \
  --manual-queue-only false \
  --valid-duration 720  # Pipeline result expires after 12 hours

파이프라인 실행 결과 읽기

파이프라인 실행이 완료되면 Azure DevOps 포털에서 결과를 검토하십시오. Summary 탭에는 전체 통과/실패 결과와 시간이 표시됩니다. Tests 탭에는 결과별로 필터링할 수 있는 모든 테스트 결과가 나열됩니다. Code Coverage 탭에는 커버리지 비율이 표시되고 커버되지 않은 줄이 강조 표시됩니다. 작업을 클릭하면 스텝별 로그 출력을 볼 수 있습니다. 실패한 파이프라인에서는 실패한 스텝이 빨간색으로 강조 표시되고, 빠른 진단을 위해 전체 오류 출력이 제공됩니다.

# View pipeline run results via CLI
az pipelines runs list \
  --pipeline-ids <pipeline-id> \
  --project MyProject \
  --query '[].{id:id, status:status, result:result, startTime:startTime}' \
  -o table

# View logs from a specific run
az pipelines runs logs list \
  --run-id <run-id> \
  --project MyProject

빠른 확인

이 단원에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보십시오.

단원 요약

이 단원에서는 다음을 배웠습니다. Azure Pipelines YAML은 빌드, 테스트 및 아티팩트 생성을 위한 단계, 작업, 스텝으로 CI 파이프라인을 정의합니다. PR 트리거와 브랜치 정책은 손상된 코드의 병합을 차단하는 품질 게이트를 적용하며, PublishTestResults 및 PublishCodeCoverageResults 작업은 팀 전체에서 테스트 품질을 확인할 수 있게 합니다. 다음 단원에서는 Azure에 지속적 배포를 수행하는 방법을 살펴봅니다.

자주 묻는 질문

“Azure Pipelines로 CI 파이프라인 구축” 강의는 무료인가요?

네 — “Azure Pipelines로 CI 파이프라인 구축” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

“Azure Pipelines로 CI 파이프라인 구축”에서 뭘 배우나요?

풀 리퀘스트에서 트리거되고 단위 테스트를 실행하며 빌드 아티팩트를 생성하는 YAML 파이프라인을 정의한 뒤, 포털에서 테스트 결과와 코드 검사율을 검토합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Azure Pipelines로 CI 파이프라인 구축” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Azure DevOps Services 개요
  2. Azure Pipelines로 CI 파이프라인 구축
  3. Azure로 지속적 배포
  4. Azure에서 GitHub Actions 사용
← Azure Fundamentals(으)로 돌아가기