Задача конвейера Azure DotNetCoreCLI@2 - выходная папка артефакта
В нашем проекте.NET Web API мы попытались создать проект API в Azure DevOps и опубликовать артефакт в папке с задачей конвейера ниже:
- task: DotNetCoreCLI@2
displayName: Publish web API artifact
inputs:
command: publish
publishWebProjects: false
arguments: '$(Build.SourcesDirectory)\XYZ.Research.API\XYZ.Research.API.csproj --configuration $(BuildConfiguration) --output testpath'
zipAfterPublish: true
modifyOutputPath: true
Но я не уверен, в какой папке хранится артефакт. Ниже представлен протокол этого шага:
2020-07-31T12:04:23.6282186Z ##[section]Starting: Publish web API artifact
2020-07-31T12:04:23.6590490Z ==============================================================================
2020-07-31T12:04:23.6591051Z Task : .NET Core
2020-07-31T12:04:23.6591393Z Description : Build, test, package, or publish a dotnet application, or run a custom dotnet command
2020-07-31T12:04:23.6591740Z Version : 2.172.2
2020-07-31T12:04:23.6591974Z Author : Microsoft Corporation
2020-07-31T12:04:23.6592357Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
2020-07-31T12:04:23.6592942Z ==============================================================================
2020-07-31T12:04:25.5581194Z [command]C:\windows\system32\chcp.com 65001
2020-07-31T12:04:25.5581889Z Active code page: 65001
2020-07-31T12:04:25.5583746Z 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.
2020-07-31T12:04:25.5588792Z [command]C:\hostedtoolcache\windows\dotnet\dotnet.exe publish d:\a\1\s\XYZ.Research.API\XYZ.Research.API.csproj --configuration Release --output testpath
.....
some warning message ignored
.....
2020-07-31T12:04:38.0843543Z XYZ.Research.API -> d:\a\1\s\XYZ.Research.API\bin\Release\netcoreapp3.0\XYZ.Research.API.dll
2020-07-31T12:04:38.9127845Z XYZ.Research.API -> d:\a\1\s\testpath\
2020-07-31T12:04:46.0295716Z Info: Azure Pipelines hosted agents have been updated to contain .Net Core 3.x (3.1) SDK/Runtime along with 2.1. Unless you have locked down a SDK version for your project(s), 3.x SDK might be picked up which might have breaking behavior as compared to previous versions.
2020-07-31T12:04:46.0296632Z Some commonly encountered changes are:
2020-07-31T12:04:46.0297619Z If you're using `Publish` command with -o or --Output argument, you will see that the output folder is now being created at root directory rather than Project File's directory. To learn about more such changes and troubleshoot, refer here: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops#troubleshooting
2020-07-31T12:04:46.0442329Z ##[section]Finishing: Publish web API artifact
Поскольку на следующем этапе (развертывание) нам понадобится расположение файла, я попробовал
d:\a\1\s\testpath\XYZ.Reserch.API.zip
d:\a\1\s\testpath\XYZ.Reserch.API\XYZ.Reserch.API.zip
но ни в одном из этих мест нет файла артефакта.
Кто-нибудь видел эту проблему раньше? Любая помощь будет оценена.
------------------- Обновить ------------------------------ -
В соответствии с предложением @Source Code я использовал задачу "PowerShell@2" и обнаружил, что файл артефакта фактически находится в "D:\a\1\s\testpath\testpath.zip". Это означает, что подпапка testpath создается в $(Build.SourceDirectory), а файл артефакта также переименовывается в test.zip.
1 ответ
Я бы порекомендовал вам добавить задачу PowerShell/Bash/Cmd после задачи DotNetCoreCLI@2 и запустить встроенный скрипт с командой ls, которая должна перечислить для вас все элементы результатов. Это позволит вам увидеть, что на самом деле происходит после выполнения задачи.
Если в агенте Windows:
- task: PowerShell@2
displayName: List Files Post Publish
inputs:
targetType: inline
script: Get-ChildItem
Если в Linux или Mac
- task: Bash@3
displayName: List Files Post Publish
inputs:
targetType: inline
script: ls
Кроме того, я заметил, что вы предоставляете свой файл csproj через параметр arguments. Для этого следует использовать параметр с именем projects. Также вы можете рассмотреть возможность использования промежуточного каталога артефактов в качестве выходного каталога. Задача будет выглядеть так:
- task: DotNetCoreCLI@2
displayName: Publish web API artifact
inputs:
command: publish
projects: '$(Build.SourcesDirectory)\XYZ.Research.API\XYZ.Research.API.csproj'
publishWebProjects: false
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
modifyOutputPath: true
Следует отметить одну важную вещь: если вы меняете выходной каталог, убедитесь, что вы изменили рабочий каталог для задач PowerShell или Bash, чтобы вывести содержимое правильного каталога. По умолчанию это $(Build.SourcesDirectory), поэтому при необходимости убедитесь, что вы изменили его.