티스토리 뷰
<참조> https://azuredevopslabs.com/labs/vstsextend/deploymentgroups/
개요
이전 버전의 Azure DevOps에서는 애플리케이션을 여러 서버에 배포해야 하는 경우 윈도우즈 PowerShell 원격 구성을 수동으로 실행해야 했고 필요한 포트가 열렸으며 각 서버에 배포 에이전트를 설치해야 했다. 롤아웃 배포가 필요한 경우 파이프라인을 수동으로 관리해야 했다.
위의 모든 과제는 Deployment Group의 도입으로 원활하게 처리되었다.
배포 그룹은 구성된 그룹의 대상 서버 각각에 배포 에이전트를 설치하고 릴리즈 파이프라인에 배포 그룹에 속하는 모든 서버에 애플리케이션을 단계적으로 배포하도록 지시한다. 롤아웃 배포를 위한 다수의 파이프라인을 생성할 수 있으므로 최신 버전의 애플리케이션이 새롭게 도입된 기능을 검증하기 위해 다수의 사용자 그룹에 단계적으로 제공될 수 있다.
이 랩에서 다루는 것
이 랩에서는 배포 그룹의 구성과 Azure DevOps에서 배포 그룹을 사용할 수있는 방법에 대해 자세히 설명한다.
시작하기 전에
1. 실습을 시작하기 전에 시작하기 페이지를 참조한다.
2. Azure DevOps 데모 생성기 링크를 클릭하고 시작하기 페이지의 지침에 따라 프로젝트를 Azure DevOps에 프로 비전한다.
환경 설성하기
ARM 템플릿을 사용하여 Azure에서 다음 리소스가 프로비저닝 된다.
- IIS가 구성된 6 개의 가상 머신 (VM) 웹 서버
- SQL 서버 VM (DB 서버)
- Azure Network Load Balancer
1. Deploy to Azure 버튼을 클릭하여 리소스 프로비저닝을 시작한다. 배포를 완료하는 데 약 10-15 분이 걸린다. 표시된 대로 필요한 모든 정보를 제공한다.
2. 배포가 성공하면 모든 리소스 목록이 Azure Portal에 표시된다.
3. 이름에 sqlSrv가 있는 DB 서버 VM을 클릭하면 세부 정보를 볼 수 있다.
4. DNS 이름을 기록해 둔다. 이 값은 나중에 실습에서 필요하다.
실습 1: 배포 그룹 생성 및 릴리즈 구성
Azure DevOps는 애플리케이션을 배포하기 위한 서버를 더 쉽게 구성할 수 있게 해준다. 배포 그룹은 각각 배포 에이전트가 있는 시스템의 모음이다. 각각의 머신은 Azure DevOps와 상호 작용하여 앱의 배포를 조정한다.
빌드 파이프라인에 필요한 구성 변경이 없기 때문에 프로젝트가 프로비저닝 된 후 빌드가 자동으로 트리거 된다.
1 . pipelines에서 Deployment Groups 옵션을 선택한다. Add a deployment group 버튼을 클릭한다.
2. 선택한 Deployment group name을 제공하고 Create 버튼을 클릭한다. 생성된 등록 스크립트가 표시된다.
대상 서버는 애플리케이션 배포를 위해 배포 그룹에서 사용할 수 있다. 위의 스크립트를 사용하여 대상 서버를 등록할 수 있다. 이 랩에서는 대상 서버를 릴리즈 파이프라인에 자동으로 등록한다. 릴리즈 정의는 Phase를 사용하여 애플리케이션을 대상 서버에 배포한다. Phase(단계)는 태스크가 실행될 런타임 대상을 정의하는 태스크의 논리적 그룹이다. 배포 그룹 태스크는 배포 그룹에 정의된 시스템에서 태스크를 실행한다.
3. Pipelines | Releases로 이동한다. 릴리즈 파이프라인을 선택하고 Edit을 클릭한다.
4. 파이프라인의 태스크 드롭 다운에서 Dev 스테이지를 선택하여 파이프라인의 배포 태스크를 확인한다.
5. 태스크는 Agent phase 아래 Deployment group phase 및 IIS Deployment phase으로 그룹화 된다.
6. Agent Phase: 이 단계에서 대상 서버는 Azure 리소스 그룹 배포 태스크를 사용하여 배포 그룹에 연결된다.
- Azure Resource Group Deployment: 이 태스크는 웹 및 db 서버에 대한 배포 그룹 에이전트의 구성을 자동화 한다.
- 드롭 다운에서 올바른 Azure 구독을 승인하거나 Manage를 클릭하여 새 Azure 구독을 연결한다.
- Azure Portal에서 이전에 만든 Resource Group을 선택한다.
- Azure Pipelines service connection에서 + New를 클릭하여 Azure DevOps 계정의 새 서비스 연결을 만든다.
(서비스 커넥션 생성에 필요한 PAT를 새로 생성한다.)
(생성된 PAT 정보를 사용하여 서비스 커넥션을 생성한다.)
- Azure DevOps 데모 생성기 도구로 프로비저닝된 Team Project를 선택한다.
- Deployment Group을 선택한다.
7. Deployment group phase: 이 배포 그룹 단계는 배포 그룹에 정의된 머신에서 태스크를 실행한다. 이 단계는 db 태그에 연결된다. 드롭 다운에서 Deployment Group을 선택한다.
- Deploy Dacpac: 이 태스크는 dacpac 파일을 DB 서버에 배포하는 데 사용된다.
8. IIS Deployment phase: 이 단계에서 애플리케이션은 아래 태스크를 사용하여 웹 서버에 배포된다. 이 단계는 web 태그에 연결된다. 드롭 다운에서 Deployment Group을 선택한다.
- Azure Network Load Balancer : 대상 머신이 NLB에 연결되면 이 태스크는 배포 전에 NLB에서 머신의 연결을 끊고 배포 후 NLB에 다시 연결한다.
- IIS Web App Manage: 태스크는 태크스/단계에 대해 구성된 배포 그룹에 등록된 배포 대상 머신에서 실행된다. 포트 80에서 실행되는 PartsUnlimited라는 이름으로 웹 애플리케이션 및 애플리케이션 풀을 로컬로 생성한다.
- IIS Web App Deploy: 태스크는 태스크/단계에 대해 구성된 배포 그룹에 등록된 배포 대상 머신에서 실행된다. Web Deploy를 사용하여 IIS 서버에 애플리케이션을 배포한다.
- Maximum number of targets in parallel 필드에서 값을 설정하여 제어할 수 있다. 예를 들어, 이 랩에서는 6개의 웹 서버가 있기 때문에 대상 서버를 50%로 설정하면 빌드 아티팩트가 한 번에 3개의 웹 서버에 병렬로 배포된다.
9. Disconnect Azure Network Load Balancer 태스크를 선택하고 다음 세부 정보를 제공한다.
- Azure Subscription: 드롭 다운에서 연결된 Azure 구독을 선택한다.
- Resource Group: 환경을 프로비저닝하는 동안 생성된 리소스 그룹의 이름이다.
- Load Balancer Name: 드롭 다운에서 이름을 선택한다.
- Action: Disconnect Primary Network Interface로 액션을 설정한다.
10. Connect Azure Network Load Balancer 태스크를 선택하고 다음 세부 정보를 제공한다.
- Azure Subscription: 실습 1에서 만든 ARM 엔드포인트
- Resource Group: 환경을 프로비저닝하는 동안 생성된 리소스 그룹의 이름
- Load Balancer Name: 드롭 다운에서 이름을 선택
- Action: Connect Primary Network Interface에 대한 액션을 설정
11. Variables 탭을 클릭하고 Pipeline Variables 옵션을 선택한다. 아래와 같이 변수 값을 입력한다.
Variable Name | Variable Value |
DatabaseName | PartsUnlimited-Dev |
DBPassword | P2ssw0rd@123 |
DBUserName | sqladmin |
DefaultConnectionString | Data Source=YOUR_DNS_NAME.cloudapp.azure.com;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30; |
ServerName | localhost |
중요 : DefaultConnectionString 변수에서 SQL 서버 DNS 이름 (이전에 Azure Portal에서 기록해 두었던)을 바꿔야한다.
아래와 같이 보일 것이다.
SQL DNS를 대체 한 후 DefaultConnectionString은 아래와 같다.
Data Source=dgsqlw4zktxlvx7ddu.centralindia.cloudapp.azure.com.cloudapp.azure.com;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30;
(다음이 누락 되었다. 두 개의 스테이지 모두에서 Run on agent를 선택하여 Agent pool과 Agent Specification을 다음과 같이 선택하고 Save를 클릭한다.)
12. 변경 사항을 Save 하고 Create release를 클릭한 다음 Create를 클릭한다.
13. 릴리즈가 완료되면 DB 및 웹 서버에서 배포가 완료된다. 릴리즈 요약을 보려면 로그를 클릭한다.
14. Azure Portal에서 웹 애플리케이션 인스턴스의 DNS를 클릭하여 애플리케이션에 액세스한다.
중요 : Azure Load Balancer는 부하 분산된 집합에 정의된 정상 서버 인스턴스간에 들어오는 트래픽을 분산한다. 따라서 모든 웹 서버 인스턴스의 DNS는 동일하다.
15. 배포된 웹 애플리케이션이 시작되고 다양한 기능을 찾아 볼 수 있다.
리소스 정리
실습에서는 여러 가상 머신 및 기타 리소스를 사용하므로 비용이 발생하지 않도록 실습 완료 후 리소스 그룹을 삭제해야 한다.
요약
Azure DevOps 및 Azure를 사용하면 배포 그룹을 사용하여 웹 애플리케이션을 쉽게 컴파일하고 여러 대상 서버에 배포 할 수 있다.
'Azure와 함께 하는 DevOps' 카테고리의 다른 글
57. Jenkins CI를 위한 CD 파이프 라인 구성하기 2편 (0) | 2020.11.09 |
---|---|
56. Jenkins CI를 위한 CD 파이프 라인 구성하기 1편 (0) | 2020.11.02 |
54. Azure 파이프라인으로 머신 러닝 프로젝트용 CI/CD 작동 시키기 (0) | 2020.10.19 |
53. Azure에 Java 기반 톰캣 애플리케이션 배포하기 (0) | 2020.10.11 |
52. Azure 파이프라인을 사용하여 Azure 앱 서비스에 PHP 배포하기 (1) | 2020.10.05 |