Задача конвейера 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), поэтому при необходимости убедитесь, что вы изменили его.

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