.NET 7 中的 Azure Functions(独立)发布到 Azure,加载了 0 个函数

nik*_*eem 5 .net c# azure azure-functions github-actions

我正在尝试使用 GitHub Actions 工作流程将带有 .NET 7 的 Azure Function(隔离)部署到 MS Azure。一切似乎运行良好,但由于某种原因,当我将其部署到云时,该功能未加载。当我运行本地主机功能时,一切都很好(在我的机器上工作),但部署后就不行了。

public class DemoFunction
{
    private readonly ILogger _logger;

    public DemoFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<DemoFunction>();
    }

    [Function("DemoFunction")]
    public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
    {
        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString("Demo function works!");

        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

Function App 仅包含一个具有 HTTP 绑定的函数(无需身份验证,允许匿名请求)。我使用 Bicep 部署基础设施,使用 GH Actions 部署 Function App。日志分析显示了这一点: 在此输入图像描述

因此,由于某种原因,它确实找到了该函数,但没有加载它。如果我导航到 Azure 门户中的“功能”边栏选项卡,我看不到任何功能。该项目只是一个 POC 项目,可在https://github.com/nikneem/function-deployment-with-gh-actions上公开托管

有任何想法吗?

nik*_*eem 4

哇哦,我在部署过程中找到了答案。在我的 GitHub Actions 工作流程中,我将dotnet publishAzure Functions 项目复制到输出文件夹中。我压缩了输出文件夹的内容并将该 zip 文件发布为工作流程工件。

然后在部署中,我下载了工作流工件(例如该 zip 文件)并使用该 zip 文件进行了 Zip 部署。

现在显然,这个 zip 文件出了问题,所以我删除了手动 zip 操作,主要是因为我发现当您传递包含所有已发布文件的文件夹时,GitHub 操作中的部署步骤也有效。

因此,我的 GH Actions 工作流程中的发布步骤现在如下所示:

publish-functions:
  runs-on: ubuntu-latest
  needs: versionize
  steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-dotnet@v3
      with:
        dotnet-version: "7.0.x"
    - name: Restore packages
      working-directory: src
      run: dotnet restore
    - name: Publish functions app
      working-directory: src
      run: dotnet publish $FUNCTIONS_PATH/$FUNCTIONS_PROJECT -c Release --no-restore -o functionsout /p:Version=${{needs.versionize.outputs.semver}}
    - name: Upload functions artifact
      uses: actions/upload-artifact@v3
      with:
        name: player-functions
        path: src/functionsout/*
Run Code Online (Sandbox Code Playgroud)

部署步骤如下所示:

deploy-function-app:
  runs-on: ubuntu-latest
  needs: [publish-functions, deploy-infrastructure-prod]
  steps:
    - uses: actions/download-artifact@v3
      with:
        name: player-functions
        path: function
    - uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_PROD}}
    - name: Deploy Azure Functions app
      uses: Azure/functions-action@v1
      with:
        app-name: ${{needs.deploy-infrastructure-prod.outputs.functionResourceName}}
        package: function
Run Code Online (Sandbox Code Playgroud)

查看部署过程生成的日志,它仍然会创建一个 zip 文件并部署它。但这是一个与我手动创建的不同的 zip 文件。现在一切正常;)

  • 我遇到了同样的问题,答案带来了解决方案。我的 zip 命令省略了“.azurefunctions”隐藏文件夹。更改我的命令以包含该文件夹后,部署也可以使用我的档案进行 (3认同)