Azure Pipelines에서 배포 그룹을 사용하여 Azure VM에 배포

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

이전 버전의 Azure Pipelines에서는 여러 서버에 배포해야 하는 애플리케이션에 상당한 양의 계획 및 기본 테넌스가 필요했습니다. Windows PowerShell 원격을 수동으로 사용하도록 설정하고, 필요한 포트를 열고, 각 서버에 배포 에이전트를 설치해야 했습니다. 그런 다음 롤아웃 배포가 필요한 경우 파이프라인을 수동으로 관리해야 했습니다.

위의 모든 과제는 배포 그룹의 도입과 함께 원활하게 진화되었습니다.

배포 그룹은 구성된 그룹의 각 대상 서버에 배포 에이전트를 설치하고 해당 서버에 애플리케이션을 점진적으로 배포하도록 릴리스 파이프라인에 지시합니다. 롤아웃 배포를 위해 여러 파이프라인을 만들 수 있으므로 새로 도입된 기능의 유효성을 검사하기 위해 애플리케이션의 최신 버전을 여러 사용자 그룹에 단계별로 전달할 수 있습니다.

참고 항목

배포 그룹은 클래식 파이프라인에서 사용되는 개념입니다. YAML 파이프라인을 사용하는 경우 환경을 참조 하세요.

이 자습서에서는 다음에 대해 알아봅니다.

  • 템플릿을 사용하여 Azure에 VM 인프라 프로비전
  • Azure Pipelines 배포 그룹 만들기
  • 배포 그룹을 사용하여 솔루션을 배포하는 CI/CD 파이프라인 만들기 및 실행

필수 조건

  • Microsoft Azure 계정.
  • Azure DevOps 조직

Azure DevOps 데모 생성기를 사용하여 Azure DevOps 조직에서 자습서 프로젝트를 프로비전합니다.

Azure 배포 환경 설정

다음 리소스는 ARM 템플릿을 사용하여 Azure에서 프로비전됩니다.

  • IIS가 구성된 6개의 VM(Virtual Machines) 웹 서버
  • SQL Server VM(DB 서버)
  • Azure 네트워크 부하 분산 장치
  1. 리소스 프로비저닝을 시작하려면 아래의 Azure 에 배포 링크를 클릭합니다. 필요한 모든 정보를 제공하고 구매를 선택합니다. 이 자습서에서 다시 사용되지 않으므로 허용된 관리 사용자 이름과 암호의 조합을 사용할 수 있습니다. Env 접두사 이름은 모든 리소스 이름 앞에 접두사를 지정하여 해당 리소스가 전역적으로 고유한 이름으로 생성되도록 합니다. 개인 또는 임의 항목을 사용하려고 하지만 유효성 검사 또는 생성 중에 명명 충돌 오류가 표시되는 경우 이 매개 변수를 변경하고 다시 실행해 보세요.

    Azure에 배포

    Azure 배포 환경을 설정하는 방법을 보여 주는 스크린샷

    참고 항목

    배포를 완료하는 데 약 10-15분이 걸립니다. 명명 충돌 오류가 발생하는 경우 Env 접두사 이름에 제공하는 매개 변수를 변경해 보세요.

  2. 배포가 완료되면 Azure Portal을 사용하여 지정된 리소스 그룹에서 생성된 모든 리소스를 검토할 수 있습니다. 이름에 sqlSrv가 있는 DB 서버 VM을 선택하여 세부 정보를 봅니다.

    리소스 그룹은 Azure에 배포합니다.

  3. DNS 이름을 기록해 둡다. 이 값은 이후 단계에서 필요합니다. 복사 단추를 사용하여 클립보드에 복사할 수 있습니다.

    SQL DNS는 Azure에 배포합니다.

배포 그룹 만들기 및 구성

Azure Pipelines를 사용하면 애플리케이션 배포에 필요한 서버를 쉽게 구성할 수 있습니다. 배포 그룹은 배포 에이전트가 있는 컴퓨터의 컬렉션입니다. 각 컴퓨터는 Azure Pipelines와 상호 작용하여 앱 배포를 조정합니다.

빌드 파이프라인에 필요한 구성 변경은 없으므로 프로젝트가 프로비전된 후 빌드가 자동으로 트리거됩니다. 나중에 릴리스를 큐에 대기하는 경우 이 빌드가 사용됩니다.

  1. 데모 생성기에서 만든 Azure DevOps 프로젝트로 이동합니다.

  2. 파이프라인 아래에서 배포 그룹으로 이동합니다.

    파이프라인 아래의 배포 그룹으로 이동

  3. 배포 그룹 추가를 선택합니다.

  4. 릴리스의 배포 그룹 이름을입력하고 만들기를 선택합니다. 등록 스크립트가 생성됩니다. 직접 작업하는 경우 제공된 스크립트를 사용하여 대상 서버를 등록할 수 있습니다. 그러나 이 자습서에서는 대상 서버가 릴리스 파이프라인의 일부로 자동으로 등록됩니다. 릴리스 정의는 단계를 사용하여 대상 서버에 애플리케이션을 배포합니다. 단계는 태스크가 실행될 런타임 대상을 정의하는 작업의 논리적 그룹화입니다. 각 배포 그룹 단계는 배포 그룹에 정의된 컴퓨터에서 작업을 실행합니다.

  5. 파이프라인 아래에서 릴리스로 이동합니다. 배포 그룹이라는 릴리스 파이프라인을 선택하고 편집을 선택합니다.

  6. 파이프라인에서 배포 작업을 보려면 작업 탭을 선택합니다. 작업은 에이전트 단계, 배포 그룹 단계 및 IIS 배포 단계라는 세 단계로 구성됩니다.

  7. 에이전트 단계를 선택합니다. 이 단계에서 대상 서버는 Azure 리소스 그룹 배포 작업을 사용하여 배포 그룹과 연결됩니다. 실행하려면 에이전트 풀 및 사양을 정의해야 합니다. Azure Pipelines 풀 및 windows-latest 사양을 선택합니다.

    에이전트 단계 구성

  8. Azure 리소스 그룹 배포 작업을 선택합니다. 인프라를 만들기 위해 이전에 사용한 Azure 구독에 대한 서비스 연결을 구성합니다. 연결에 권한을 부여한 후 이 자습서에 대해 만든 리소스 그룹을 선택합니다.

    Azure 서비스 연결 만들기

  9. 이 작업은 Azure에서 호스트되는 가상 머신에서 실행되며 배포 그룹 요구 사항을 완료하기 위해 이 파이프라인에 다시 연결할 수 있어야 합니다. 연결을 보호하려면 PAT(개인용 액세스 토큰)가 필요합니다. 사용자 설정 드롭다운에서 새 탭에서 개인용 액세스 토큰을 엽니다. 대부분의 브라우저는 마우스 오른쪽 단추 클릭 상황에 맞는 메뉴 또는 Ctrl+클릭을 통해 새 탭에서 링크를 열 수 있습니다.

    개인용 액세스 토큰으로 이동

  10. 새 탭에서 새 토큰을 선택합니다.

  11. 이름을 입력하고 전체 액세스 범위를 선택합니다. 만들기를 선택하여 토큰을 만듭니다. 만든 후에는 토큰을 복사하고 브라우저 탭을 닫습니다. Azure Pipeline 편집기로 돌아갑니다.

    개인용 액세스 토큰 만들기

  12. Azure Pipelines 서비스 연결에서 새로 만들기를 선택합니다.

    Azure Pipelines 서비스 연결 추가

  13. Azure DevOps의 현재 인스턴스에 대한 커넥트ion URL을 입력합니다. 이 URL은 다음과 같습니다 https://dev.azure.com/[Your account]. 이전에 만든 개인용 액세스 토큰을 붙여넣고 서비스 연결 이름을 지정합니다. 확인 및 저장을 선택합니다.

    Azure Pipelines 서비스 연결 만들기

    참고 항목

    에이전트를 등록하려면 에이전트 풀에서 관리istrator 역할의 멤버여야 합니다. 에이전트 풀 관리자의 ID는 등록 시에만 필요합니다. 관리자 ID는 에이전트에 유지되지 않으며 에이전트와 Azure Pipelines 간의 후속 통신에 사용되지 않습니다. 에이전트를 등록한 후에는 등록 시에만 필요하므로 개인 액세스 토큰을 갱신할 필요가 없습니다.

  14. 현재 팀 프로젝트이전에 만든 배포 그룹을 선택합니다.

    Azure Pipelines 배포 그룹 구성

  15. 배포 그룹 단계 단계를 선택합니다. 이 단계에서는 배포 그룹에 정의된 컴퓨터에서 작업을 실행합니다. 이 단계는 SQL-Svr-DB 태그에 연결됩니다. 드롭다운에서 배포 그룹을 선택합니다.

    배포 그룹 단계 구성

  16. IIS 배포 단계 단계를 선택합니다. 이 단계에서는 지정된 작업을 사용하여 웹 서버에 애플리케이션을 배포합니다. 이 단계는 WebSrv 태그에 연결됩니다. 드롭다운에서 배포 그룹을 선택합니다.

  17. Azure 네트워크 부하 분산 장치 연결 끊기 작업을 선택합니다. 대상 컴퓨터가 NLB에 연결되면 이 작업은 배포 전에 NLB에서 머신의 연결을 끊고 배포 후 NLB에 다시 연결합니다. Azure 연결, 리소스 그룹 및 부하 분산 장치를 사용하도록 태스크를 구성합니다(하나만 있어야 합니다).

  18. IIS 웹앱 관리 작업을 선택합니다. 이 작업은 작업/단계에 대해 구성된 배포 그룹에 등록된 배포 대상 컴퓨터에서 실행됩니다. 포트 80에서 실행되는 PartsUnlimited라는 이름으로 웹앱 및 애플리케이션 풀을 로컬로 만듭니다.

  19. IIS 웹앱 배포 작업을 선택합니다. 이 작업은 작업/단계에 대해 구성된 배포 그룹에 등록된 배포 대상 컴퓨터에서 실행됩니다. 웹 배포를 사용하여 IIS 서버에 애플리케이션을 배포합니다.

  20. 커넥트 Azure 네트워크 부하 분산 장치 작업을 선택합니다. Azure 연결, 리소스 그룹 및 부하 분산 장치를 사용하도록 태스크를 구성합니다(하나만 있어야 합니다).

  21. 변수 탭을 선택하고 아래와 같이 변수 값을 입력합니다.

    변수 이름 변수 값
    DatabaseName PartsUnlimited-Dev
    DBPassword P2ssw0rd@123
    DBUserName sqladmin
    DefaultConnectionString 데이터 원본=[YOUR_DNS_NAME]; Initial Catalog=PartsUnlimited-Dev; 사용자 ID=sqladmin; Password=P2ssw0rd@123; MultipleActiveResultSets=False; 커넥트ion Timeout=30;
    데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 localhost

    Important

    앞에서 Azure Portal에서 설명한 SQL Server DNS 이름을 Default커넥트ionString 변수로 바꿔야 합니다.

    Default커넥트ionString은 SQL DNS를 바꾼 후 이 문자열과 유사해야 합니다.

    Data Source=cust1sqljo5zndv53idtw.westus2.cloudapp.azure.com;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30;

    최종 변수 목록은 다음과 같습니다.

    파이프라인 변수 구성

    참고 항목

    변수를 비밀로 저장해야 한다는 DefaultConnectionString 오류가 표시될 수 있습니다. 이 경우 변수를 선택하고 해당 값 옆에 나타나는 자물쇠 아이콘을 클릭하여 보호합니다.

릴리스 큐 및 배포 검토

  1. 저장을 선택하고 확인합니다.

  2. 릴리스 만들기를 선택하고 확인합니다. 릴리스를 완료합니다. 그런 다음 배포를 검토할 준비가 된 것입니다.

  3. Azure Portal에서 리소스 그룹의 웹 VM 중 하나를 엽니다. 이름에 있는 websrv 항목을 선택할 수 있습니다.

    웹 VM 찾기

  4. VM의 DNS 를 복사합니다. Azure Load Balancer부하 분산된 집합에 정의된 서버의 정상 인스턴스 간에 들어오는 트래픽을 분산합니다. 따라서 모든 웹 서버 인스턴스의 DNS 는 동일합니다.

    웹앱을 찾습니다기본

  5. VM의 DNS에 대한 새 브라우저 탭을 엽니다. 배포된 앱이 실행 중인지 확인합니다.

    앱 검토

요약

이 자습서에서는 Azure Pipelines 및 배포 그룹을 사용하여 Azure VM 집합에 웹 애플리케이션을 배포했습니다. 이 시나리오에서는 소수의 컴퓨터를 다루었지만 거의 모든 구성을 사용하여 수백 또는 수천 대의 컴퓨터를 지원하도록 프로세스를 쉽게 확장할 수 있습니다.

리소스 정리

이 자습서에서는 Azure에서 Azure DevOps 프로젝트 및 일부 리소스를 만들었습니다. 이러한 리소스를 더 이상 사용하지 않으려면 다음 단계에 따라 삭제합니다.

  1. Azure DevOps 데모 생성기에서 만든 Azure DevOps 프로젝트를 삭제합니다.

  2. 이 자습서에서 만든 모든 Azure 리소스는 만드는 동안 지정된 리소스 그룹에 할당되었습니다. 해당 그룹을 삭제하면 포함된 리소스가 삭제됩니다. 이 삭제는 CLI 또는 포털을 통해 수행할 수 있습니다.

다음 단계