使用 .NET、Python、JavaScript、PowerShell、Java 型 Web 應用程式更新函式應用程式。
Syntax
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
inputs:
connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection.
appType: # 'functionApp' | 'functionAppLinux'. Required. App type.
#isFlexConsumption: false # boolean. Is Function App on Flex Consumption Plan. Default: false.
appName: # string. Required. Azure Functions App name.
#deployToSlotOrASE: false # boolean. Optional. Use when appType != "" && isFlexConsumption = false. 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: # 'DOTNET|6.0' | 'DOTNET-ISOLATED|6.0' | 'DOTNET-ISOLATED|7.0' | 'DOTNET-ISOLATED|8.0' | 'DOTNET-ISOLATED|9.0' | 'JAVA|8' | 'JAVA|11' | 'JAVA|17' | 'JAVA|21' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'NODE|20' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10' | 'PYTHON|3.11'. Optional. Use when appType = functionAppLinux && isFlexConsumption = false. Runtime stack.
# Application and Configuration Settings
#appSettings: # string. App settings.
# Additional Deployment Options
#deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && isFlexConsumption = false && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
inputs:
connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection.
appType: # 'functionApp' | 'functionAppLinux'. Required. App type.
#isFlexConsumption: false # boolean. Is Function App on Flex Consumption Plan. Default: false.
appName: # string. Required. Azure Functions App name.
#deployToSlotOrASE: false # boolean. Optional. Use when appType != "" && isFlexConsumption = false. 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: # 'DOTNET|6.0' | 'DOTNET-ISOLATED|6.0' | 'DOTNET-ISOLATED|7.0' | 'DOTNET-ISOLATED|8.0' | 'JAVA|8' | 'JAVA|11' | 'JAVA|17' | 'JAVA|21' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'NODE|20' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10' | 'PYTHON|3.11'. Optional. Use when appType = functionAppLinux && isFlexConsumption = false. Runtime stack.
# Application and Configuration Settings
#appSettings: # string. App settings.
# Additional Deployment Options
#deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && isFlexConsumption = false && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
inputs:
connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection.
appType: # 'functionApp' | 'functionAppLinux'. Required. App type.
appName: # string. Required. Azure Functions 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: # 'DOTNET|2.2' | 'DOTNET|3.1' | 'DOTNET|6.0' | 'DOTNET-ISOLATED|7.0' | 'JAVA|8' | 'JAVA|11' | 'NODE|8' | 'NODE|10' | 'NODE|12' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'PYTHON|3.6' | 'PYTHON|3.7' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10'. Optional. Use when appType = functionAppLinux. Runtime stack.
# Application and Configuration Settings
#appSettings: # string. App settings.
# Additional Deployment Options
#deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
Inputs
connectedServiceNameARM
-
Azure Resource Manager 連線
輸入別名: azureSubscription。
string。 Required.
選取部署的 Azure Resource Manager 連線。 服務連線必須連線到作用中的 Azure 訂用帳戶。
appType
-
應用程式類型
string。 Required. 允許的值:functionApp(Windows 上的函式應用程式)、functionAppLinux(Linux 上的函式應用程式)。
選取部署的 Azure 函式應用程式類型。
appName
-
Azure Functions 應用程式名稱
string。 Required.
指定現有 Azure Functions 應用程式的名稱。 列出的函式應用程式會以選取的應用程式類型為基礎。
deployToSlotOrASE
-
部署至位置或App Service環境
boolean。 Optional.
appType != "" && isFlexConsumption = false時使用 。 預設值:false。
部署到現有的部署位置或 Azure App Service 環境。 針對這兩個目標,工作需要資源組名。
如果部署目標是插槽,則會預設為 生產 插槽。 您也可以提供任何其他現有的位置名稱。
如果部署目標是 Azure App Service 環境,請將位置名稱保留為 生產環境 ,並指定資源群組名稱。
deployToSlotOrASE
-
部署至位置或App Service環境
boolean。 Optional.
appType != ""時使用 。 預設值:false。
部署到現有的部署位置或 Azure App Service 環境。 針對這兩個目標,工作需要資源組名。
如果部署目標是插槽,則會預設為 生產 插槽。 您也可以提供任何其他現有的位置名稱。
如果部署目標是 Azure App Service 環境,請將位置名稱保留為 生產環境 ,並指定資源群組名稱。
resourceGroupName
-
資源群組
string。
deployToSlotOrASE = true時為必要項。
當部署目標為部署位置或 App Service 環境時,需要資源組名。
輸入或選取包含上面指定之 Azure App Service 的 Azure 資源群組。
slotName
-
槽
string。
deployToSlotOrASE = true時為必要項。 預設值:production。
輸入或選取現有的位置,但不包括生產位置。
slotName
-
槽
string。
deployToSlotOrASE = true時為必要項。 預設值:production。
輸入或選取生產位置以外的現有位置。
package
-
封裝或資料夾
string。 Required. 預設值:$(System.DefaultWorkingDirectory)/**/*.zip。
封裝或資料夾的檔案路徑,其中包含 MSBuild 或壓縮 zip 檔案所產生的 App Service 內容。 支援變數 ( Build | Release) 和萬用字元。 例如,$(System.DefaultWorkingDirectory)/**/*.zip。
runtimeStack
-
執行階段堆疊
string。 Optional.
appType = functionAppLinux && isFlexConsumption = false時使用 。 允許的值:DOTNET|6.0、、DOTNET-ISOLATED|6.0、 DOTNET-ISOLATED|7.0DOTNET-ISOLATED|8.0DOTNET-ISOLATED|9.0JAVA|8JAVA|11JAVA|17JAVA|21NODE|14NODE|16NODE|18NODE|20PYTHON|3.8PYTHON|3.9PYTHON|3.10PYTHON|3.11
指定函式應用程式將執行的架構和版本。 您可以使用任何 支援的執行時間版本。
DOCKER|microsoft/azure-functions-* 等舊值已被取代。 新值會列在 工作助理的下拉式清單中。 如果 支援的運行時間版本 有較新版本的架構,即使它不在清單中,您還是可以指定它。
Note
此值目前不會更新執行網站的 linuxFxVersion 。 這表示您無法將堆疊從節點 18 更新為節點 20。 工作目前只會更新應用程式設定。
runtimeStack
-
執行階段堆疊
string。 Optional.
appType = functionAppLinux && isFlexConsumption = false時使用 。 允許的值:DOTNET|6.0、、DOTNET-ISOLATED|6.0、 DOTNET-ISOLATED|7.0DOTNET-ISOLATED|8.0JAVA|8JAVA|11JAVA|17JAVA|21NODE|14NODE|16NODE|18NODE|20PYTHON|3.8PYTHON|3.9PYTHON|3.10PYTHON|3.11
指定函式應用程式將執行的架構和版本。 您可以使用任何 支援的執行時間版本。
DOCKER|microsoft/azure-functions-* 等舊值已被取代。 新值會列在 工作助理的下拉式清單中。 如果 支援的運行時間版本 有較新版本的架構,即使它不在清單中,您還是可以指定它。
Note
此值目前不會更新執行網站的 linuxFxVersion 。 這表示您無法將堆疊從節點 18 更新為節點 20。 工作目前只會更新應用程式設定。
runtimeStack
-
執行階段堆疊
string。 Optional.
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))、DOTNET-ISOLATED|7.0 (DOTNET-ISOLATED|7.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))、NODE|18 (NODE|18 (functionapp v4))、PYTHON|3.6 (PYTHON|3.6 (functionapp v2/v3))、PYTHON|3.7 (PYTHON|3.7 (functionapp v2/v) 3/v4)、PYTHON|3.8(PYTHON|3.8(functionapp v3/v4))、PYTHON|3.9(PYTHON|3.9(functionapp v3/v4))、PYTHON|3.10(PYTHON|3.10 (functionapp v3/v4))。
指定函式應用程式將執行的架構和版本。 您可以使用任何 支援的執行時間版本。
DOCKER|microsoft/azure-functions-* 等舊值已被取代。 新值會列在 工作助理的下拉式清單中。 如果 支援的運行時間版本 有較新版本的架構,即使它不在清單中,您還是可以指定它。
appSettings
-
應用程式設定
string。
使用語法 -key value 輸入應用程式設定(例如:-Port 5000-RequestTimeout 5000-WEBSITE_TIME_ZONE)。 以雙引弧括住包含空格的值(例如:"Eastern Standard Time")。
如需應用程式設定的詳細資訊,請參閱 Azure App Service 中的環境變數和應用程式設定。
deploymentMethod
-
部署方式
string。
appType != "" && isFlexConsumption = false && package NotEndsWith .war && Package NotEndsWith .jar時為必要項。 允許的值:auto(自動偵測)、zipDeploy(Zip Deploy)、runFromPackage(使用執行 From Package 的 Zip Deploy)。 預設值:auto。
指定應用程式的 部署方法 。 Linux 取用應用程式不支援此設定。
當 SKU 為 Linux 取用時,必須針對 zip 部署設定 Azure Web 作業記憶體應用程式設定。 Zip 部署會使用記憶體帳戶,將應用程式程式代碼上傳並掛接至應用程式。
deploymentMethod
-
部署方式
string。
appType != "" && package NotEndsWith .war && Package NotEndsWith .jar時為必要項。 允許的值:auto(自動偵測)、zipDeploy(Zip Deploy)、runFromPackage(使用執行 From Package 的 Zip Deploy)。 預設值:auto。
指定應用程式的 部署方法 。 Linux 取用應用程式不支援此設定。
當 SKU 為 Linux 取用時,必須針對 zip 部署設定 Azure Web 作業記憶體應用程式設定。 Zip 部署會使用記憶體帳戶,將應用程式程式代碼上傳並掛接至應用程式。
deploymentMethod
-
部署方式
string。
appType != "" && package NotEndsWith .war && Package NotEndsWith .jar時為必要項。 允許的值:auto(自動偵測)、zipDeploy(Zip Deploy)、runFromPackage(使用執行 From Package 的 Zip Deploy)。 預設值:auto。
選擇應用程式的 部署方法 。 Linux 取用應用程式不支援此設定。
當 SKU 為 Linux 取用時,必須針對 zip 部署設定 Azure Web 作業記憶體應用程式設定。 Zip 部署會使用記憶體帳戶,將應用程式程式代碼上傳並掛接至應用程式。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制選項和一般工作屬性。
輸出變數
此工作會定義下列 輸出變數,您可以在下游步驟、工作和階段中使用這些變數。
AppServiceApplicationUrl
所選 Azure 函式應用程式的應用程式 URL。
Remarks
Azure 函式部署工作可用來更新 Azure Functions,以將 Functions 部署至 Azure。 此工作適用於跨平臺執行 Windows、Linux 或 Mac 的 Azure Pipelines 代理程式,並使用 RunFromPackage、Zip Deploy 和 Kudu REST API 的基礎部署技術。
此工作適用於 Azure Functions 支援的語言。
工作的必要條件
下列必要條件必須在目標機器中設定,工作才能正常運作。
Azure Function(Azure 函數)
此工作可用來將 Azure Functions 專案部署至現有的 Azure 函式。 執行工作之前,應該先存在 Azure 函式應用程式。 您可以從 Azure 入口網站建立 Azure 函式應用程式。 或者, Azure PowerShell 工作 可用來執行 AzureRM PowerShell 腳本 來布建和設定 Azure 函式應用程式。
此工作可用來部署 Azure Functions (Windows/Linux)。
Azure 訂用帳戶
若要部署至 Azure,Azure 訂用帳戶必須使用 [帳戶管理] 區段中的 [服務] 索引卷標連結至 Azure Pipelines。 開啟 [帳戶管理] 畫面(畫面右上方的齒輪圖示),然後按兩下 [服務] 索引標籤,以新增 Azure 訂用帳戶以用於建置或發行管理定義。
建立 ARM 服務端點,並使用 Azure Resource Manager 端點類型。 如需更多詳細資訊,請按照 此處連結中列出的步驟操作。
此工作無法與 Azure 傳統服務端點搭配運作,而且不會在工作中的參數中列出這些連線。
部署方法
此工作提供數個部署方法。
若要變更設計工具工作中以封裝為基礎的部署選項,請展開 [
根據 Azure App Service 和 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)。
在非 Windows 代理程式上(針對任何 App Service 類型),工作依賴 Kudu REST API 來部署 Web 應用程式。
Kudu REST API
當目標為 Windows 上的 Web 應用程式、Linux 上的 Web 應用程式(內建來源)或函式應用程式時, Kudu REST API 適用於 Windows 和 Linux 自動化代理程式。 工作會使用 Kudu 將檔案複製到 Azure App Service。
Zip 部署
Zip Deploy 會從所選的套件或資料夾建立 .zip 部署套件。 然後,它會將檔案內容部署到 Azure 中 App Service 名稱函式應用程式的 wwwroot 資料夾。 此選項會覆寫 wwwroot 資料夾中的所有現有內容。 如需詳細資訊,請參閱 azure Functions
從套件執行
執行 From Package 會建立與 Zip Deploy 相同的部署套件。 Functions 運行時間會掛接整個套件,而不是將檔案部署到 wwwroot 資料夾。 當您使用此選項時,wwwroot 資料夾中的檔案會變成唯讀。 如需詳細資訊,請參閱 從套件檔案執行 Azure Functions。
Troubleshooting
錯誤:無法擷取 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。清除 [ 封存路徑之前加上的根資料夾名稱 ] 複選框:
Windows 上的函式應用程式部署成功,但應用程式無法運作
如果您的應用程式中沒有 web.config 檔案,就可能發生此問題。 您可以將 web.config 檔案新增至來源,或使用工作的 [應用程式和組態設定 ] 自動產生檔案。
選取工作,然後移至 產生 Python 的 web.config 參數、Node.js、Go 和 Java 應用程式:
選取 [ 為 Python 產生 web.config 參数] 底下的 [更多] 按鈕,Node.js、Go 和 Java 應用程式 以編輯參數:
在 [應用程式架構 ] 清單中選取您的應用程式類型。
請選擇 [確定]。 這麼做會填入產生 web.config 檔案所需的 web.config 參數。
FAQs
如何設定我的服務連線?
此工作需要 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 後方執行自我裝載代理程式。
我無法使用 Azure Resource Manager 服務連線和Microsoft裝載的代理程式來部署至內部 App Service 環境
根據設計,Microsoft裝載的代理程式將無法與 App Service 環境搭配使用。 相反地,您必須在與 App Service 環境位於相同虛擬網路的虛擬機上設定私人代理程式。 此外,請設定私人 DNS 區域,以啟用資源之間的通訊。
Examples
以下是在 Windows 上部署 Azure 函式的範例 YAML 代碼段:
variables:
azureSubscription: Contoso
# To ignore SSL error, uncomment the below variable
# VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
steps:
- task: AzureFunctionApp@2
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。
Requirements
| Requirement | Description |
|---|---|
| 管線類型 | YAML、傳統組建、傳統版本 |
| 運行 | Agent、DeploymentGroup |
| Demands | None |
| Capabilities | 此工作不符合作業中後續工作的任何需求。 |
| 命令限制 | Any |
| Settable 變數 | Any |
| 代理程式版本 | 2.104.1 或更高版本 |
| 工作類別 | Deploy |