我在 .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": {
}
}
我尝试通过在 Gitlab 管道中使用 zip 命令以替代方法部署该函数,如下所示:-
我的带有函数触发器的存储库 zip:-
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
此外,请确保您在功能配置中添加了以下设置:-
参考:-
不确定这是否回答了原来的问题;但在将项目从“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"