16

有什么办法,我可以使用 powershell 脚本部署到 azure 函数?CI 对我们不起作用,因为我们使用 octopus deploy 来部署到我们所有的生产服务。因此,如果有一种方法可以使用 powershell 脚本进行部署,那将是有益的。

谢谢!

4

5 回答 5

11

您可以使用Kudu REST API将函数部署到 Azure 。您还可以在我们的模板存储库中看到一些这样做的代码/示例。在代码示例中,您可以看到我们的测试脚本如何调用 Kudu Rest api 以将 zip 部署到 Function App。

函数的文件夹结构是每个文件夹一个函数。您需要将 Function 文件夹部署到./site/wwwrootFunction 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"
于 2016-04-19T23:19:10.267 回答
10

以防万一有像我这样需要逐步解决方案的人。这是使用 powershell 部署 azure 函数的过程(非 ARM 方式)

  1. 创建具有以下结构的 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
    
  2. 创建myFunctionName文件夹的 zip - 让我们为其命名my.zip。确保压缩后my.zip包含myFunctionName文件夹及其所有内容

  3. 按照此处的说明找到您的发布配置文件用户名和密码,即

    $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"
  1. <yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD。在出现的页面中,导航到site -> wwwroot。您应该会在此处看到提取的 zip 文件的内容,并且您还可以验证您的 azure 函数在 azure 门户中是否可用。

参考

  1. https://github.com/projectkudu/kudu/wiki/REST-API#sample-of-using-rest-api-with-powershell

  2. http://markheath.net/post/deploy-azure-functions-kudu-powershell

于 2017-06-14T17:55:53.860 回答
7

除了 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

于 2016-04-20T00:08:08.447 回答
5

您还可以使用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>

方便的工具!

于 2017-06-09T11:44:58.933 回答
3

除了上述所有内容之外,我们还发布了 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]。

干杯,

弗朗西斯科

于 2020-01-23T18:47:09.153 回答