使用 dotnet 隔离运行时的 Azure 函数不会运行,并且在 Azure 门户中不可见

问题描述 投票:0回答:2

我在 .Net 7 运行时上有一个 Azure 函数项目,我已将其配置为在

dotnet-isolated
模式下运行。当我通过 Visual Studio 发布它并使用 Azurite 作为模拟存储时,它在本地成功运行。

问题是,当我通过 Gitlab/Octopus CI/CD 管道进行部署时,该函数不会显示在门户中 Function App 的“函数”选项卡中,并且 Azure 运行时似乎无法“查看“由我的构建过程创建的独立 .exe,它不运行该函数。

上下文:我在自托管的 Gitlab 实例上使用基于 Kubernetes 的运行器。这用于项目构建。我已设置容器来拉取

mcr.microsoft.com/dotnet/sdk:7.0
图像,这应该是构建 Function App 所需的唯一依赖项。

最终,管道被配置为运行 dotnet 命令来生成构建:

- dotnet restore --force --no-cache
- dotnet build --configuration Release

然后将构建打包并发送到 Octopus deploy 进行部署。我还没有发现

dotnet publish
能够生成 Azure Function Apps 可以运行的工作应用程序,所以我忽略了它。

到目前为止,该管道一直可以与非隔离的 Function 应用程序和基于 Windows 的运行器配合使用,但是有关 dotnet 隔离的 Function 应用程序和基于 Linux 的运行器的某些内容在运行时会导致问题。

我还注意到,如果不将

--runtime
参数设置为
win
,运行程序只会生成针对 Linux 的应用程序。构建中不存在 .exe 文件。

托管环境是 EP1 层 Windows Azure 应用程序功能。

这是 Function 项目的项目文件

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <ImplicitUsings>enable</ImplicitUsings>
    <OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.16.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues" Version="5.1.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.2.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.11.0" />
    <PackageReference Include="OpenAI" Version="1.7.2" />
</ItemGroup>
<ItemGroup>
    <ProjectReference Include="..\Core.Jobs\Core.Jobs.csproj" />
    <ProjectReference Include="..\Core\Core.csproj" />
</ItemGroup>
<ItemGroup>
    <None Update="host.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="appsettings.json">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
    <None Update="nrdiag.exe">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="nrdiag_arm64.exe">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="nrdiag_x64.exe">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

我们的配置文件中的 FUNCTIONS_WORKER_RUNTIME 设置:

{
"IsEncrypted": false,
"Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
},
"ConnectionStrings": {
}

}

azure gitlab azure-functions gitlab-ci-runner dotnet-build
2个回答
0
投票

我尝试通过在 Gitlab 管道中使用 zip 命令以替代方法部署该函数,如下所示:-

我的带有函数触发器的存储库 zip:-

enter image description here

variables:
  AZURE_CLIENT_ID: xxxxx838-xxx1435cb
  AZURE_CLIENT_SECRET: xxxxxxx8313-xxxifbLE
  AZURE_TENANT_ID: xxxxx-xxx-xx038592395
  AZURE_WEBAPP_NAME: siliconfunc653

stages:
  - deploy

deploy:
  stage: deploy
  image: mcr.microsoft.com/dotnet/sdk:7.0
  script:
    - curl -sL https://aka.ms/InstallAzureCLIDeb | bash
    - apt-get install curl && curl -sL https://deb.nodesource.com/setup_12.x | bash -
    - apt-get install nodejs
    - npm install -g azure-functions-core-tools@3 --unsafe-perm true
    - az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID
    - func azure functionapp publish $AZURE_WEBAPP_NAME --csharp
  only:
    - main

您可以直接在上面的 yml 脚本中使用以下命令,而不是使用

func azure function-app-name
发布命令:-

 az functionapp deployment source config-zip --name $AZURE_WEBAPP_NAME --resource-group Insights_Test --src function.zip

此外,请确保您在功能配置中添加了以下设置:-

enter image description here

enter image description here

参考:-

.gitlab-ci.yml · 主 · 伟林 / gitlab-ci-Azure-Function · GitLab

用于部署 Azure Function 的 Gitlab CI 脚本 - DEV 社区


0
投票

不确定这是否回答了原来的问题;但在将项目从“netcoreapp3.1”升级到.net 7 时,我遇到了类似的问题。

函数在本地运行,但未在 Azure 函数应用程序(应用服务环境 v2 上的 Windows)中加载。 我重现此错误的方法是在已升级的 .net 7 功能中升级 nuget 软件包(今年早些时候升级)

更新了以下 azure.functions;然后功能就没有再次加载。
(注意:我还没有阅读有关更新内容和可能发生重大更改的文档,也没有调查对 Microsoft.Azure 的依赖关系的内部库的依赖关系)

  • 根据问题详细信息,我认为问题可能出在

    Microsoft.Azure.Functions.Worker.Core”版本=“1.16.0”

来自:(工作中)

Microsoft.Azure.Functions.Worker" Version="1.14.0"
Microsoft.Azure.Functions.Worker.Core" Version="1.12.0"
Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13"
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.7.0"
Microsoft.Azure.Functions.Worker.Sdk" Version="1.10.0"

致:(不工作)

Microsoft.Azure.Functions.Worker" Version="1.20.0"
Microsoft.Azure.Functions.Worker.Core" Version="1.16.0"

Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0"   
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.14.1"
Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.1"
© www.soinside.com 2019 - 2024. All rights reserved.