2017-06-03 67 views
0

我正在爲我創建的新Azure函數設置部署管道。由於我們已經在部署中使用TeamCity和Octopus部署,因此我正在考慮使用KUDU REST API部署Azure功能,詳細說明here,其中Powershell命令是從Octopus部署運行的。當有多個函數時,是否可以在Azure函數應用程序中部署一個函數?

隨着Azure的功能駐留在Azure的功能應用和一個應用程序可以有多種功能,是有可能只是在一個時間內的應用程序部署一個功能?

+0

發佈配置用戶名和密碼是否有一個具體的原因,你問或你遇到的問題? – Mikhail

+0

隨着時間的推移,我看到我們在功能應用程序中增加了更多的功能,並且隨着對單個功能的更改,只能部署已更改的功能會很好。這樣迴歸測試的範圍可以被最小化。 – brokenbeta

回答

1

我覺得@米哈伊爾的回答更多的是關於「是否有可能有一個函數的應用程序只有一個功能?」,而問題可能是更「是它即使已經有其他人可以單獨部署一個功能?「。

得到的答覆是,這是可能的,如果你使用的庫杜壓縮控制器,因爲你可以在任何你想要的文件夾瞄準它。所以如果你部署到/api/zip/site/wwwroot/MyFunc1/,你只會影響這一個功能。

有一點要注意的:拉鍊控制器不傳播刪除。所以如果你發佈一個帶有函數的文件,並且以後發佈一個沒有它的新的zip文件,那麼這個文件將會保留下來。可以使用msdeploy,因爲它支持這個。

+0

謝謝大衛 - 你是對的 - 「是否可以單獨部署一個功能,即使已經有其他功能了?」是我的問題。我更新了標題以反映這一點。 – brokenbeta

0

是的,當然這是可能的。幾乎每一個功能應用只有1個功能開始...

0

既然你說你正在使用八達通部署,您可以使用部署Web模板步部署一個單一的功能。 只需在要求自定義文件夾路徑的字段中提供函數名稱即可。

0

任何人想要做到這一點使用一個powershell腳本調用KUDU API,並通過Octopus deploy(您也可以參考其他的答案在這個問題上的一些有趣的方法)

執行,你可以按照我的回答 here步驟

以下是將一個功能部署到功能應用程序的相關部分。

讓您的描述here

$creds = Invoke-AzureRmResourceAction -ResourceGroupName YourResourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName YourWebApp/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force  
$username = $creds.Properties.PublishingUserName 
$password = $creds.Properties.PublishingPassword 

調用的庫杜REST API將功能推到功能應用

$username = '<publish username>' #IMPORTANT: use single quotes as username may contain $ 
$password = "<publish password>" 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) 

$apiUrl = "https://<yourFunctionApp>.scm.azurewebsites.net/api/zip/site/wwwroot" 
$filePath = "<yourFunctionName>.zip" 
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $filePath -ContentType "multipart/form-data" 
相關問題