有什么办法,我可以使用 powershell 脚本部署到 azure 函数?CI 对我们不起作用,因为我们使用 octopus deploy 来部署到我们所有的生产服务。因此,如果有一种方法可以使用 powershell 脚本进行部署,那将是有益的。
谢谢!
有什么办法,我可以使用 powershell 脚本部署到 azure 函数?CI 对我们不起作用,因为我们使用 octopus deploy 来部署到我们所有的生产服务。因此,如果有一种方法可以使用 powershell 脚本进行部署,那将是有益的。
谢谢!
您可以使用Kudu REST API将函数部署到 Azure 。您还可以在我们的模板存储库中看到一些这样做的代码/示例。在此代码示例中,您可以看到我们的测试脚本如何调用 Kudu Rest api 以将 zip 部署到 Function App。
函数的文件夹结构是每个文件夹一个函数。您需要将 Function 文件夹部署到./site/wwwroot
Function App 上。如果您在更新之间添加任何新绑定,您还需要添加任何可能包含您的机密的应用程序设置。
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"
以防万一有像我这样需要逐步解决方案的人。这是使用 powershell 部署 azure 函数的过程(非 ARM 方式)
创建具有以下结构的 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
文件夹的 zip - 让我们为其命名my.zip
。确保压缩后my.zip
包含myFunctionName
文件夹及其所有内容
按照此处的说明找到您的发布配置文件用户名和密码,即
$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 门户中是否可用。参考
除了 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。
您还可以使用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>
方便的工具!
除了上述所有内容之外,我们还发布了 Azure Functions 的预览模块 ( https://www.powershellgallery.com/packages/Az.Functions/0.0.1-preview )。
目前,此模块包含用于管理函数应用和函数应用计划的 cmdlet。我打开了一个请求创建 cmdlet 以部署函数应用的问题。如果您对此功能感兴趣,请在https://github.com/Azure/azure-powershell/issues/10966投票。
psws
要安装 Azure Functions (Az.Functions) 模块,请从可在https://github.com/PowerShell/PowerShell/releases下载的最新版本中运行以下命令。
Install-Module -Name Az.Functions -AllowPrerelease
请试一试,并在https://github.com/Azure/azure-powershell/issues向我们发送反馈。打开问题时,请确保标题中包含 [Az.Functions]。
干杯,
弗朗西斯科