이 포스트는 Microsoft Azure를 활용한 DevOps 시리즈입니다.
- 배포 자동화를 위한 서비스 계정 생성 - Service Principal
- 애플리케이션 리소스 생성 자동화 - ARM Templates
- 애플리케이션 빌드 자동화 1 - Versioning
- 애플리케이션 빌드 자동화 2 - DNU Build
- 애플리케이션 테스트 자동화 1 - DNX Test
- 애플리케이션 테스트 자동화 2 - Chutzpah
- 애플리케이션 패키지 자동화 - DNU Publish
- 애플리케이션 배포 자동화 - MSDeploy/WAWSDeploy
- 데이터베이스 이전 자동화 1 - KUDU
- 데이터베이스 이전 자동화 2 - azure-functions
이전 포스트에서는 애플리케이션 배포를 위한 패키지 퍼블리싱 자동화에 대해 알아보았다. 이 단계까지 왔다면 이제 Continuous Delivery 까지는 완성된 것인데, 이 패키지 배포 마저도 자동화 시킨다면 이제 Continuous Deployment가 된다. 이 포스트에서는 바로 이 Continuous Deployment를 위한 배포 자동화에 대해 알아보도록 한다.
Azure 웹 앱에 자동 배포를 하기 위한 방법은 몇가지가 있다.
- 깃헙이나 빗버킷 등의 리포지토리에 웹훅을 연결시켜 푸시가 생기면 자동으로 배포하는 방법
- Azure 웹 앱에 연결된 KUDU의 git 리포지토리에 직접 푸시하여 자동으로 배포하는 방법
MSDeploy
를 이용하여 배포하는 방법
이 외에도 몇가지가 더 있지만 이 포스트에서는 MSDeploy
를 이용하는 방법에 대해 알아보도록 한다. MSDeploy
를 이용하게 되면 보통 아래와 같은 커맨드를 이용한다.
"%PROGRAMFILES%\IIS\Microsoft Web Deploy V3\msdeploy.exe" | |
-verb:sync | |
-source:contentPath="c:\Temp\publish\MyWebApp" | |
-dest: | |
contentPath='MyAzureWebApp', | |
ComputerName="https://my-azure-webapp.scm.azurewebsites.windows.net:443/msdeploy.axd?site=my-azure-webapp", | |
UserName='$my-azure-webapp', | |
Password='encrypted-password', | |
AuthType='Basic' |
그런데, 이 커맨드에 쓰이는 여러 값들은 모두 Azure 웹 앱의 퍼블리시 설정 파일을 다운로드 받아 보면 알 수 있는 값들이다. 파일을 다운로드 받은 후, 그 안의 XML 안에서 위의 값들을 모두 찾아내야 하는데, 여간 번거로운 것이 아니다. 이미 이런 번거로움을 느낀 한 MS 직원이 WAWSDeploy라는 이름의 배포 도구를 만들었다. 이 도구를 이용하면 퍼블리시 설정 파일을 직접 이용하여 배포를 할 수 있다.
우선 서비스 계정을 이용하여 Auzre에 로그인한다. 그리고 난 후 아래 파워셸 스크립트를 실행시킨다.
$ResourceGroupName = "my-resource-group" | |
$ResourceName = "my-azure-webapp" | |
$PublishPath = "C:\Temp\publish" | |
$AppName = "MyWebApp" | |
# Downloads the applicatioin publish profile. | |
$pubSettings = "$ResourceName.PublishSettings" | |
Get-AzureRmWebAppPublishingProfile ` | |
-ResourceGroupName $ResourceGroupName ` | |
-Name $ResourceName ` | |
-OutputFile "$PublishPath\$pubSettings" ` | |
-Format WebDeploy | |
# Deployes the app to Azure Website. | |
# Assumes that WAWSDeploy is installed at C:\WAWSDeploy. | |
C:\WAWSDeploy\WAWSDeploy.exe "$PublishPath\$AppName" "$PublishPath\$pubSettings" /t "D:\home\site" /d |
배포할 애플리케이션 패키지는 C:\Temp\publish\MyWebApp
에 준비되어 있다고 가정한다. 먼저 퍼블리시 설정 파일을 Get-AzureRmWebAppPublishingProfile
커맨들릿을 이용해서 다운로드 받는다. 그리고 WAWSDeploy
를 이용하여 Azure 웹 앱으로 배포한다. 이 때, /t "D:\home\site"
옵션을 꼭 주어야 하는데, 이는 Azure 웹 앱의 경로로써, 바뀌지 않는다. 마지막으로 /d
옵션을 주면 기존에 배포되었던 모든 파일들을 우선 삭제한 후 진행한다. 추가로 /v
옵션을 붙이면 배포 과정을 좀 더 자세히 확인할 수 있다.
이렇게 해서 ASP.NET Core 애플리케이션의 배포 자동화까지 진행해 보았다. 여기까지 모두 문제 없이 진행했다면, 애플리케이션 리소스 설치부터, 빌드, 테스트, 패키징을 거쳐 배포까지 모든 절차를 자동화할 수 있다고 볼 수 있을 것이다. 다음 포스트에서는 추가로 애플리케이션 배포 후 필요한 데이터베이스 마이그레이션 관련한 자동화까지 다루어 보도록 하겠다.