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

91zkwejq  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(111)

我在.Net 7运行时上有一个Azure函数项目,我已经将其配置为在dotnet-isolated模式下运行。当我通过Visual Studio发布它时,它在本地成功运行,使用Azurite作为模拟存储。
问题是,当我通过我的Gitlab/Octopus CI/CD管道部署时,该函数不会显示在门户中Function App的“Functions”选项卡中,并且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文件。
托管环境是EP 1层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": {
}


}

flvlnr44

flvlnr441#

我试着在Gitlab管道中使用zip命令,用另一种方法部署Function,如下所示:

  • 使用函数触发器zip的仓库:-*

x1c 0d1x的数据

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 publish命令:

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


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



参考号:-

.gitlab-ci.yml · main · Wai Lin / gitlab-ci-Azure-Function · GitLab
Gitlab CI script to deploy a Azure Function - DEV Community

相关问题