AzureWebApp@1 - Azure Web App v1 工作
此工作會部署適用於Linux或 Windows 的 Azure Web 應用程式。
語法
# 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: # 'DOTNETCORE:9.0' | 'DOTNETCORE:8.0' | 'DOTNETCORE:7.0' | 'DOTNETCORE:6.0' | 'NODE:20-lts' | 'NODE:18-lts' | 'NODE:16-lts' | 'PYTHON:3.12' | 'PYTHON:3.11' | 'PYTHON:3.10' | 'PYTHON:3.9' | 'PYTHON:3.8' | 'PHP:8.3' | 'PHP:8.2' | 'PHP:8.1' | 'PHP:8.0' | 'JAVA:21-java21' | 'JAVA:17-java17' | 'JAVA:11-java11' | 'JAVA:8-jre8' | 'JBOSSEAP:8-java17' | 'JBOSSEAP:8-java11' | 'JBOSSEAP:7-java17' | 'JBOSSEAP:7-java11' | 'JBOSSEAP:7-java8' | 'TOMCAT:10.1-java21' | 'TOMCAT:10.1-java17' | 'TOMCAT:10.1-java11' | 'TOMCAT:10.0-java17' | 'TOMCAT:10.0-java11' | 'TOMCAT:10.0-jre8' | 'TOMCAT:9.0-java21' | 'TOMCAT:9.0-java17' | 'TOMCAT:9.0-java11' | 'TOMCAT:9.0-jre8' | 'TOMCAT:8.5-java11' | 'TOMCAT:8.5-jre8'. 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.
#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.
輸入
appType
-
應用程式類型
string
。 必須的。 允許的值:webApp
(Windows 上的 Web 應用程式)、webAppLinux
(Linux 上的 Web 應用程式)。
指定 Azure Web 應用程式類型。
appName
-
應用程式名稱
string
。 必須的。
指定現有 Azure App Service 的名稱。 只會列出以所選應用程式類型為基礎的應用程式服務。
deployToSlotOrASE
-
部署至位置或 App Service 環境
boolean
。 選擇性。
appType != ""
時使用 。 預設值:false
。
選取選項以部署至現有的部署位置或 Azure App Service 環境。
針對這兩個目標,工作需要資源組名。
如果部署目標為位置,則預設值為生產位置。 您也可以提供任何其他現有的位置名稱。
如果部署目標是 Azure App Service 環境,請將位置名稱保留為「生產」,並指定資源組名。
resourceGroupName
-
資源群組
string
。
deployToSlotOrASE = true
時為必要項。
當部署目標為部署位置或 Azure App Service 環境時,需要資源組名。
指定包含上述 Azure App Service 的 Azure 資源群組。
slotName
-
位置
string
。
deployToSlotOrASE = true
時為必要項。 預設值:production
。
指定現有的位置,不包括生產位置。
package
-
套件或資料夾
string
。 必須的。 預設值:$(System.DefaultWorkingDirectory)/**/*.zip
。
封裝或資料夾的檔案路徑,其中包含 MSBuild 所產生的 App Service 內容、壓縮的 zip 檔案或戰爭檔案。 支援變數(組建 | 版本)和通配符。 例如,$(System.DefaultWorkingDirectory)/**/*.zip
或 $(System.DefaultWorkingDirectory)/**/*.war
。
customDeployFolder
-
自定義部署資料夾
string
。 選擇性。
package EndsWith .war
時使用 。
指定要部署的自訂資料夾名稱。
如果欄位是空的,封裝會部署至 <appname>.azurewebsites.net/<warpackagename>
。
如果輸入 ROOT,封裝會部署至 <appname>.azurewebsited.net
。
在其他所有實例中,它會部署至 <appname>.azurewebsited.net/<customWarName>
。
runtimeStack
-
運行時間堆疊
string
。 選擇性。
appType = webAppLinux
時使用 。 允許的值:DOTNETCORE:9.0
(.NET 9.0)、DOTNETCORE:8.0
(.NET 8.0)、DOTNETCORE:7.0
(.NET 7.0)、DOTNETCORE:6.0
(.NET 6.0)、NODE:20-lts
(節點 20 LTS)、NODE:18-lts
(節點 18 LTS)、NODE:16-lts
(節點 16 LTS)、PYTHON:3.12
(Python 3.1 PYTHON:3.11
2),PYTHON:3.12
(Python 3.11)、PYTHON:3.10
(Python 3.10)、PYTHON:3.9
(Python 3.9)、PYTHON:3.8
(Python 3.8)、PHP:8.3
(PHP 8.3)、PHP:8.2
(PHP 8.2)、PHP:8.1
(PHP 8.1)、PHP:8.0
(PHP 8.0)、JAVA:21-java21
(Java 21) JAVA:17-java17
(Java 17)、JAVA:11-java11
(Java 11)、JAVA:8-jre8
(Java 8)、JBOSSEAP:8-java17
(JBoss EAP 8 (Java 17))、JBOSSEAP:8-java11
(JBoss EAP 8 (Java 11))、JBOSSEAP:7-java17
(JBoss EAP 7 (Java 17))、JBOSSEAP:7-java11
(JBoss EAP 7 (Java 11) ))、JBOSSEAP:7-java8
(JBoss EAP 7 (Java 8))、TOMCAT:10.1-java21
(Tomcat 10.1 (Java 21))、TOMCAT:10.1-java17
(Tomcat 10.1 (Java 17))、TOMCAT:10.1-java11
(Tomcat 10.1 (Java 11))、TOMCAT:10.0-java17
(Tomcat 10.0 (Java 17))、 TOMCAT:10.0-java11
(Tomcat 10.0 (Java 11))、TOMCAT:10.0-jre8
(Tomcat 10.0 (Java 8))、TOMCAT:9.0-java21
(Tomcat 9.0 (Java 21))、TOMCAT:9.0-java17
(Tomcat 9.0 (Java 17) TOMCAT:9.0-java11
(Tomcat 9.0 (Java 11))、TOMCAT:9.0-jre8
(Tomcat 9.0 (Java 8))、TOMCAT:8.5-java11
(Tomcat 8.5 (Java 11))、TOMCAT:8.5-jre8
(Tomcat 8.5 (Java 8))。
Linux 上的 Web 應用程式提供兩種不同的應用程式發佈選項:自定義映射部署(適用於容器的 Web 應用程式),以及使用內建平臺映像的應用程式部署(Linux 上的 Web 應用程式)。 只有在 Linux Web 應用程式 選取為工作中的應用程式類型時,才能使用此參數。
runtimeStack
-
運行時間堆疊
string
。 選擇性。
appType = webAppLinux
時使用 。
Linux 上的 Web 應用程式提供兩種不同的應用程式發佈選項:自定義映射部署(適用於容器的 Web 應用程式),以及使用內建平臺映像的應用程式部署(Linux 上的 Web 應用程式)。 只有在 Linux Web 應用程式 選取為工作中的應用程式類型時,才能使用此參數。
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。
appSettings
-
應用程式設定
string
。
使用語法 -key value
指定 Web 應用程式應用程式設定(例如:-Port 5000
-RequestTimeout 5000
-WEBSITE_TIME_ZONE
)。 以雙引弧括住包含空格的值(例如:"Eastern Standard Time"
)。
configurationStrings
-
組態設定
string
。
使用語法來指定 Web 應用程式組態設定 -key value
(例如:-phpVersion 5.6
-linuxFxVersion: node|6.11
)。 以雙引弧括住包含空格的值。
deploymentMethod
-
部署方法
string
。
appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar
時為必要項。 允許的值:auto
(自動偵測)、zipDeploy
(Zip Deploy)、runFromPackage
(從套件執行)。 預設值:auto
。
選擇應用程式的 部署方法。 可接受的值為 自動、zipDeploy和 runFromPackage。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制項選項和一般工作屬性。
輸出變數
此工作會定義下列 輸出變數,您可以在下游步驟、作業和階段中取用這些變數。
AppServiceApplicationUrl
所選 Azure App Service 的應用程式 URL。
備註
使用此工作將 Web 應用程式部署至 Azure App Service。
部署方法
此工作提供數個部署方法。
Auto
是預設選項。
若要變更設計工具工作中以封裝為基礎的部署選項,請展開 [[其他部署選項],然後啟用 [選取部署方法] 。
根據 Azure App Service 和 Azure Pipelines 代理程式的類型,工作會選擇適當的部署技術。 工作所使用的不同部署技術如下:
- Kudu REST API
- Zip Deploy
- RunFromPackage
根據預設,工作會嘗試選取輸入套件、應用程式服務類型和代理程式OS的適當部署技術。
- 當 App Service 類型為 Linux 應用程式上的 Web 應用程式時,請使用 Zip Deploy
- 如果提供 War 檔案,請使用 War Deploy
- 如果提供 Jar 檔案,請使用 從套件執行
- 針對所有其他專案,請使用 從 Zip 執行 (透過 Zip Deploy)
在非 Windows 代理程式上(針對任何應用程式服務類型),工作依賴 Kudu REST API 來部署 Web 應用程式。
Kudu REST API
當目標為 Windows 上的 Web 應用程式、Linux 上的 Web 應用程式(內建來源)或函式應用程式時,Kudu REST API 在 Windows 或 Linux 自動化代理程式上運作。 工作會使用 Kudu 將檔案複製到 Azure App Service。
Zip Deploy
建立所選套件或資料夾的 .zip 部署套件。 檔案內容接著會部署至 Azure App Service 中函式應用程式的 wwwroot 資料夾。 此選項會覆寫 wwwroot 資料夾中的所有現有內容。 如需詳細資訊,請參閱 azure Functions
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 服務的狀態。
Azure 函式突然停止運作
如果自上次部署以來超過一年,Azure Functions 可能會突然停止運作。 如果您在 「deploymentMethod」 中使用 「RunFromPackage」 進行部署,則會產生到期日為 1 年的 SAS,並在應用程式組態中設定為 「WEBSITE_RUN_FROM_PACKAGE」 的值。 Azure Functions 會使用此 SAS 參考套件檔案來執行函式,因此如果 SAS 已過期,則不會執行函式。 若要解決此問題,請再次部署以產生到期日為一年的SAS。
錯誤:找不到具有指定模式的套件
檢查工作中提及的套件是否已在組建或上一個階段中發佈為成品,並在目前作業中下載。
錯誤:msBuild 套件類型不支援使用 zip deploy 選項發佈
透過 MSBuild 工作建立的 Web 套件(含預設自變數)具有巢狀資料夾結構,只能由 Web Deploy 正確部署。 publish-to-zip 部署選項無法用來部署這些套件。 若要轉換封裝結構,請執行下列步驟:
在 [建置方案] 工作中,將 MSBuild 自變數 變更為
/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent"
:新增封存工作並變更值,如下所示:
將 根資料夾或檔案變更為封存 至
$(System.DefaultWorkingDirectory)\\WebAppContent
。清除 [封存路徑前 根資料夾名稱], 複選框:
常見問題
AzureWebApp
與 AzureRmWebAppDeployment
工作之間的差異為何?
Azure Web 應用程式工作 (AzureWebApp
) 是部署至 Azure Web 應用程式的最簡單方式。 根據預設,您的部署會發生在 Azure Web 應用程式中的根應用程式。
Azure App Service Deploy 工作 (AzureRmWebAppDeployment
) 可以處理更多自定義案例,例如:
- 修改 Web 套件和 XML 參數檔案內的組態設定。
- 如果您使用 IIS 部署程式,使用 Web Deploy進行部署。
- 部署至虛擬應用程式。
- 部署到其他應用程式類型,例如容器應用程式、函式應用程式、WebJobs 或 API 和行動應用程式。
備註
個別 檔案轉換工作也支援檔案轉換和變數替代,以用於 Azure Pipelines。 您可以使用檔案轉換工作,在任何組態和參數檔案上套用檔案轉換和變數替代。
Windows 上的 Web 應用程式部署成功,但應用程式無法運作
這可能是因為應用程式中沒有 web.config。 您可以將 web.config 檔案新增至來源,或使用 Application and Configuration Settings自動產生檔案。
按兩下工作,然後移至 產生 Python、Node.js、Go 和 Java 應用程式的 web.config 參數。
按兩下 [更多] 按鈕
...
來編輯參數。從下拉式清單中選取您的應用程式類型。
按兩下 [確定]。 這會填入產生 web.config所需的 web.config 參數。
App Service 環境上的 Web 應用程式部署 (ASE) 無法運作
- 請確定 Azure DevOps 建置代理程式位於與 ASE 的內部負載平衡器 (ILB) 相同的 VNET (子網) 上。 這可讓代理程式從 Azure DevOps 提取程式碼並部署至 ASE。
- 如果您使用 Azure DevOps,則代理程式不需要從因特網存取,但只需要輸出存取才能連線到 Azure DevOps Service。
- 如果您使用部署在虛擬網路中的 TFS/Azure DevOps Server,代理程式可以完全隔離。
- 建置代理程式必須設定其部署所需的 Web 應用程式的 DNS 組態。 虛擬網路中的私人資源在 Azure DNS 中沒有專案,因此這必須新增至代理程式電腦上的主機檔案。
- 如果自我簽署憑證用於 ASE 組態,則必須在 MSDeploy 的部署工作中設定
-allowUntrusted
選項。 也建議將變數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
為預設值。
需求
要求 | 說明 |
---|---|
管線類型 | YAML、傳統組建、傳統版本 |
執行於 | Agent、DeploymentGroup |
需求 | 沒有 |
功能 | 此工作不符合作業中後續工作的任何需求。 |
命令限制 | 任意 |
Settable 變數 | 任意 |
代理程式版本 | 2.209.0 或更新 |
工作類別 | 部署 |
要求 | 說明 |
---|---|
管線類型 | YAML、傳統組建、傳統版本 |
執行於 | Agent、DeploymentGroup |
需求 | 沒有 |
功能 | 此工作不符合作業中後續工作的任何需求。 |
命令限制 | 任意 |
Settable 變數 | 任意 |
代理程式版本 | 2.104.1 或更高版本 |
工作類別 | 部署 |