# 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
。
選擇應用程式的 部署方法 。 可接受的值為 auto、 zipDeploy和 runFromPackage。
這項工作提供數種部署方法。 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服務連線。
當您部署至App Service時,如果您已設定Application Insights且已啟用 Remove additional files at destination
,則也需要啟用 Exclude files from the App_Data folder
。 啟用此選項可讓 Application Insights 延伸模組保持安全狀態。 這是必要步驟,因為 Application Insights 連續 WebJob 會安裝到 App_Data 資料夾中。
如果您的自我裝載代理程式需要 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
則為預設值。