# Azure Function v1
# Deploy an Azure Function for Linux or Windows.
- task: AzureFunctionApp@1
inputs:
azureSubscription: # string. Required. Azure subscription.
appType: # 'functionApp' | 'functionAppLinux'. Required. App type.
appName: # string. Required. App name.
#deployToSlotOrASE: false # boolean. 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: # 'DOCKER|microsoft/azure-functions-dotnet-core2.0:2.0' | 'DOCKER|microsoft/azure-functions-node8:2.0'. Optional. Use when appType = functionAppLinux. Runtime stack.
#startUpCommand: # string. Optional. Use when appType = functionAppLinux. Startup command.
# Application and Configuration Settings
#customWebConfig: # string. Optional. Use when appType != functionAppLinux && 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.
runtimeStack
- 執行時間堆疊
string
. 選擇性。 使用 時 appType = functionAppLinux
。 允許的值: DOTNET|2.2
(DOTNET|2.2 (functionapp v2) ) 、 DOTNET|3.1
(DOTNET|3.1 (functionapp v3) ) , DOTNET|6.0
(DOTNET|6.0 (functionapp v4) ) , JAVA|8
(JAVA|8 (functionapp v2/v3/v4) ) , JAVA|11
(JAVA|11 (functionapp v3/v4) ) 、 NODE|8
(NODE|8 (functionapp v2) ) 、 NODE|10
(NODE|10 (functionapp v2/v3) ) 、 NODE|12
(NODE|12 (functionapp v3) ) , NODE|14
(NODE|14 (functionapp v3/v4) ) , NODE|16
(NODE|16 (functionapp v4) ) , PYTHON|3.6
(PYTHON|3.6 (functionapp v2/v3) ) , PYTHON|3.7
(PYTHON|3.7 (functionapp v2/v3/v4) ) , PYTHON|3.8
(PYTHON|3.8 (functionapp v3/v4) ) , PYTHON|3.9
(PYTHON|3.9 (functionapp v3/v4) ) 。
瞭解 支援的執行時間版本。 之類的 DOCKER|microsoft/azure-functions-*
舊值已被取代。 新值會列在下拉式功能表中。
runtimeStack
- 執行時間堆疊
string
. 選擇性。 使用 時 appType = functionAppLinux
。 允許的值: DOTNET|2.2
(DOTNET|2.2 (functionapp v2) ) 、 DOTNET|3.1
(DOTNET|3.1 (functionapp v3) ) , JAVA|8
(JAVA|8 (functionapp v2/v3) ) , JAVA|11
(JAVA|111 (functionapp v3) ) , NODE|8
(NODE|8 (functionapp v2) ) , NODE|10
(NODE|10 (functionapp v2/v3) ) , NODE|12
(NODE|12 (functionapp v3) ) , NODE|14
(NODE|14 (functionapp v3) ) , PYTHON|3.6
(PYTHON|3.6 (functionapp v2/v3) ) , PYTHON|3.7
(PYTHON|3.7 (functionapp v2/v3) ) , PYTHON|3.8
(PYTHON|3.8 (functionapp v3) ) 。
瞭解 支援的執行時間版本。 舊值,例如 DOCKER|microsoft/azure-functions-*
已被取代。 新值會列在下拉式功能表中。
runtimeStack
- 執行時間堆疊
string
. 選擇性。 使用 時 appType = functionAppLinux
。 允許的值: DOCKER|microsoft/azure-functions-dotnet-core2.0:2.0
(.NET) 、 DOCKER|microsoft/azure-functions-node8:2.0
(JavaScript) 。
瞭解 支援的執行時間版本。 舊值,例如 DOCKER|microsoft/azure-functions-*
已被取代。 新值會列在下拉式功能表中。
customWebConfig
- 為 Python、Node.js、Go 和 JAVA 應用程式產生web.config參數
string
. 選擇性。 使用 時 appType != functionAppLinux && package NotEndsWith .war
。
如果應用程式沒有標準Web.config,則會產生並部署到Azure App 服務。 web.config中的值會根據應用程式架構而有所不同,並可加以編輯。 例如,針對node.js應用程式,web.config會有啟動檔案和iis_node模組值。 這個編輯功能僅適用于 產生的web.config。
deploymentMethod
- 部署方法
string
. 必要。 允許的值: auto
(自動偵測) 、 zipDeploy
(Zip Deploy) , runFromPackage
(Zip Deploy with Run From Package) 。 預設值:auto
。
選擇應用程式的 部署方法 。
deploymentMethod
- 部署方法
string
. 必要。 允許的值: auto
(自動偵測) 、 zipDeploy
(Zip Deploy) 、 runFromPackage
(從套件執行) 。 預設值:auto
。
選擇應用程式的 部署方法 。
這項工作提供數種部署方法。 預設值是 auto
。
若要變更設計工具工作中以封裝為基礎的部署選項,請展開 [其他部署選項 ],然後啟用 [選取部署方法]。
根據Azure App 服務和 Azure Pipelines 代理程式的類型,工作會使用適當的部署技術。 工作所使用的部署技術如下所示:
Kudu REST API
ZIP 部署
從套件執行
根據預設,工作會根據輸入套件、App Service類型和代理程式 OS 嘗試選取適當的部署技術。
如果提供部署後腳本,請使用 Zip Deploy。
如果App Service類型是 Linux 上的 Web 應用程式,請使用 Zip Deploy。
如果提供 .war 檔案,請使用 War Deploy。
如果提供 .jar 檔案,請使用 Run-From-Zip。
針對所有其他工作,請使用透過 Zip Deploy) 執行 From Package (。
在任何App Service類型) 的非 Windows 代理程式 (上,工作會依賴Kudu REST API來部署 Web 應用程式。
Kudu REST API
當目標為 Windows 上的 Web 應用程式、Linux 上的 Web 應用程式 (內建來源) 或函式應用程式時, Kudu REST API 可在 Windows 和 Linux 自動化代理程式上運作。 此工作會使用 Kudu 將檔案複製到Azure App 服務。
Zip 部署
Zip Deploy 會從所選的套件或資料夾建立.zip部署套件。 然後,它會將檔案內容部署至 Azure 中App Service名稱函式應用程式的 wwwroot 資料夾。 此選項會覆寫 wwwroot 資料夾中的所有現有內容。 如需詳細資訊,請參閱適用于 Azure Functions 的 Zip 部署。
從套件執行
執行 From Package 會建立與 Zip Deploy 相同的部署套件。 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.config檔案,就可能發生此問題。 您可以將web.config檔案新增至來源,或使用工作的 [應用程式和組態設定 ] 自動產生檔案。
選取工作,然後移至 產生 Python、Node.js、Go 和 JAVA 應用程式的web.config參數:
選取 [為 Python 產生web.config參數]、[Node.js]、[Go] 和 [JAVA 應用程式 ] 底下的 [更多] 按鈕 (...) ,以編輯參數:
在 [ 應用程式架構 ] 清單中選取您的應用程式類型。
選取 [確定]。 這麼做會填入產生web.config檔案所需的web.config參數。
常見問題集
此工作需要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 後方執行自我裝載代理程式。
我無法使用 Azure Resource Manager 服務連線和Microsoft裝載的代理程式部署至內部App Service 環境
根據設計,Microsoft裝載的代理程式無法與App Service 環境搭配運作。 相反地,您必須在與App Service 環境位於相同虛擬網路的虛擬機器上設定私人代理程式。 此外,請設定私人 DNS 區域,以啟用資源之間的通訊。
azureSubscription: Contoso
# To ignore SSL error, uncomment the below variable
# VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
steps:
- task: AzureFunctionApp@1
displayName: Azure Function App Deploy
inputs:
azureSubscription: $(azureSubscription)
appName: samplefunctionapp
appType: functionApp
package: $(System.DefaultWorkingDirectory)/**/*.zip
若要在 Linux 上部署函式,請新增 參數, appType
並將其設定為 appType: functionAppLinux
。 如果您未指定值, functionApp
則為預設值。
若要將部署方法明確指定為 Zip Deploy,請新增 參數 deploymentMethod: zipDeploy
。 此參數的另一個支援值是 runFromPackage
。
如果您未指定值, auto
則為預設值。
如需示範如何建立 CI/CD 管線的逐步解說,請參閱建置 JAVA 並將其部署至Azure Functions。