Я пытаюсь создать конвейер, чтобы опубликовать свой код в Функция 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"
который генерирует следующий артефакт: , который содержит
и Конвейер выпуска:
steps:
- task: AzureFunctionApp@1
displayName: 'Azure Function App Deploy'
inputs:
azureSubscription: '<SubscriptionName>'
appType: functionApp
appName: <FunctionApp Name>
deploymentMethod: zipDeploy
выполнение конвейера выпуска завершается успешно Однако в Azure ничего не публикуется
Знаете, чего мне не хватает?
Я считаю, что вам не хватает этапа публикации, вы только создаете, но не публикуете. Имеющийся у вас zip-файл выглядит неправильно, после публикации вы должны получить целую кучу *.dll-файлов.
Код, который вы закомментировали, необходимо запустить после этапа сборки. В идеальном потоке так и должно быть.
Это должен быть идеальный поток.
В конвейере выпуска вы должны получить этот опубликованный артефакт, а затем развернуть его в 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. Пожалуйста, ограничьте шаблон поиска.