Azure Pipelines를 사용하는 CI/CD 기준 아키텍처

이 문서에서는 Azure의 준비 및 프로덕션 환경에 애플리케이션 변경 내용을 배포하기 위한 고급 DevOps 워크플로에 대해 설명합니다. 이 솔루션은 Azure Pipelines를 사용한 CI/CD(연속 통합/지속적인 배포) 방법을 사용합니다.

Important

이 문서에서는 Azure Pipelines를 사용하는 일반적인 CI/CD 아키텍처에 대해 설명합니다. Azure 앱 Services, Virtual Machines 및 Azure Power Platform과 같은 다양한 환경에 배포하는 구체적인 내용은 다루지 않습니다. 배포 플랫폼 관련 내용은 별도의 문서에서 다룹니다.

아키텍처

Azure Pipelines를 사용하는 CI/CD 파이프라인의 아키텍처 다이어그램.

이 아키텍처의 Visio 파일을 다운로드합니다.

참고 항목

이 문서에서는 애플리케이션 변경에 대한 CI/CD를 다루지만 Azure Pipelines를 사용하여 IaC(Infrastructure as Code) 변경에 대한 CI/CD 파이프라인을 빌드할 수도 있습니다.

데이터 흐름

시나리오를 통한 데이터 흐름은 다음과 같습니다.

  1. PR 파이프라인 - Azure Repos Git에 대한 PR(끌어오기 요청)이 PR 파이프라인을 트리거합니다. 이 파이프라인은 빠른 품질 검사 실행합니다. 이러한 검사 다음을 포함해야 합니다.

    • 종속성 관리 시스템에서 종속성을 끌어와야 하는 코드를 빌드합니다.
    • 정적 코드 분석, 린팅 및 보안 검색과 같은 코드를 분석하는 도구 사용
    • 단위 테스트

    검사 실패하면 파이프라인 실행이 종료되고 개발자는 필요한 변경을 수행해야 합니다. 모든 검사 통과하면 파이프라인에 PR 검토가 필요합니다. PR 검토에 실패하면 파이프라인이 종료되고 개발자가 필요한 변경 작업을 수행해야 합니다. 모든 검사 및 PR 검토가 통과하면 PR이 성공적으로 병합됩니다.

  2. CI 파이프라인 - Azure Repos Git에 대한 병합은 CI 파이프라인을 트리거합니다. 이 파이프라인은 몇 가지 중요한 추가가 포함된 PR 파이프라인과 동일한 검사 실행합니다. CI 파이프라인은 통합 테스트를 실행합니다. 이러한 통합 테스트는 빌드 아티팩트가 아직 만들어지지 않았기 때문에 솔루션의 배포가 필요하지 않습니다. 통합 테스트에 비밀이 필요한 경우 파이프라인은 Azure Key Vault에서 해당 비밀을 가져옵니다. 검사 실패하면 파이프라인이 종료되고 개발자가 필요한 변경을 수행해야 합니다. 이 파이프라인을 성공적으로 실행한 결과는 빌드 아티팩트를 만들고 게시한 결과입니다.

  3. CD 파이프라인 트리거 - 아티팩트 게시는 CD 파이프라인을 트리거합니다.

  4. 스테이징 에 대한 CD 릴리스 - CD 파이프라인은 CI 파이프라인에서 만든 빌드 아티팩트를 다운로드하고 솔루션을 스테이징 환경에 배포합니다. 그런 다음, 파이프라인은 스테이징 환경에 대해 승인 테스트를 실행하여 배포의 유효성을 검사합니다. 승인 테스트가 실패하면 파이프라인이 종료되고 개발자는 필요한 변경을 수행해야 합니다. 테스트가 성공 하면 사용자 또는 그룹이 배포의 유효성을 검사하고 파이프라인을 다시 시작하도록 요구하는 수동 유효성 검사 작업을 구현할 수 있습니다.

  5. 프로덕션 에 대한 CD 릴리스 - 수동 개입이 다시 시작되거나 수동 개입이 구현되지 않은 경우 파이프라인은 솔루션을 프로덕션으로 릴리스합니다. 파이프라인은 프로덕션에서 스모크 테스트를 실행하여 릴리스가 예상대로 작동하는지 확인해야 합니다. 수동 개입 단계로 인해 취소되거나, 릴리스가 실패하거나, 스모크 테스트가 실패하고, 릴리스가 롤백되고, 파이프라인이 종료되고, 개발자가 필요한 변경을 수행해야 합니다.

  6. 모니터링 - Azure Monitor는 운영자가 상태, 성능 및 사용량 현황 데이터를 분석할 수 있도록 로그 및 메트릭과 같은 관찰성 데이터를 수집합니다. Application Insights는 추적과 같은 모든 애플리케이션 관련 모니터링 데이터를 수집합니다. Azure Log Analytics는 이러한 모든 데이터를 저장하기 위해 사용됩니다.

구성 요소

  • Azure Repos Git 리포지토리는 버전 제어를 제공하는 코드 리포지토리 및 협업 프로젝트를 위한 플랫폼으로 작동합니다.

  • Azure Pipelines는 애플리케이션 및 인프라 코드를 빌드, 테스트, 패키지 및 릴리스하는 방법을 제공합니다. 이 예제에는 다음과 같은 책임이 있는 세 개의 고유한 파이프라인이 있습니다.

    • PR 파이프라인은 린팅, 빌드 및 단위 테스트를 통해 PR 병합을 허용하기 전에 코드의 유효성을 검사합니다.
    • CI 파이프라인은 코드가 병합된 후 실행됩니다. 이 파이프라인은 PR 파이프라인과 동일한 유효성 검사를 수행하지만 통합 테스트를 추가하고 모든 것이 성공하면 빌드 아티팩트를 게시합니다.
    • CD 파이프라인은 빌드 아티팩트를 배포하고, 승인 테스트를 실행하고, 프로덕션으로 릴리스합니다.
  • Azure Artifact Feeds를 사용하면 Maven, npm 및 NuGet과 같은 소프트웨어 패키지를 관리하고 공유할 수 있습니다. 아티팩트 피드를 사용하면 패키지 버전 관리, 승격 및 사용 중지를 포함하여 패키지의 수명 주기를 관리할 수 있습니다. 이렇게 하면 팀에서 가장 안전한 최신 버전의 패키지를 사용하고 있는지 확인할 수 있습니다.

  • Key Vault는 비밀, 암호화 키 및 인증서를 포함하여 솔루션에 대한 보안 데이터를 관리하는 방법을 제공합니다. 이 아키텍처에서는 애플리케이션 비밀을 저장하는 데 사용됩니다. 이러한 비밀은 파이프라인을 통해 액세스됩니다. 비밀은 Key Vault 작업을 사용하거나 Key Vault의 비밀을 연결하여 Azure Pipelines에서 액세스할 수 있습니다.

  • Monitor는 Azure 서비스에 대해 메트릭 및 로그, 애플리케이션 원격 분석, 플랫폼 메트릭을 수집하고 저장하는 가시성 리소스입니다. 이 데이터를 사용하여 애플리케이션을 모니터링하고, 경고 및 대시보드를 설정하며, 오류의 근본 원인 분석을 수행합니다.

  • Application Insights 는 웹 애플리케이션의 성능 및 사용에 대한 실시간 인사이트를 제공하는 모니터링 서비스입니다.

  • Log Analytics 작업 영역 은 Azure 리소스, 애플리케이션 및 서비스를 포함하여 여러 원본에서 데이터를 저장, 쿼리 및 분석할 수 있는 중앙 위치를 제공합니다.

대안

이 문서에서는 Azure Pipelines에 중점을 두고 있지만 다음과 같은 대안을 고려할 수 있습니다.

  • Azure DevOps Server(이전 명칭은 Team Foundation Server)를 온-프레미스 대체 도구로 사용할 수 있습니다.

  • Jenkins는 빌드 및 배포를 자동화하는 데 사용되는 오픈 소스 도구입니다.

  • GitHub Actions를 사용하면 GitHub에서 직접 CI/CD 워크플로를 자동화할 수 있습니다.

  • GitHub 리포지토리를 코드 리포지토리로 대체할 수 있습니다. Azure Pipelines는 GitHub 리포지토리와 원활하게 통합됩니다.

이 문서에서는 Azure Pipelines를 사용하는 일반적인 CI/CD 사례에 중점을 둡니다. 다음은 배포를 고려할 수 있는 몇 가지 컴퓨팅 환경입니다.

  • App Services 는 웹 애플리케이션, REST API 및 모바일 백 엔드를 호스팅하기 위한 HTTP 기반 서비스입니다. 원하는 언어로 개발할 수 있으며 Windows 및 Linux 기반 환경 모두에서 애플리케이션을 쉽게 실행하고 크기 조정할 수 있습니다. Web Apps는 스테이징 및 프로덕션과 같은 배포 슬롯을 지원합니다. 애플리케이션을 스테이징 슬롯에 배포하고 이를 프로덕션 슬롯에 릴리스할 수 있습니다.

  • Azure Virtual Machines는 높은 수준의 제어가 필요하거나 Web Apps에서 가능하지 않은 OS 구성 요소 및 서비스를 사용하는 워크로드(예: Windows GAC 또는 COM)를 처리합니다.

  • Azure Power Platform 은 사용자가 인프라 또는 기술 전문 지식 없이도 애플리케이션을 빌드, 배포 및 관리할 수 있는 클라우드 서비스 모음입니다.

  • Azure Functions는 애플리케이션을 빌드하는 데 사용할 수 있는 서버리스 컴퓨팅 플랫폼입니다. Functions를 사용하면 트리거 및 바인딩을 사용하여 서비스를 통합할 수 있습니다. 또한 Functions는 스테이징 및 프로덕션과 같은 배포 슬롯을 지원합니다. 애플리케이션을 스테이징 슬롯에 배포하고 이를 프로덕션 슬롯에 릴리스할 수 있습니다.

  • 는 Azure의 관리형 Kubernetes 클러스터입니다. Kubernetes는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다.

  • Azure Container Apps를 사용하면 서버리스 플랫폼에서 컨테이너화된 애플리케이션을 실행할 수 있습니다.

시나리오 정보

검증된 CI 및 CD 사례를 사용하여 애플리케이션 또는 인프라 변경 내용을 배포하면 다음을 비롯한 다양한 이점이 제공됩니다.

  • 짧아진 릴리스 주기 - 자동화된 CI/CD 프로세스를 사용하면 수동 방법보다 더 빠르게 배포할 수 있습니다. 많은 조직이 하루에 여러 번 배포합니다.
  • 향상된 코드 품질 - 린팅 및 단위 테스트와 같은 CI 파이프라인의 품질 게이트는 더 높은 품질 코드를 생성합니다.
  • 릴리스 위험 감소 - 적절한 CI/CD 방법은 새 기능을 릴리스할 위험을 크게 줄입니다. 릴리스 전에 배포를 테스트할 수 있습니다.
  • 생산성 향상 - 자동화된 CI/CD는 개발자가 새로운 기능에 집중할 수 있도록 수동 통합 및 배포 작업을 수행할 수 없도록 합니다.
  • 롤백 사용 - 적절한 CI/CD 방법이 릴리스되는 버그 또는 회귀 수를 줄이기는 하지만 여전히 발생합니다. CI/CD는 이전 릴리스로 자동 롤백을 사용하도록 설정할 수 있습니다.

잠재적인 사용 사례

다음을 위해 Azure Pipelines 및 CI/CD 프로세스를 고려합니다.

  • 애플리케이션 개발 및 배포 수명 주기 가속화
  • 자동화된 빌드 및 릴리스 프로세스에 대한 품질 및 일관성 구축.
  • 애플리케이션 안정성 및 가동 시간 향상

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

운영 우수성

  • 인프라를 정의하고 파이프라인에 배포하기 위해 IaC(Infrastructure as Code) 를 구현하는 것이 좋습니다.

  • VSTS 마켓플레이스에서 사용할 수 있는 토큰화 작업하나를 사용하는 것이 좋습니다. 컨텍스트에서 중요한 정보(예: API 키, 암호 또는 기타 비밀)가 배포 또는 구성 중에 토큰 또는 자리 표시자로 대체되는 프로세스를 참조하는 경우가 많습니다.

  • 릴리스 정의에서 릴리스 변수를 사용하여 환경의 구성 변경을 추진합니다. 릴리스 변수의 범위는 전체 릴리스 또는 지정된 환경으로 지정할 수 있습니다. 변수를 비밀 정보에 사용하는 경우 자물쇠 아이콘을 선택해야 합니다.

  • 보안 가상 네트워크에서 실행되는 리소스에 배포하는 경우 자체 호스팅 에이전트를 사용하는 것이 좋습니다. 많은 양의 빌드를 실행하는 경우 자체 호스팅 에이전트를 고려할 수도 있습니다. 빌드 볼륨이 많은 경우 자체 호스팅 에이전트를 사용하여 비용 효율적인 방식으로 빌드 속도를 높일 수 있습니다.

  • 릴리스 파이프라인에서 최대한 빨리 Application Insights 및 다른 모니터링 도구를 사용하는 것이 좋습니다. 많은 조직이 프로덕션 환경 모니터링만 시작합니다. 다른 환경을 모니터링하면 개발 프로세스 초기에 버그를 식별하고 프로덕션 환경의 문제를 방지할 수 있습니다.

  • 프로덕션에 별도의 모니터링 리소스를 사용하는 것이 좋습니다.

  • 클래식 인터페이스 대신 YAML 파이프라인을 사용하는 것이 좋습니다. YAML 파이프라인은 다른 코드처럼 취급될 수 있습니다. 예를 들어 YAML 파이프라인을 소스 제어에 체크 인하고 버전을 지정할 수 있습니다.

  • YAML 템플릿을 사용하여 파이프라인 재사용을 촉진하고 간소화하는 것이 좋습니다. 예를 들어 PR 파이프라인과 CI 파이프라인은 비슷합니다. 두 파이프라인 모두에 매개 변수화된 단일 템플릿을 사용할 수 있습니다.

  • 수동 사용자 수용 테스트, 성능 및 부하 테스트 및 롤백과 같은 활동을 지원하기 위해 스테이징 및 프로덕션 이외의 환경을 만드는 것이 좋습니다.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

Azure DevOps 비용은 필요한 동시 빌드/릴리스 수, 테스트 사용자 수 등의 기타 요소와 조직 내에서 액세스 권한이 필요한 사용자 수에 따라 달라집니다. 자세한 내용은 Azure DevOps 가격 책정을 참조하세요.

가격 책정 계산기는 사용자 수 20명인 Azure DevOps를 실행하기 위한 예상 수치를 제공합니다.

Azure DevOps는 사용자당 월별 요금이 청구됩니다. 추가 테스트 사용자 또는 사용자 기본 라이선스 외에 필요한 동시 파이프라인에 따라 추가 요금이 발생할 수 있습니다.

보안

  • Microsoft 호스팅 에이전트를 사용할지 또는 자체 호스팅 에이전트를 사용할지 선택할 때 Microsoft 호스팅 에이전트를 사용할 경우의 보안 이점을 고려합니다.

  • 환경에 대한 모든 변경 내용이 파이프라인을 통해 수행되는지 확인합니다. 최소 권한 원칙에 따라 RBAC(역할 기반 액세스 제어)를 구현하여 사용자가 환경에 액세스하지 못하도록 합니다.

  • Azure Pipelines의 단계를 통합하여 종속성을 추적하고, 라이선스를 관리하고, 취약성을 검색하고, 종속성을 최신 상태로 유지하는 것이 좋습니다.

다음 단계

다음 리소스를 검토하여 CI/CD 및 Azure DevOps에 대해 자세히 알아보세요.