【问题标题】:Is it possible to deploy just one function in an Azure function app when there are multiple functions?当有多个函数时,是否可以在 Azure 函数应用中只部署一个函数?
【发布时间】:2018-01-19 18:07:53
【问题描述】:

我正在为我正在创建的新 Azure 功能设置部署管道。由于我们已经在工作中使用 TeamCity 和 Octopus deploy 进行部署,我正在考虑使用 KUDU REST API 来部署 Azure 功能,详细说明 here 其中 Powershell 命令是从 Octopus deploy 运行的。

由于 Azure 函数驻留在 Azure 函数应用中,并且一个应用可以有多个函数,是否可以一次只在应用中部署一个函数?

【问题讨论】:

  • 您提出的问题或遇到的问题有什么具体原因吗?
  • 随着时间的推移,我看到我们向函数应用程序添加了更多函数,并且随着对单个函数的更改,能够仅部署更改的函数会很好。这样可以最大限度地减少回归测试的范围。

标签: azure azure-functions


【解决方案1】:

我认为@Mikhail 的回答更多的是关于“是否有可能拥有一个只有一个功能的功能应用程序?”,而问题可能更多的是“即使已经有其他功能,是否可以单独部署一个功能?” .

答案是,如果您使用 Kudu zip 控制器,这是可能的,因为您可以将它瞄准您想要的任何文件夹。所以如果你部署到/api/zip/site/wwwroot/MyFunc1/,你只会影响那个功能。

需要注意的一点:zip 控制器不会传播删除。因此,如果您发布带有函数的文件,然后为相同的函数发布不带该函数的新 zip,则该文件将保留。可以使用 msdeploy 代替,因为它支持这一点。

【讨论】:

  • 谢谢大卫 - 你是对的 - “即使已经有其他功能,是否可以单独部署一个功能?”是我的问题。我已更新标题以反映这一点。
【解决方案2】:

既然您说您使用的是 Octopus Deploy,您可以使用 Deploy web 模板步骤来部署单个功能。 只需在要求自定义文件夹路径的字段中提供函数名称即可。

【讨论】:

    【解决方案3】:

    对于任何想要使用调用KUDU API 并由Octopus deploy 执行的powershell 脚本来执行此操作的人,您可以按照我的答案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"
    

    【讨论】:

      【解决方案4】:

      是的,当然有可能。几乎每个 Function App 都从 1 个函数开始...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 2010-10-10
        • 1970-01-01
        相关资源
        最近更新 更多