Функция Azure DevOps Publish Azure не работает

Я пытаюсь создать конвейер, чтобы опубликовать свой код в Функция Azure. Для этого я использую в качестве ссылки следующее: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-azure-devops?tabs=dotnet-core%2Cyaml%2Ccsharp
Однако я получил следующую ошибку:

Info: .NET Core SDK/runtime 2.2 and 3.0 are now End of Life(EOL) and have been removed from all hosted agents. If you're using these SDK/runtimes on hosted agents, kindly upgrade to newer versions which are not EOL, or else use UseDotNet task to install the required version.

Немного помучившись, я получил следующий Построить конвейер yaml (комментирую код, вызывающий ошибку):

trigger:
- none

pr:
- none

pool:
  vmImage: "windows-latest"

variables:
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  #output: "publish"
  #project: "*.csproj"
  solution: "**/*.sln"
  
steps:

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

#- task: DotNetCoreCLI@2
#  inputs:
#    command: publish
#    arguments: "--configuration $(buildConfiguration) --output $(output)"
#    projects: $(project)
#    publishWebProjects: false
#    modifyOutputPath: false
#    zipAfterPublish: false

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation = "$(Build.ArtifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: ArchiveFiles@2
  displayName: "Zip Files"
  inputs:
    rootFolderOrFile: "$(Build.ArtifactStagingDirectory)"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
    artifactName: "drop"

который генерирует следующий артефакт: Функция Azure DevOps Publish Azure не работает, который содержит Функция Azure DevOps Publish Azure не работает

и Конвейер выпуска:

steps:
- task: AzureFunctionApp@1
  displayName: 'Azure Function App Deploy'
  inputs:
    azureSubscription: '<SubscriptionName>'
    appType: functionApp
    appName: <FunctionApp Name>
    deploymentMethod: zipDeploy

выполнение конвейера выпуска завершается успешно Функция Azure DevOps Publish Azure не работает Однако в Azure ничего не публикуется Функция Azure DevOps Publish Azure не работаетФункция Azure DevOps Publish Azure не работает

Знаете, чего мне не хватает?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что вам не хватает этапа публикации, вы только создаете, но не публикуете. Имеющийся у вас zip-файл выглядит неправильно, после публикации вы должны получить целую кучу *.dll-файлов.

Код, который вы закомментировали, необходимо запустить после этапа сборки. В идеальном потоке так и должно быть.

Это должен быть идеальный поток.

  1. Укажите нужную версию .NET.
  2. Восстановить пакеты nuget
  3. Дотнет-сборка
  4. Донет публиковать
  5. Архивные файлы
  6. Опубликовать артефакты (релиз будет из этих артефактов)

В конвейере выпуска вы должны получить этот опубликованный артефакт, а затем развернуть его в Azure.

Строить

- task: UseDotNet@2
  displayName: 'Use .NET Core sdk'
  inputs:
    packageType: 'sdk'
    version: '6.0.x'

- task: DotNetCoreCLI@2
  displayName: Restore Packages
  inputs:
    command: restore
    projects: '**/*.csproj'

- script: |
    dotnet build --configuration Release
  workingDirectory: '<path-to-your-project-tobuild>'
  displayName: "Build"

- task: DotNetCoreCLI@2
  displayName: "Publish"
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '<path-to-your-project-tobuild>'
    publishWebProjects: false
    modifyOutputPath: false
    zipAfterPublish: false

- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build.zip"

- task: PublishBuildArtifacts@1
  displayName: "Publish Artifacts"
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build.zip'
    artifactName: 'drop'

и в вашем Конвейер выпуска

 - task: DownloadBuildArtifacts@0
        inputs:
          buildType: 'current'
          downloadType: 'single'
          artifactName: drop
          downloadPath: '$(System.ArtifactsDirectory)'

      - task: AzureRmWebAppDeployment@4
        inputs:
          ConnectionType: 'AzureRM'
          azureSubscription: '<your-sub>'
          appType: 'webApp'
          WebAppName: '<your-name>'
          packageForLinux: '$(System.ArtifactsDirectory)/**/*.zip'

Он работает нормально, единственное изменение, которое я выполнил, — это удаление задачи DownloadBuildArtifacts из конвейера выпуска, поскольку выпуски уже выполняют задачу загрузки артефакта по умолчанию, и добавление этой задачи вызывает следующую ошибку: Указанному шаблону соответствует более одного пакета: D:\a\r1\a***.zip. Пожалуйста, ограничьте шаблон поиска.

delucaezequiel 06.05.2022 14:17

Другие вопросы по теме

Похожие вопросы