我正在为我正在创建的新Azure功能设置部署管道。由于我们已经在部署工作中使用TeamCity和Octopus部署,我正在考虑使用KUDU REST API将Azure功能部署为详细here,其中Powershell命令从Octopus部署运行。
由于Azure功能驻留在Azure功能应用程序中且应用程序可以具有多个功能,是否可以一次在应用程序中部署一个功能?
答案 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)
是的,当然有可能。几乎每个功能应用程序都只有一个功能...