개발과 운영의 경계를 허물고, 빠른 배포와 높은 품질의 소프트웨어 제공을 위해 많은 조직들이 DevOps를 도입하고 있습니다. 그 중심에 있는 것이 바로 CI/CD 파이프라인이며, 이를 손쉽게 구현할 수 있는 강력한 도구가 바로 Azure DevOps입니다.
이 글에서는 Azure DevOps를 이용한 CI/CD 파이프라인 구축법을 중심으로, 실제 환경에서 코드 작성부터 빌드, 배포까지 전 과정을 자동화하는 방법을 차근차근 설명드릴게요.
Azure DevOps란?
Azure DevOps는 Microsoft가 제공하는 클라우드 기반 DevOps 플랫폼으로, 소프트웨어 개발의 전체 주기를 통합적으로 관리할 수 있습니다. Azure DevOps는 다음과 같은 핵심 기능을 제공합니다:
- Azure Repos: Git 기반의 소스코드 버전 관리
- Azure Pipelines: CI/CD 자동화 파이프라인 구현
- Azure Boards: 애자일 기반 작업 관리 및 추적
- Azure Test Plans: 테스트 케이스 및 품질 보증
- Azure Artifacts: 패키지 저장소 및 배포
이 중에서도 우리가 주목할 것은 바로 Azure Pipelines로, 이를 통해 코드 변경 시 자동으로 **빌드(Build)**하고 **배포(Deploy)**하는 완전한 CI/CD 환경을 구현할 수 있습니다.
CI/CD란 무엇인가?
Azure DevOps를 이용한 CI/CD 파이프라인 구축법을 이해하기 위해서는 먼저 CI/CD의 개념을 짚고 넘어가야 합니다.
- CI (Continuous Integration, 지속적 통합): 개발자가 변경한 코드를 지속적으로 메인 브랜치에 통합하고 자동으로 빌드 및 테스트하는 과정입니다.
- CD (Continuous Delivery 또는 Deployment, 지속적 제공/배포): 통합된 코드를 자동으로 스테이징 또는 운영 환경에 배포하는 과정입니다.
이 과정을 자동화하면, 인적 실수 감소, 배포 속도 향상, 피드백 루프 단축, 품질 개선이라는 효과를 얻을 수 있습니다.
Azure DevOps로 CI/CD 파이프라인 구축하기 – 전체 흐름
Azure DevOps에서 CI/CD 파이프라인을 구축하는 전체 과정은 다음과 같습니다:
- 프로젝트 생성 및 Git 저장소 연결
- YAML 기반 Pipeline 파일 작성
- CI 파이프라인 (빌드 단계) 설정
- CD 파이프라인 (배포 단계) 설정
- 자동 트리거 및 테스트 연동
- 모니터링 및 롤백 전략 수립
아래에서 각 단계별로 자세히 살펴볼게요.
1. 프로젝트 생성 및 Git 저장소 연결
Azure DevOps Portal(https://dev.azure.com)에 로그인한 뒤, 다음 순서를 따릅니다:
- 조직 생성: 회사나 팀 단위로 조직 생성
- 프로젝트 생성: 프로젝트 이름 및 가시성 설정
- Repos 활성화: Git 저장소 생성 또는 외부 GitHub 저장소와 연동
Tip: GitHub 저장소를 사용하면 Actions와도 연동 가능하니, 멀티 플랫폼 연동도 고려해 보세요.
2. YAML 기반 Pipeline 파일 작성
Azure Pipelines는 YAML 파일 기반으로 작동하며, .azure-pipelines.yml
파일을 프로젝트 루트에 추가합니다.
예시: Node.js 애플리케이션용 기본 Pipeline
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '16.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build
displayName: 'Build Project'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'dist'
ArtifactName: 'drop'
이 파일은 main
브랜치에 코드 변경이 생기면 자동으로 빌드하고, 결과물을 아티팩트로 저장합니다.
3. CI 파이프라인 설정 – 자동 빌드와 테스트
CI 단계에서는 다음과 같은 작업을 설정합니다:
- 코드 검사 (Lint, Format)
- 단위 테스트 실행
- 코드 커버리지 측정
- 빌드 및 패키징
- 아티팩트 저장
Azure Pipelines에서는 다양한 빌드 도구(예: Maven, Gradle, MSBuild), 테스트 프레임워크와 통합이 가능하며, 테스트 실패 시 빌드를 자동 중단할 수 있습니다.
4. CD 파이프라인 설정 – 자동 배포
Azure DevOps의 Release Pipeline 또는 YAML 기반 배포 파이프라인을 통해 CD 단계를 설정할 수 있습니다. 아래는 Azure Web App에 자동 배포하는 예시입니다:
- task: AzureWebApp@1
inputs:
azureSubscription: '<구독 이름>'
appName: '<앱 이름>'
package: '$(Pipeline.Workspace)/drop/*.zip'
배포 대상은 다음과 같이 다양합니다:
- Azure Web App
- Azure Functions
- AKS (Kubernetes)
- VM 또는 On-prem 서버
- AWS, GCP 등 외부 클라우드
또한 환경별로 승인 프로세스를 추가하여, 운영 환경 배포 시 수동 승인 단계를 넣는 것도 가능합니다.
5. 자동 트리거 및 알림 설정
- Push 트리거: 특정 브랜치에 코드 push 시 자동 실행
- PR 트리거: Pull Request 발생 시 테스트 수행
- 스케줄 빌드: 정기적으로 빌드 수행 (예: 매일 자정)
또한 Slack, Teams, Email을 통한 빌드/배포 결과 알림도 설정할 수 있습니다. 실시간으로 결과를 모니터링할 수 있어 빠른 대응이 가능합니다.
6. 모니터링, 롤백 전략, 보안 관리
Azure DevOps는 다음과 같은 운영 기능을 제공합니다:
- Logs & Artifacts View: 각 단계별 로그 상세 확인
- Approval Gates: 특정 환경 배포 전 승인 요청
- KeyVault 연동: 비밀 값 및 인증 정보 보안 관리
- 롤백 스크립트: 실패 시 이전 버전 자동 복구
CI/CD 파이프라인은 자동화뿐 아니라, 안정성과 신뢰성 확보가 핵심이므로 이러한 기능들을 적극 활용해야 합니다.
Q&A
Q. Azure DevOps는 무료로 사용할 수 있나요?
네. Azure DevOps는 기본적으로 무료 요금제가 제공되며, 다음과 같은 조건에서 비용 없이 사용할 수 있습니다:
- 최대 5명의 사용자까지는 무료
- CI/CD Pipeline은 월 1,800분의 Microsoft-hosted agent 시간 무료
- Self-hosted agent는 무제한 사용 가능
따라서 소규모 팀이나 스타트업, 개인 프로젝트는 별도의 비용 없이도 충분히 Azure DevOps를 활용할 수 있습니다.
Q. GitHub Actions와 Azure DevOps 중 어떤 게 더 좋을까요?
두 플랫폼 모두 CI/CD 기능을 제공하지만, 목적에 따라 다릅니다.
- GitHub Actions는 GitHub에 최적화된 워크플로 기반이며, 간편한 설정과 빠른 적용이 강점입니다.
- Azure DevOps는 대규모 프로젝트와 복잡한 릴리즈 프로세스, 다양한 외부 시스템과의 연동에 강점을 가집니다.
GitHub에 코드가 있고 단순 파이프라인이면 Actions가 적합하고, 엔터프라이즈 환경에서는 Azure DevOps가 더 유리합니다.
Q. CI/CD 도입 시 가장 주의해야 할 점은 무엇인가요?
CI/CD는 자동화의 편리함을 주지만, 다음과 같은 점은 반드시 주의해야 합니다:
- 자동화 전에 수동 배포 절차 정확히 문서화하기
- 비밀 정보는 KeyVault 등으로 관리, 환경 변수에 직접 입력 금지
- 테스트 자동화는 필수, 테스트 없는 배포는 오히려 리스크 증가
- 롤백 플랜 구축: 배포 실패 시 복구 시나리오 사전에 마련
이러한 전략이 없으면 오히려 자동화된 혼란을 초래할 수 있으므로 신중한 설계가 필요합니다.