Попытка опубликовать сборку на Nuget.org - PullRequest
0 голосов
/ 22 мая 2019

Я новичок в Azure DevOps; однако то, что я делаю, кажется, должно быть простым: я просто хочу скомпилировать проект и опубликовать его на NuGet.org. Я сталкиваюсь с таким количеством препятствий на пути к этому, что мне кажется, что я, вероятно, неправильно использую инструмент.

У меня есть сборка, которая выглядит так:

trigger:
- master

pool:
  vmImage: 'windows-2019'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration) /property:Version=$(Build.BuildNumber)
  displayName: 'dotnet build $(buildConfiguration)'
- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'drop' 

Это успешно строит. Однако я получаю следующее предупреждение:

##[warning]Directory 'd:\a\1\a' is empty. Nothing will be added to build artifact 'drop'.

Когда я пытаюсь выполнить развертывание, я получаю ошибки, последняя из которых:

Нет файлов, соответствующих шаблону поиска.

В пакете dotnet вот шаг выпуска для пакета:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: '$(System.DefaultWorkingDirectory)/name.project'

Это то, что в настоящее время терпит неудачу, но следующий шаг предназначен для публикации в NuGet (для полноты - и в случае, если есть более простой способ сделать все это):

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: '$(System.DefaultWorkingDirectory)/name.project'

Релиз имеет артефакт, который я настроил как выход из сборки (я думаю); однако, я получаю ошибку от этого:

Нет версии для name.project или последняя версия имеет нет артефактов для публикации. Пожалуйста, проверьте исходный конвейер.

Мое понимание того, как это должно работать в целом, заключается в том, что сборка должна содержать этапы создания двоичных файлов и т. Д., Тогда как выпуск должен быть любыми этапами развертывания сборки. Таким образом, я должен иметь возможность собирать и отпускать его несколько раз в нескольких местах. Я чувствую, что это понимание не соответствует ошибкам, которые я вижу.

Правильно ли мое понимание?

Что я мог сделать не так, и, что более важно, каковы методы диагностики проблем с этим?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Попытка опубликовать сборку на Nuget.org

При первой ошибке это связано с тем, что перед использованием вы пропускаете задачу Копировать файлы .Задача «Публикация артефактов сборки ».

Проверьте задачу «Опубликовать артефакты сборки», вы можете увидеть, что эта задача используется для публикации артефактов сборки в конвейерах Azure, TFS или в общей папке .

Но после сборки проекта / решения выходные данные сохраняются в агенте сборки, а не в артефактах.Поэтому нам нужно добавить copy task перед PublishBuildArtifacts, чтобы скопировать файлы из вывода в артефакты:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    TargetFolder: '$(build.artifactstagingdirectory)'
  enabled: false

Для второй ошибки вы должны указать проект в репозитариях вместо System.DefaultWorkingDirectory, где используется для сборки проекта, измените путь на csproj в репозиториях:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: NetCoreDemo/NetCoreDemo/NetCoreDemo.csproj

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

0 голосов
/ 23 мая 2019

Вам необходимо предоставить аргумент --output для dotnet build.Добавьте следующее

--output $(Build.ArtifactStagingDirectory)

, чтобы команда выглядела примерно так:

dotnet build --configuration $(buildConfiguration) /property:Version=$(Build.BuildNumber) --output $(Build.ArtifactStagingDirectory)

, это поместит выходные данные в Staging Directory (d: \ a \ 1)\ a) , который будет включать файл *.nupkg.

Я предполагаю, что вы используете новый формат CSProj, и вы предоставляете свойства для пакета NuGet, и свойство <GeneratePackageOnBuild>true</GeneratePackageOnBuild> уже установлено,В этом случае файл *.nupkg должен находиться в выходном каталоге, который вы определили в команде сборки dotnet.Тогда вам не нужно использовать dotnet pack.В определении релиза вам просто нужно использовать задачу NuGet и использовать команду push для отправки пакета в ваш канал NuGet.

Используйте этот пост в блоге в качестве ссылки.Он не имеет полных деталей, поскольку фокусируется только на нескольких аспектах всего процесса.но это должно быть полезно для правильной сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...