尝试将内部版本发布到Nuget.org

时间:2019-05-22 20:56:21

标签: azure-devops

我是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 pack中,这是pack的发布步骤:

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没有可用的版本,或者最新版本具有   没有要发布的工件。请检查源管道。

我对总体运行方式的理解是,Build应该保留生成二进制文件等步骤,而Release应该是部署build所涉及的任何步骤。因此,我应该能够多次进行“构建”并将其“发布”到多个位置。我觉得这种理解并不能保持我所看到的错误。

我的理解正确吗?

在这里我可能会做错什么,更重要的是,诊断问题的方法是什么?

2 个答案:

答案 0 :(得分:0)

您需要为--output提供dotnet build参数。添加以下内容

--output $(Build.ArtifactStagingDirectory)

所以命令应该看起来像这样。

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

这会将输出放入工件暂存目录(d:\ a \ 1 \ a)  其中将包含*.nupkg文件。

我假设您正在使用新的CSProj格式,并且正在提供NuGet包的属性,并且已经设置了<GeneratePackageOnBuild>true</GeneratePackageOnBuild>属性。如果是这样,*.nupkg文件应该位于您在dotnet build命令中定义的输出目录中。然后,您无需使用dotnet pack。在发布定义中,您只需要使用NuGet任务并使用push命令将程序包推送到您的NuGet Feed。

使用此blog post作为参考。它没有完整的细节,因为它仅关注整个过程的几个方面。但是正确构建版本方面应该有所帮助。

答案 1 :(得分:0)

  

试图将版本发布到Nuget.org

对于第一个错误,这是因为您在使用Copy Files任务之前错失了Publish Build Artifacts任务。

选中“发布构建工件”任务,您可以查看此任务用于将构建工件发布到Azure Pipelines,TFS或文件共享

但是在构建项目/解决方案之后,输出存储在构建代理上,而不是工件上。因此,我们需要在copy task之前添加PublishBuildArtifacts,以将文件从输出复制到工件:

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

对于第二个错误,您应该在 repos 中指定项目,而不是System.DefaultWorkingDirectory中指定的项目,该位置用于构建项目,在repos中将Path更改为csproj:

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

希望这会有所帮助。