我在VSTS中构建了一个在存储库中的每次提交时触发的构建。一切都很好,只有一个例外。
我们不会在每次提交时发布新版本的nuget包。因此,我们的nuget推送构建步骤失败,http状态代码为409.我已配置该步骤,以便它可以继续。
由于错误,构建只是“部分成功”。我正在使用一个构建徽章,它也表示相同(没有上下文)。
如何告诉VSTS忽略409或只是替换现有的包(在nuget.org上)?
答案 0 :(得分:4)
您无法忽略VSTS构建中的409错误,也无法替换服务器中的现有包。
我建议您可以在发行版中推送软件包,如果软件包存在则无法发布。
另一种方法是,您可以在构建期间在推送包(例如PowerShell,REST API)之前检查服务器中的包,并为推送包任务(自定义条件)设置条件。
例如:
更新
现在,NuGet Push Task支持允许跳过重复项! (只需在NuGet推送任务中选中允许跳过重复项选项。
答案 1 :(得分:1)
我们在 Azure Pipelines 上遇到了相同的重复包问题。
starian chen-MSFT 提出的解决方案很酷,但需要编写一些脚本。
我们找到了需要更少努力的解决方案。您可以使用以下参数创建命令行步骤并调用 dotnet nuget push:
dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json
关键是参数--skip-duplicate,如果包已经存在,它只会跳过包。
在变量 $(Config.NuGetApiKey) 中定义 NuGet.org 的 API 密钥。你应该把它设为秘密变量,这样它就不会出现在日志中的任何地方。
这是此命令的 YAML:
steps:
- script: |
dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json
failOnStderr: true
displayName: 'Publish NuGet Package'
答案 2 :(得分:0)
使用-skipDuplicate
标志(自NuGet 5.1起可用):
(5.1+)如果已经存在一个软件包和版本,请跳过它并继续进行下一个推送软件包(如果有)。
来源:https://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-push#options