Как опубликовать автономный пакет ядра dotnet через пользовательский интерфейс конвейера в артефакты Azure?

Я создал приложение с использованием ядра dotnet. Я создаю его как автономный пакет. Я пытаюсь опубликовать его на сервере артефактов Azure с помощью пользовательского интерфейса конвейера. Я смог успешно собрать автономный пакет и смог успешно опубликовать его. Мне не удалось выяснить, как получить команду NuGet pack (и последующую push-загрузку Nuget) для получения автономного пакета для размещения в качестве загружаемого пакета на сервере артефактов.

Вот YAML для моей задачи публикации:

steps:

- task: DotNetCoreCLI@2

  displayName: 'dotnet publish'

  inputs:

    command: publish

    publishWebProjects: false

    projects: '**/TelemetryReceiver.csproj'

    arguments: '-c release -r win-x64 --self-contained true'

Вот YAML для задачи, которая копируется для сборки:

Ваш конвейер сборки ссылается на переменную BuildConfiguration, которую вы выбрали для настройки во время очереди. Создайте или отредактируйте конвейер сборки для этого файла YAML, определите переменную на вкладке «Переменные», а затем выберите параметр, чтобы сделать ее настраиваемой во время очереди. См. https://go.microsoft.com/fwlink/?linkid=865971.

steps:

- task: CopyFiles@2

  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'

  inputs:

    SourceFolder: '$(build.sourcesdirectory)'

    Contents: '**\bin\$(BuildConfiguration)\**'

    TargetFolder: '$(build.artifactstagingdirectory)'

Here is the YAML for publish:

steps:

- task: PublishBuildArtifacts@1

  displayName: 'Publish Artifact: drop'

  inputs:

    PathtoPublish: '$(build.artifactstagingdirectory)\src\TelemetryReceiver\bin\Release\netcoreapp2.2\win-x64'

And here is the YAML for the NuGet pack:

steps:

- task: NuGetCommand@2

  displayName: 'NuGet pack'

  inputs:

    command: pack

    packagesToPack: src/telemetryreceiver/telemetryreceiver.csproj

    versioningScheme: byPrereleaseNumber

На этапе копирования журналы показывают, что полный автономный пакет действительно копируется в \ src \ TelemetryReceiver \ bin \ Release \ netcoreapp2.2 \ win-x64. Но как только последний пакет загружается с сервера артефактов, он получает только содержимое каталога netcoreapp2.2.

Я, конечно, смущен тем, как должны быть связаны задачи dotnet publish и NuGet pack. Кажется, что оба независимо друг от друга оценивают файл .csproj, и все.


person WayneRoseberry    schedule 22.08.2019    source источник
comment
Вы используете несколько различных технологий, в которых вы можете делать все с помощью dotnet команд: сначала используйте dotnet pack для создания файла .nupkg, затем используйте команду dotnet push, чтобы отправить nupkg в канал nuget.   -  person Rob Bos    schedule 22.08.2019
comment
Я переключился только на команды .NET Core, добавил пакет dotnet и dotnet push, а затем отключил предыдущие задачи NuGet Pack и NuGet Push. Результат был таким же. Я не уверен в связи между командами dotnet publish и dotnet pack. Публикация кажется необходимой для создания автономного пакета, но команда pack использует файл .csproj для создания пакета. Я не понимаю, как я беру результат команды публикации и передаю его команде pack.   -  person WayneRoseberry    schedule 22.08.2019
comment
Делаете ли вы сначала пакет, а затем толчок?   -  person Rob Bos    schedule 22.08.2019
comment
да. Он идет публиковать, паковать, толкать   -  person WayneRoseberry    schedule 22.08.2019
comment
Есть ли у вас в артефактах файл nupkg? Есть ли предупреждение от шага толчка?   -  person Rob Bos    schedule 22.08.2019
comment
Да, в файле nupkg. Это то, что я скачиваю и разархивирую. И никаких предупреждений. Трубопровод весь зеленый, ошибок нет.   -  person WayneRoseberry    schedule 22.08.2019


Ответы (1)


Как опубликовать автономный пакет ядра dotnet через пользовательский интерфейс конвейера в артефакты Azure?

Вы можете неправильно понять задачу dotnet publish, которая не используется для публикации пакета nuget. Он использовался для создания .zip файлового архива, готового для публикации в веб-приложении:

Проверьте документ Развернуть веб-приложение для получения дополнительных сведений.

В качестве теста вы можете просмотреть содержимое этого .zip:

введите здесь описание изображения

Чтобы опубликовать автономный основной пакет dotnet через пользовательский интерфейс конвейера для артефактов Azure, вам просто нужно использовать Copy task и PublishBuildArtifacts task.

Причина, по которой он выбирает только содержимое каталога "netcoreapp2.2", заключается в том, что, поскольку вы не используете правильный синтаксис в Contents в copy task, его следует указать в .nupkg:

 Contents: '**\bin\$(BuildConfiguration)\**\*.nupkg'

Затем в артефактах:

введите здесь описание изображения

В качестве альтернативы мы могли бы указать папку пакета $(Build.ArtifactStagingDirectory) в задаче nuget pack:

введите здесь описание изображения

В этом случае нам не нужна задача копирования для копирования пакета в ArtifactStagingDirectory, просто используйте задачу PublishBuildArtifacts.

Надеюсь это поможет.

person Leo Liu-MSFT    schedule 23.08.2019
comment
Не помогло. Выполнение только задачи копирования и процедуры задачи publishbuildartifacts, как описано выше, не привело к созданию новой версии в хранилище артефактов. Выполнение пакета nuget (либо базовой версии .NET, либо версии задачи NuGet для задачи) завершается только содержимым каталога netcoreapp2.2 в файле nupkg. - person WayneRoseberry; 23.08.2019