有什么办法,我可以使用PowerShell脚本部署到azure函数吗? CI不适用于我们,因为我们使用章鱼部署来部署到我们的所有生产服务。因此,如果有一种方法可以使用PowerShell脚本进行部署,那将是有益的。
谢谢!
答案 0 :(得分:10)
您可以使用Kudu REST API将功能部署到Azure。您还可以在templates repository中看到一些代码/示例。在this代码示例中,您可以看到我们的测试脚本如何调用Kudu Rest apis来将zip部署到功能应用程序。
函数的folder structure是每个文件夹的函数。您需要在Function App上将Function文件夹部署到./site/wwwroot
。如果在更新之间添加任何新绑定,还需要添加可能包含您机密的任何应用程序设置。
PowerShell代码看起来像是:
$apiUrl = $config.scmEndpoint + "/api/zip/"
if ($destinationPath)
{
$apiUrl = $apiUrl + $destinationPath
}
$response = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $config.authInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"
答案 1 :(得分:7)
以防万一像我这样的人需要一步一步的解决方案。以下是使用powershell(非ARM方式)
部署azure函数的过程使用以下结构创建azure函数
myFunctionName(Folder)
|
|_ function.json (contains info on input, output, trigger)
|_ run.csx (contains code)
|_ [OPTIONAL] project.json (for nuget packages)
|_ [OPTIONAL] bin(Folder)
|_ all custom DLLs go in this folder
创建myFunctionName
文件夹的压缩文件 - 让我们将其命名为my.zip
。压缩后my.zip
包含myFunctionName
文件夹及其所有内容
按照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
然后使用PowerShell调用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"
<yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD
。在显示的页面中,导航至site -> wwwroot
。您应该看到在那里提取的zip文件的内容,您还可以验证您的azure功能在azure门户中是否可用。<强>参考强>
答案 2 :(得分:6)
除了Chris所描述的内容之外,还有一个可用于部署功能的第一类ARM API。以下是PowerShell中的内容:
Function DeployHttpTriggerFunction($ResourceGroupName, $SiteName, $FunctionName, $CodeFile, $TestData)
{
$FileContent = "$(Get-Content -Path $CodeFile -Raw)"
$props = @{
config = @{
bindings = @(
@{
type = "httpTrigger"
direction = "in"
webHookType = ""
name = "req"
}
@{
type = "http"
direction = "out"
name = "res"
}
)
}
files = @{
"index.js" = $FileContent
}
test_data = $TestData
}
New-AzureRmResource -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/functions -ResourceName $SiteName/$FunctionName -PropertyObject $props -ApiVersion 2015-08-01 -Force
}
有关基础API的信息,请参阅https://github.com/projectkudu/kudu/wiki/Functions-API。
答案 3 :(得分:3)
您还可以使用Azure CLI 2.0 + Azure Function CLI从命令行/ powershell部署Azure功能
Azure CLI API可用于使用命令
配置功能应用程序az functionapp create --name $functionappName --resource-group $resourceGroup --storage-account $storageAccountName --consumption-plan-location $consumptionPlanLocation
并应用应用程序设置
az functionapp config appsettings set --name $functionappName --resource-group $resourceGroup --settings "test=value"
Azure Function CLI api可用于部署您拥有的功能
func azure functionapp publish <azurefunctionapp>
方便的工具!
答案 4 :(得分:3)
除上述所有功能外,我们还发布了Azure功能(https://www.powershellgallery.com/packages/Az.Functions/0.0.1-preview)的预览模块。
当前,此模块包含用于管理功能应用程序和功能应用程序计划的cmdlet。我已经提出了一个问题,要求创建一个cmdlet来部署功能应用程序。如果您对此功能感兴趣,请在https://github.com/Azure/azure-powershell/issues/10966上投票。
要安装Azure Functions(Az.Functions)模块,请从https://github.com/PowerShell/PowerShell/releases下载最新版本的psws
中运行以下命令。
Install-Module -Name Az.Functions -AllowPrerelease
请尝试一下,并通过https://github.com/Azure/azure-powershell/issues向我们发送反馈。打开问题时,请确保标题中包含[Az.Functions]。
干杯
Francisco