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. 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. Deployment method. Default: auto.

appType - 應用程式類型
string. 必要。 允許的值: webApp (Windows) 上的 Web 應用程式, webAppLinux (Linux 上的 Web 應用程式) 。

指定 Azure Web 應用程式類型。

deployToSlotOrASE - 部署至位置或App Service 環境
boolean. 選擇性。 使用 時機 appType != "" 。 預設值:false

選取部署至現有部署位置或Azure App 服務環境的選項。
針對這兩個目標,工作需要資源組名。
如果部署目標是位置,則預設值為生產位置。 您也可以提供任何其他現有的位置名稱。
如果部署目標是Azure App 服務環境,請將位置名稱保留為「生產」,並指定資源組名。

指定要部署的自訂資料夾名稱。
如果欄位是空的,則會將封裝部署到 <appname>.azurewebsites.net/<warpackagename>
如果輸入 ROOT,則會將封裝部署到 <appname>.azurewebsited.net
在其他所有實例中,它會部署到 <appname>.azurewebsited.net/<customWarName>

customWebConfig - 為 Python、Node.js、Go 和 JAVA 應用程式產生web.config參數
string. 選擇性。 使用 時機 appType != webAppLinux && package NotEndsWith .war

如果應用程式沒有標準web.config,則會產生並部署至Azure App 服務。 web.config中的值會根據應用程式架構而有所不同,而且可以加以編輯。 例如,針對node.js應用程式,web.config會有啟動檔案和iis_node模組值。 此編輯功能僅適用于 產生的web.config

deploymentMethod - 部署方法
string. 必要。 允許的值: auto (自動偵測) 、 zipDeploy (Zip Deploy) , runFromPackage (從套件執行) 。 預設值:auto

選擇應用程式的 部署方法 。 可接受的值為 autozipDeployrunFromPackage

這項工作提供數種部署方法。 Auto 是預設選項。

若要變更設計工具工作中以封裝為基礎的部署選項,請展開 [其他部署選項 ],然後啟用 [選取部署方法]。

根據Azure App 服務和 Azure Pipelines 代理程式的類型,工作會選擇適當的部署技術。 工作所使用的不同部署技術如下:

  • Kudu REST API
  • Zip Deploy
  • RunFromPackage
  • 根據預設,工作會嘗試在輸入套件、應用程式服務類型和代理程式 OS 的情況下選取適當的部署技術。

  • 當 App Service 類型為 Linux 應用程式上的 Web 應用程式時,請使用 Zip Deploy
  • 如果提供 War 檔案,請使用 War Deploy
  • 如果提供 Jar 檔案,請使用 執行 From Package
  • 針對所有其他專案,請使用透過 Zip Deploy) 從 Zip (執行
  • 在任何應用程式服務類型) 的非 Windows 代理程式 (上,工作會依賴 Kudu REST API 來部署 Web 應用程式。

    Kudu REST API

    當目標為 Windows 上的 Web 應用程式、Linux 上的 Web 應用程式 (內建來源) 或函式應用程式時,Kudu REST API適用于 Windows 或 Linux 自動化代理程式。 此工作會使用 Kudu 將檔案複製到Azure App 服務。

    Zip Deploy

    建立所選套件或資料夾的.zip部署套件。 然後,檔案內容會部署至函式應用程式的 wwwroot 資料夾,Azure App 服務。 此選項會覆寫 wwwroot 資料夾中的所有現有內容。 如需詳細資訊,請參閱適用于 Azure Functions 的 Zip 部署

    RunFromPackage

    建立與 Zip Deploy 相同的部署套件。 不過,整個套件會由Azure Functions執行時間掛接,而不是將檔案部署至 wwwroot 資料夾。 使用此選項時,wwwroot 資料夾中的檔案會變成隻讀的。 如需詳細資訊,請參閱從套件檔案執行 Azure Functions

    錯誤:無法擷取 Azure 的存取權杖。 確認所使用的服務主體是否有效且未過期。

    此工作會使用服務連線中的服務主體向 Azure 進行驗證。 如果服務主體已過期或沒有App Service的許可權,工作就會失敗,並出現此錯誤。 確認所使用的服務主體有效性,以及它存在於應用程式註冊中。 如需詳細資訊,請參閱 使用角色型存取控制來管理 Azure 訂用帳戶資源的存取權。 此部落格文章 也包含使用服務主體驗證的詳細資訊。

    SSL 錯誤

    如果您想要在 App Service 中使用憑證,則必須由受信任的憑證授權單位單位簽署憑證。 如果您的 web 應用程式出現憑證驗證錯誤,您可能使用了自我簽署憑證。 將名為 VSTS_ARM_REST_IGNORE_SSL_ERRORS 的變數設定為組建或發行管線中的值 true ,以解決錯誤。

    發行長時間停止回應,然後失敗

    此問題可能是您的App Service方案中容量不足的結果。 若要解決此問題,您可以相應增加 App Service 實例,以提高可用的 CPU、RAM 和磁碟空間,或嘗試使用不同的App Service方案。

    5xx 錯誤碼

    如果您看到 5xx 錯誤, 請檢查 Azure 服務的狀態

    錯誤:找不到具指定模式的套件

    請確認工作中所提及的套件已在組建或上一個階段中發行為成品,並已在目前的作業中下載。

    錯誤:msBuild 套件類型不支援使用 zip 部署發佈選項

    透過 MSBuild 工作建立的 Web 套件 (預設引數) 具有巢狀資料夾結構,且只能由 Web Deploy 正確部署。 發行至 zip 部署選項無法用來部署這些套件。 若要轉換封裝結構,請執行下列步驟:

  • 在 [建置方案] 工作中,將 MSBuild 引數 變更為 /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent"

  • 新增封存工作並變更值,如下所示:

  • 根資料夾或檔案變更為 封存$(System.DefaultWorkingDirectory)\\WebAppContent

  • 清除 [ 封存路徑之前加上的根資料夾名稱 ] 核取方塊:

    Windows 上的 Web 應用程式部署成功,但是應用程式無法運作

    這可能是因為應用程式中沒有web.config。 您可以將web.config檔案新增至來源,或使用 應用程式和組態設定自動產生檔案。

  • 按一下工作,然後移至 [為 Python 產生web.config參數]、[Node.js]、[Go] 和 [JAVA 應用程式]。

  • 按一下 [更多] 按鈕 ... 以編輯參數。

  • 從下拉式清單中選取您的應用程式類型。

  • 按一下 [確定]。 這會填入產生web.config所需的web.config參數。

    App Service 環境 (ASE) 上的 Web 應用程式部署無法運作

  • 請確定 Azure DevOps 組建代理程式位於相同的 VNET (子網上,與 ASE 的內部Load Balancer (ILB) 不同) 。 這可讓代理程式從 Azure DevOps 提取程式碼,並部署到 ASE。
  • 如果您使用 Azure DevOps,則不需要從網際網路存取代理程式,但只需要輸出存取才能連線到 Azure DevOps Service。
  • 如果您使用部署在虛擬網路中的 TFS/Azure DevOps Server,則可以完全隔離代理程式。
  • 組建代理程式必須設定為其部署所需的 Web 應用程式的 DNS 組態。 虛擬網路中的私人資源在 Azure DNS 中沒有專案,因此這必須新增至代理程式電腦上的主機檔案。
  • 如果自我簽署憑證用於 ASE 組態, -allowUntrusted 則必須在 MSDeploy 的部署工作中設定選項。 也建議將 變數 VSTS_ARM_REST_IGNORE_SSL_ERRORS 設定為 true 。 如果憑證授權單位單位的憑證用於 ASE 設定,就不應該這樣做。
  • 如何設定我的服務連線?

    此工作需要Azure Resource Manager服務連線

    如何使用 Application Insights 設定 Web 作業部署?

    當您部署至App Service時,如果您已設定Application Insights且已啟用 Remove additional files at destination ,則也需要啟用 Exclude files from the App_Data folder 。 啟用此選項可讓 Application Insights 延伸模組保持安全狀態。 這是必要步驟,因為 Application Insights 連續 WebJob 會安裝到 App_Data 資料夾中。

    當我部署至 App Service 時,應該如何設定代理程式位於 Proxy 後方?

    如果您的自我裝載代理程式需要 Web Proxy,您可以在設定期間通知代理程式有關 Proxy。 這樣做可讓您的代理程式透過 Proxy 連線到 Azure Pipelines 或Azure DevOps Server。 深入瞭解在 Web Proxy 後方執行自我裝載代理程式

    以下是將 Web 應用程式部署至 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 上部署 Web 應用程式,請新增 參數並將其 appType 設定為 appType: webAppLinux

    若要將部署方法指定為 Zip Deploy,請新增 參數 deploymentMethod: zipDeploy 。 此參數的另一個支援值是 runFromPackage

    如果未指定, auto 則為預設值。