当有多个功能时,是否可以在Azure功能应用中仅部署一个功能?

时间:2017-06-03 03:46:37

标签: azure azure-functions

我正在为我正在创建的新Azure功能设置部署管道。由于我们已经在部署工作中使用TeamCity和Octopus部署,我正在考虑使用KUDU REST API将Azure功能部署为详细here,其中Powershell命令从Octopus部署运行。

由于Azure功能驻留在Azure功能应用程序中且应用程序可以具有多个功能,是否可以一次在应用程序中部署一个功能?

4 个答案:

答案 0 :(得分:2)

我认为@Mikhail的答案更多的是关于"是否有可能只有一个功能的功能应用程序?",而问题可能更多"是否可能即使已有其他功能,也要单独部署功能?"。

答案是,如果你使用Kudu拉链控制器是可能的,因为你可以将它瞄准你想要的任何文件夹。因此,如果部署到/api/zip/site/wwwroot/MyFunc1/,则只影响该功能。

有一点需要注意:zip控制器不会传播删除。因此,如果您发布带有函数的文件,并且稍后在没有它的情况下为同一函数发布新的zip,则该文件将保留。可以使用msdeploy,因为它支持此功能。

答案 1 :(得分:0)

由于您说您使用的是Octopus Deploy,因此您可以使用“部署Web模板”步骤来部署单个功能。 只需在要求自定义文件夹路径的字段中提供函数名称。

答案 2 :(得分: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

调用Kudu 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"

答案 3 :(得分:-1)

是的,当然有可能。几乎每个功能应用程序都只有一个功能...