在 Azure DevOps 成功进行 CI/CD 后,Azure FunctionApp 中没有函数。

5
我创建了一个运行在 App Service Plan Y1 上的 Azure Function 应用程序(Linux),并将我的源代码存储在 Azure DevOps Git 中。这些函数是使用 DOTNET 6 中的 C# 编写的。
下面您可以看到我的 YAML 定义,用于 CI 和分离的 CD 管道。当我执行管道时,一切都正常工作(两者都是绿色的)。然而,在部署之后,这是我的 Azure 门户中“Functions”选项卡的样子:

Azure Portal

使用VS Code Azure扩展并查看函数应用程序的文件,我得到了以下内容:

404 for bin

当我查看CI流水线的构件时,一切看起来都很好(下载的zip文件的资源管理器视图):

ZIP Content

bin文件夹在那里被填充。

一些关键点:

  • 函数应用程序中没有插槽。
  • 部署在相关的应用洞察中可见。
  • 我的参考点是Microsoft Learn

因此,在 VS Code 中搜索时出现404错误是否正常?有人遇到过类似的问题或者知道解决方案吗?

附注:

我曾经使用安装扩展的VS Code部署我的函数。今天,我在部署后收到了一个奇怪的错误消息:

Telemetry error in VS Code

CI YAML

pool:
    vmImage: 'ubuntu-latest'

trigger: none

variables:
    - name: 'Solution'
      value: '**/MyProject.sln'
    - name: 'ProjectFilter'
      value: '**/*.csproj'    
    - name: 'BuildConfiguration'
      value: 'Release'

steps:   
    - task: UseDotNet@2
      displayName: Use DotNet 6
      inputs:
          version: '6.0.x'
    - task: DotNetCoreCLI@2
      displayName: Restore
      inputs:
          command: restore
          projects: '$(ProjectFilter)'
    - task: DotNetCoreCLI@2
      displayName: Build
      inputs:
          projects: '$(ProjectFilter)'
          arguments: '--no-restore --configuration $(BuildConfiguration)'    
    - task: DotNetCoreCLI@2
      displayName: Publish Image Converter
      inputs:
          command: publish
          projects: src/Functions/**/MyProject.csproj
          publishWebProjects: false
          arguments: '--no-restore --no-build --configuration $(BuildConfiguration) --output $(Build.DefaultWorkingDirectory)/function_publish_output'
          zipAfterPublish: false
    - task: ArchiveFiles@2
      displayName: Archive Image Converter
      inputs:
          rootFolderOrFile: '$(Build.DefaultWorkingDirectory)/function_publish_output'
          includeRootFolder: false
          archiveFile: '$(Build.ArtifactStagingDirectory)/MyProject.zip'
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact'
      inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      condition: succeededOrFailed()

CD YAML

variables:
  - name: 'vmImageName'
    value: 'ubuntu-latest'
  - name: 'serviceConnectionName'
    value: 'MYCONN'
  - name: 'project'
    value: 'MYPROJECT'

resources:
  pipelines:
    - pipeline: ci
      source: 'NAMEOFCI'
      trigger: true

pool:
  vmImage: $(vmImageName)

trigger: none

stages:
  - stage: Production
    displayName: Production
    jobs:
      - deployment: Deploy
        displayName: 'Deploy'
        environment: 'Production'
        pool:
          vmImage: $(vmImageName)
        strategy:
          runOnce:
            deploy:
              steps:
                - download: ci
                  displayName: 'Download Artifact'
                  artifact: drop
                - task: AzureFunctionApp@1
                  displayName: 'Deploy Image Converter Function'
                  inputs:
                    azureSubscription: '$(serviceConnectionName)'
                    appType: functionAppLinux
                    appName: 'fapp-**********-prod'
                    package: '$(Pipeline.Workspace)/ci/drop/MyProject.zip'
                    runtimeStack: 'DOTNET|6.0'

更新

我决定重新部署我的函数,并在从Y1切换到S1时再次使用VS Code进行部署。在Azure DevOps Pipeline中仍然会显示绿色的勾号,但在门户中没有看到任何函数触发器。切换回Y1会导致VS Code中的错误再次出现。

2个回答

1

我们曾经遇到过类似的问题,不得不在应用程序设置中添加一个参数。在我们的情况下,是通过 Terraform 直接实现的。

app_settings = {
 WEBSITE_RUN_FROM_PACKAGE = "1"
}

干杯


我尝试了这个,但并没有解决问题。 - Alexander Schmidt

0

你能检查一下文件系统上确切的内容吗?你可以使用控制台或高级工具:

enter image description here


我在Azure门户中没有这个选项。我认为这是因为我使用的是Y服务计划。 - Alexander Schmidt
@AlexanderSchmidt 你是对的...控制台在Linux实例中不可用... - Shamrai Aleksander
1
在通过 vs code 或管道部署函数之前,请在门户中的函数配置中添加应用程序设置“SCM_DO_BUILD_DURING_DEPLOYMENT”以将其设置为 true。 @AlexanderSchmidt - Pravallika KV
@PravallikaKV,我添加了这个设置。我的管道现在运行了22分钟:-(。我切换到App Service S1计划,稍后将更新我的问题并提供有关文件系统的更多信息。 - Alexander Schmidt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接