2017-06-03 69 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" 
相关问题