我在将 NuGet 包推送到我们公司的 GitLab 包注册表时遇到问题。
在我的 NuGet-Package 中,我打包了一些二进制文件。这是 Nuspec 文件:
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>test</id>
<version></version>
<authors>Company</authors>
<description>Demo Project</description>
</metadata>
<files>
<file src="../../__out/test/**" target="" />
</files>
</package>
我构建了在 CI 中看起来不错的 nuget 包(我已经下载并检查了 nuget 文件)
构建完成后,我将包含此 CI 作业的 NuGet-Package 推送到注册表中。 Gitlab CI:
deploy:
stage: deployNuGet
image: mcr.microsoft.com/dotnet/sdk:5.0-buster-slim
script:
- dotnet nuget add source "$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/nuget/index.json" --name gitlab --username gitlab-ci-token --password $CI_JOB_TOKEN --store-password-in-clear-text
- dotnet nuget push __out/package/test.0.0.1.nupkg" --source gitlab
这会导致以下 CI 日志:
$ dotnet nuget add source "$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/nuget/index.json" --name gitlab --username gitlab-ci-token --password $CI_JOB_TOKEN --store-password-in-clear-text
Package source with Name: gitlab added successfully.
warn : No API Key was provided and no API Key could be found for 'https://XXXX/api/v4/projects/XXXX/packages/nuget'. To save an API Key for a source use the 'setApiKey' command.
Pushing test.0.0.1.nupkg to 'https://XXXXXX/api/v4/projects/XXXXX/packages/nuget'...
PUT https://XXXXX/api/v4/projects/XXXXXX/packages/nuget/
Created https://XXXXX/api/v4/projects/XXXXXX/packages/nuget/ 780ms
Your package was pushed.
这对于退出一段时间来说效果很好,但现在我得到了不同的行为。 代替
test
包的是 NuGet.Temporary.Package
。
当我移到错误标志上时,它会显示以下消息:
Invalide Package: failed metadate extraction
有人知道如何解决这个问题吗?
这是自我管理的 AWS 实例上的 gitlab (14.0.x) 错误。
还有一个 MR 可以解决这个问题。
这是问题的解决方案https://gitlab.com/gitlab-org/gitlab/-/issues/335488#note_623985000
这有点愚蠢,但如果有人像我一样复制粘贴命令,请确保您上传的是正确的文件(
.nupkg
文件)。我正在上传 .csproj
文件,因为我复制并粘贴了 dotnet pack
中的路径。如果您上传 .csproj
文件,Gitlab 不会发出警告或任何内容。
在 GitLab 16.9 版本(撰写本文时的最新版本)中,如果您在 .CSPROJ 文件中指定
<PackageProjectUrl>
或 <PackageIconUrl>
,则会在我们的自托管实例上发生这种情况。
“解决方案”/解决方法是删除/注释掉这些属性。