我是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所涉及的任何步骤。因此,我应该能够多次进行“构建”并将其“发布”到多个位置。我觉得这种理解并不能保持我所看到的错误。
我的理解正确吗?
在这里我可能会做错什么,更重要的是,诊断问题的方法是什么?
答案 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
希望这会有所帮助。