다음을 통해 공유


AzureWebApp@1 - Azure Web App v1 작업

이 작업은 Linux 또는 Windows용 Azure Web App을 배포합니다.

통사론

# Azure Web App v1
# Deploy an Azure Web App for Linux or Windows.
- task: AzureWebApp@1
  inputs:
    azureSubscription: # string. Required. Azure subscription. 
    appType: # 'webApp' | 'webAppLinux'. Required. App type. 
    appName: # string. Required. App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #customDeployFolder: # string. Optional. Use when package EndsWith .war. Custom Deploy Folder. 
    #runtimeStack: # string. Optional. Use when appType = webAppLinux. Runtime stack. 
    #startUpCommand: # string. Optional. Use when appType = webAppLinux. Startup command. 
  # Application and Configuration Settings
    #customWebConfig: # string. Optional. Use when appType != webAppLinux && package NotEndsWith .war. Generate web.config parameters for Python, Node.js, Go and Java apps. 
    #appSettings: # string. App settings. 
    #configurationStrings: # string. Configuration settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Web App v1
# Deploy an Azure Web App for Linux or Windows.
- task: AzureWebApp@1
  inputs:
    azureSubscription: # string. Required. Azure subscription. 
    appType: # 'webApp' | 'webAppLinux'. Required. App type. 
    appName: # string. Required. App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # string. Optional. Use when appType = webAppLinux. Runtime stack. 
    #startUpCommand: # string. Optional. Use when appType = webAppLinux. Startup command. 
  # Application and Configuration Settings
    #customWebConfig: # string. Optional. Use when appType != webAppLinux && package NotEndsWith .war. Generate web.config parameters for Python, Node.js, Go and Java apps. 
    #appSettings: # string. App settings. 
    #configurationStrings: # string. Configuration settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar. Deployment method. Default: auto.

입력

Azure 구독
string. 필수.

배포에 대한 Azure Resource Manager 구독 연결 지정합니다.


appType - 앱 유형
string. 필수. 허용되는 값: webApp(Windows의 웹앱), webAppLinux(Linux의 웹앱).

Azure Web App 유형을 지정합니다.


앱 이름
string. 필수.

기존 Azure App Service의 이름을 지정합니다. 선택한 앱 유형을 기반으로 하는 앱 서비스만 나열됩니다.


슬롯 또는 App Service Environment 배포
boolean. 선택적. appType != ""때 사용합니다. 기본값: false.

기존 배포 슬롯 또는 Azure App Service Environment에 배포하는 옵션을 선택합니다.
두 대상 모두 작업에 리소스 그룹 이름이 필요합니다.
배포 대상이 슬롯인 경우 기본값은 프로덕션 슬롯입니다. 다른 기존 슬롯 이름도 제공할 수 있습니다.
배포 대상이 Azure App Service Environment인 경우 슬롯 이름을 '프로덕션'으로 두고 리소스 그룹 이름을 지정합니다.


resourceGroupName - 리소스 그룹
string. deployToSlotOrASE = true때 필요합니다.

배포 대상이 배포 슬롯 또는 Azure App Service Environment인 경우 리소스 그룹 이름이 필요합니다.
위에 표시된 Azure App Service를 포함하는 Azure 리소스 그룹을 지정합니다.


slotName - 슬롯
string. deployToSlotOrASE = true때 필요합니다. 기본값: production.

프로덕션 슬롯을 제외한 기존 슬롯을 지정합니다.


패키지 또는 폴더
string. 필수. 기본값: $(System.DefaultWorkingDirectory)/**/*.zip.

MSBuild, 압축된 zip 파일 또는 전쟁 파일에서 생성된 App Service 콘텐츠가 포함된 패키지 또는 폴더의 파일 경로입니다. 변수(빌드 | 릴리스) 및 와일드카드가 지원됩니다. 예를 들어 $(System.DefaultWorkingDirectory)/**/*.zip 또는 $(System.DefaultWorkingDirectory)/**/*.war.


사용자 지정 배포 폴더
string. 선택적. package EndsWith .war때 사용합니다.

배포할 사용자 지정 폴더 이름을 지정합니다.
필드가 비어 있으면 패키지가 <appname>.azurewebsites.net/<warpackagename>배포됩니다.
ROOT를 입력하면 패키지가 <appname>.azurewebsited.net배포됩니다.
다른 모든 인스턴스에서는 <appname>.azurewebsited.net/<customWarName>배포됩니다.


런타임 스택
string. 선택적. appType = webAppLinux때 사용합니다.

Linux의 웹앱은 애플리케이션을 게시하는 두 가지 옵션인 사용자 지정 이미지 배포(컨테이너용 웹앱) 및 기본 제공 플랫폼 이미지를 사용한 앱 배포(Linux의 웹앱)를 제공합니다. 이 매개 변수는 Linux Web App 작업에서 앱 유형으로 선택된 경우에만 사용할 수 있습니다.


startUpCommand - 시작 명령
string. 선택적. appType = webAppLinux때 사용합니다.

시작 명령을 지정합니다.
예를 들어:
dotnet run
dotnet filename.dll.


customWebConfig - Python, Node.js, Go 및 Java 앱 대한 web.config 매개 변수 생성
string. 선택적. appType != webAppLinux && package NotEndsWith .war때 사용합니다.

애플리케이션에 표준 web.config 생성되고 애플리케이션에 없는 경우 Azure App Service에 배포됩니다. web.config 값은 애플리케이션 프레임워크에 따라 다르며 편집할 수 있습니다. 예를 들어 node.js 애플리케이션의 경우 web.config 시작 파일과 iis_node 모듈 값이 있습니다. 이 편집 기능은 생성된 web.config전용입니다.


앱 설정
string.

구문 -key value 사용하여 웹앱 애플리케이션 설정을 지정합니다(예: -Port 5000-RequestTimeout 5000-WEBSITE_TIME_ZONE). 큰따옴표로 공백을 포함하는 값을 묶습니다(예: "Eastern Standard Time").


configurationStrings - 구성 설정
string.

구문 -key value 사용하여 웹앱 구성 설정을 지정합니다(예: -phpVersion 5.6-linuxFxVersion: node|6.11). 공백이 포함된 값을 큰따옴표로 묶습니다.


deploymentMethod - 배포 방법
string. appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar때 필요합니다. 허용되는 값: auto(자동 검색), zipDeploy(Zip 배포), runFromPackage(패키지에서 실행). 기본값: auto.

앱에 대한 배포 방법 선택합니다. 허용되는 값은 자동, zipDeploy및 runFromPackage.


작업 제어 옵션

모든 작업에는 작업 입력 외에도 제어 옵션이 있습니다. 자세한 내용은 컨트롤 옵션 및 일반적인 작업 속성참조하세요.

출력 변수

이 작업은 다운스트림 단계, 작업 및 단계에서 사용할 수 있는 다음 출력 변수정의합니다.

AppServiceApplicationUrl
선택한 Azure App Service의 애플리케이션 URL입니다.

발언

이 작업을 사용하여 Azure App Service에 웹 애플리케이션을 배포합니다.

배포 방법

이 작업에서는 몇 가지 배포 방법을 사용할 수 있습니다. Auto 기본 옵션입니다.

디자이너 작업에서 패키지 기반 배포 옵션을 변경하려면 추가 배포 옵션 확장하고 배포 방법 선택사용하도록 설정합니다.

Azure App Service 및 Azure Pipelines 에이전트의 유형에 따라 태스크는 적절한 배포 기술을 선택합니다. 태스크에서 사용하는 다양한 배포 기술은 다음과 같습니다.

  • Kudu REST API
  • Zip 배포
  • RunFromPackage

기본적으로 태스크는 입력 패키지, 앱 서비스 유형 및 에이전트 OS에 따라 적절한 배포 기술을 선택하려고 시도합니다.

  • 앱 서비스 유형이 Linux 앱의 Web App인 경우 Zip 배포 사용합니다.
  • 전쟁 파일이 제공되면 War Deploy 사용합니다.
  • Jar 파일이 제공된 경우 패키지에서 실행 사용합니다.
  • 다른 모든 항목의 경우 Zip 배포를 통해 zip 실행

Windows가 아닌 에이전트(모든 앱 서비스 유형)에서 태스크는 Kudu REST API 사용하여 웹앱을 배포합니다.

Kudu REST API

Kudu REST API는 대상이 Windows의 웹앱, Linux의 웹앱(기본 제공 원본) 또는 함수 앱인 경우 Windows 또는 Linux 자동화 에이전트에서 작동할 있습니다. 태스크는 Kudu를 사용하여 Azure App Service에 파일을 복사합니다.

Zip 배포

선택한 패키지 또는 폴더의 .zip 배포 패키지를 만듭니다. 그런 다음, 파일 내용이 Azure App Service에서 함수 앱의 wwwroot 폴더에 배포됩니다. 이 옵션은 wwwroot 폴더의 모든 기존 콘텐츠를 덮어씁니다. 자세한 내용은 Azure Functions대한 Zip 배포를 참조하세요.

RunFromPackage

Zip 배포와 동일한 배포 패키지를 만듭니다. 그러나 wwwroot 폴더에 파일을 배포하는 대신 전체 패키지는 Azure Functions 런타임에 의해 탑재됩니다. 이 옵션을 사용하면 wwwroot 폴더의 파일이 읽기 전용이 됩니다. 자세한 내용은 패키지 파일Azure Functions 실행 참조하세요.

오류: Azure에 대한 액세스 토큰을 가져올 수 없습니다. 사용된 서비스 주체가 유효하고 만료되지 않았는지 확인합니다.

태스크는 서비스 연결에서 서비스 주체를 사용하여 Azure로 인증합니다. 서비스 주체가 만료되었거나 App Service에 대한 권한이 없는 경우 이 오류로 인해 작업이 실패합니다. 사용된 서비스 주체의 유효성과 앱 등록에 있는지 확인합니다. 자세한 내용은 역할 기반 액세스 제어를 사용하여 Azure 구독 리소스대한 액세스를 관리합니다. 이 블로그 게시물 서비스 주체 인증 사용에 대한 자세한 정보도 포함되어 있습니다.

SSL 오류

App Service에서 인증서를 사용하려면 신뢰할 수 있는 인증 기관에서 인증서에 서명해야 합니다. 웹앱에서 인증서 유효성 검사 오류를 제공하는 경우 자체 서명된 인증서를 사용할 수 있습니다. VSTS_ARM_REST_IGNORE_SSL_ERRORS 변수를 빌드 또는 릴리스 파이프라인의 true 값으로 설정하여 오류를 해결합니다.

릴리스가 오랫동안 중단된 후 실패합니다.

이 문제는 App Service 계획의 용량 부족의 결과일 수 있습니다. 이 문제를 해결하려면 App Service 인스턴스를 확장하여 사용 가능한 CPU, RAM 및 디스크 공간을 늘리거나 다른 App Service 계획을 사용해 볼 수 있습니다.

5xx 오류 코드

5xx 오류가 표시되는 경우 Azure 서비스상태를 확인합니다.

Azure Function이 갑자기 작동 중지됨

마지막 배포 이후 1년이 지난 경우 Azure Functions의 작동이 갑자기 중지될 수 있습니다. "deploymentMethod"에서 "RunFromPackage"를 사용하여 배포하는 경우 만료 날짜가 1년인 SAS가 생성되고 애플리케이션 구성에서 "WEBSITE_RUN_FROM_PACKAGE" 값으로 설정됩니다. Azure Functions는 이 SAS를 사용하여 함수 실행을 위해 패키지 파일을 참조하므로 SAS가 만료된 경우 함수가 실행되지 않습니다. 이 문제를 해결하려면 다시 배포하여 만료 날짜가 1년인 SAS를 생성합니다.

오류: 지정된 패턴이 있는 패키지를 찾을 수 없음

작업에 언급된 패키지가 빌드 또는 이전 단계에서 아티팩트로 게시되고 현재 작업에서 다운로드되었는지 확인합니다.

오류: zip 배포 옵션을 사용하여 게시는 msBuild 패키지 유형에 대해 지원되지 않습니다.

MSBuild 작업(기본 인수 포함)을 통해 만든 웹 패키지에는 웹 배포에서만 올바르게 배포할 수 있는 중첩된 폴더 구조가 있습니다. 게시-zip 배포 옵션은 해당 패키지를 배포하는 데 사용할 수 없습니다. 패키징 구조를 변환하려면 다음 단계를 수행합니다.

  1. 솔루션 빌드 태스크에서 MSBuild 인수/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent"변경합니다.

    솔루션 빌드 값을 보여 주는 스크린샷

  2. 보관 작업을 추가하고 다음과 같이 값을 변경합니다.

    1. 루트 폴더 또는 파일을 $(System.DefaultWorkingDirectory)\\WebAppContent보관 변경합니다.

    2. 경로 보관 앞에 추가 루트 폴더 이름을 선택 취소합니다.

      보관 값을 보여 주는 스크린샷

FAQ

AzureWebApp 작업과 AzureRmWebAppDeployment 작업의 차이점은 무엇인가요?

Azure Web App 작업(AzureWebApp)은 Azure Web App에 배포하는 가장 간단한 방법입니다. 기본적으로 배포는 Azure Web App의 루트 애플리케이션에 발생합니다.

Azure App Service 배포 태스크(AzureRmWebAppDeployment) 다음과 같은 더 많은 사용자 지정 시나리오를 처리할 수 있습니다.

메모

파일 변환 및 변수 대체는 Azure Pipelines에서 사용하기 위해 별도의 파일 변환 태스크 지원됩니다. 파일 변환 태스크를 사용하여 모든 구성 및 매개 변수 파일에 파일 변환 및 변수 대체를 적용할 수 있습니다.

Windows에서 웹앱 배포가 성공했지만 앱이 작동하지 않음

web.config 앱에 없기 때문일 수 있습니다. 원본에 web.config 파일을 추가하거나 애플리케이션 및 구성 설정사용하여 파일을 자동으로 생성할 수 있습니다.

  • 작업을 클릭하고 Python, Node.js, Go 및 Java 앱대한 web.config 매개 변수 생성으로 이동합니다.

    web.config 매개 변수 생성 대화 상자의 스크린샷

  • 더 많은 단추 ... 클릭하여 매개 변수를 편집합니다.

    드롭다운 대화 상자의 스크린샷

  • 드롭다운에서 애플리케이션 유형을 선택합니다.

  • 확인을 클릭합니다. 그러면 web.config생성하는 데 필요한 web.config 매개 변수가 채워집니다.

ASE(App Service Environment)에서 웹앱 배포가 작동하지 않음

  • Azure DevOps 빌드 에이전트가 ASE의 ILB(내부 부하 분산 장치)와 동일한 VNET(서브넷이 다를 수 있습니다)에 있는지 확인합니다. 이렇게 하면 에이전트가 Azure DevOps에서 코드를 가져와 ASE에 배포할 수 있습니다.
  • Azure DevOps를 사용하는 경우 에이전트는 인터넷에서 액세스할 필요가 없지만 Azure DevOps Service에 연결하려면 아웃바운드 액세스만 필요합니다.
  • Virtual Network에 배포된 TFS/Azure DevOps Server를 사용하는 경우 에이전트를 완전히 격리할 수 있습니다.
  • 빌드 에이전트는 배포해야 하는 웹앱의 DNS 구성으로 구성해야 합니다. Virtual Network의 프라이빗 리소스에는 Azure DNS에 항목이 없으므로 에이전트 컴퓨터의 호스트 파일에 추가해야 합니다.
  • ASE 구성에 자체 서명된 인증서를 사용하는 경우 MSDeploy에 대한 배포 작업에서 -allowUntrusted 옵션을 설정해야 합니다. 변수 VSTS_ARM_REST_IGNORE_SSL_ERRORStrue설정하는 것도 좋습니다. 인증 기관의 인증서가 ASE 구성에 사용되는 경우 필요하지 않습니다.

서비스 연결을 구성하려면 어떻게 해야 하나요?

이 작업에는 Azure Resource Manager 서비스 연결필요합니다.

Application Insights를 사용하여 웹 작업 배포를 구성해야 합니까?

App Service에 배포하는 경우 Application Insights 구성하고 사용하도록 설정한 경우 사용하도록 설정해야 합니다. 이 옵션을 사용하도록 설정하면 Application Insights 확장이 안전한 상태로 유지됩니다. Application Insights 연속 WebJob이 App_Data 폴더에 설치되기 때문에 이 단계가 필요합니다.

App Service에 배포하는 동안 프록시 뒤에 있는 경우 에이전트를 구성하려면 어떻게 해야 하나요?

자체 호스팅 에이전트에 웹 프록시가 필요한 경우 구성 중에 에이전트에 프록시에 대해 알릴 수 있습니다. 이렇게 하면 에이전트가 프록시를 통해 Azure Pipelines 또는 Azure DevOps Server에 연결할 수 있습니다. 웹 프록시뒤에서 자체 호스팅 에이전트를 실행하는 방법에 대해 자세히 알아봅니다.

예제

다음은 Windows에서 실행되는 Azure Web App Service에 웹 애플리케이션을 배포하는 YAML 코드 조각의 예입니다.

variables:
  azureSubscription: Contoso
  # To ignore SSL error uncomment the below variable
  # VSTS_ARM_REST_IGNORE_SSL_ERRORS: true

steps:

- task: AzureWebApp@1
  displayName: Azure Web App Deploy
  inputs:
    azureSubscription: $(azureSubscription)
    appName: samplewebapp
    package: $(System.DefaultWorkingDirectory)/**/*.zip

Linux에서 웹앱을 배포하려면 appType 매개 변수를 추가하고 appType: webAppLinux.

배포 방법을 Zip 배포로 지정하려면 매개 변수 deploymentMethod: zipDeploy추가합니다. 이 매개 변수에 대해 지원되는 또 다른 값은 runFromPackage.

지정하지 않으면 auto 기본값입니다.

요구 사항

요구 묘사
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
다음에서 실행 에이전트, DeploymentGroup
요구 없음
기능 이 작업은 작업의 후속 작업에 대한 요구 사항을 충족하지 않습니다.
명령 제한 어떤
settable 변수 어떤
에이전트 버전 2.209.0 이상
작업 범주 전개시키다
요구 묘사
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
다음에서 실행 에이전트, DeploymentGroup
요구 없음
기능 이 작업은 작업의 후속 작업에 대한 요구 사항을 충족하지 않습니다.
명령 제한 어떤
settable 변수 어떤
에이전트 버전 2.104.1 이상
작업 범주 전개시키다