如何使用dotnet将.nupkg推送到私有NuGet源?

时间:2019-07-15 14:33:39

标签: ubuntu .net-core nuget aws-codebuild

我正在创建一个引用CodeBuild项目的AWS CodePipeline。此CodeBuild启动一个Ubuntu计算实例,并引用一个buildspec.yml文件。在构建后的阶段,我想将.nupkg推送到私有的NuGet源。

以下 Windows 命令行逻辑可以正常工作:

> dotnet pack path/to/my/proj.csjproj
> nuget sources add -name MyPrivateRepo -source https://source -username u -password p
> nuget push path/to/my/newlypacked.nupkg -ApiKey key -Source https://source

由于nuget.exe在Ubuntu实例上不可用(可能是如果我安装mono并执行mono nuget.exe ...,但这会花费太长时间,即使在大型构建实例上也是如此),我想使用dotnet nuget。我将如何实现这一目标?

我知道dotnet nuget应该可以达到我上面显示的效果,但是我发现文档比较晦涩,因此我很难找到类似的帖子。

我已经尝试安装nuget,并进行以下体操操

> dotnet pack path/to/my/proj.csjproj
> apt-get install nuget -y
> mozroots --import --sync
> nuget sources add -name MyPrivateRepo -source https://source -username u -password p
> nuget push path/to/my/newlypacked.nupkg -ApiKey key -Source https://source

结果如下:

Package Source with Name: MyPrivateRepo added successfully.

Pushing proj.nupkg to 'https://source'... 
  PUT https://source 
  BadRequest https://source 120ms 
400 (Bad Request - The package does not appear to be a valid ZIP archive (could not find a valid end of central directory record) (DevOps Activity ID: ...)) 
System.Net.Http.HttpRequestException: 400 (Bad Request - The package does not appear to be a valid ZIP archive (could not find a valid end of central directory record) (DevOps Activity ID: ...))
...
...

我确认.nupkg确实是有效的NuGet程序包,并且位于我指定的位置。

我也尝试过

> dotnet pack path/to/my/proj.csjproj
> apt-get install nuget -y
> mozroots --import --sync
> nuget sources add -name MyPrivateRepo -source https://source -username u -password p
> dotnet nuget push path/to/my/newlypacked.nupkg -k key -s https://source

结果如下:

Package Source with Name: MyPrivateRepo added successfully.
error: Unable to load the service index for source https://source. 
error:   Response status code does not indicate success: 401 (Unauthorized). 

有人可以引导我朝正确的方向前进吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

我已经开始工作了!事实证明,dotnet CLI在非常特定的位置查找NuGet配置(尽管在参考其文档后,我看不到我尝试的其他位置为何不起作用):~/.nuget/NuGet/NuGet.Config。请注意,这是区分大小写的!

为了使构建管道正常工作,我具有以下buildspec.yml结构:

...
> apt-get install nuget -y
> mozroots --import --sync
> nuget sources add -name MyPrivateRepo -source https://source -username u -password p
> mkdir -p ~/.nuget/NuGet && mv ~/.config/NuGet/NuGet.Config ~/.nuget/NuGet
> dotnet pack path/to/my/proj.csjproj
> dotnet nuget push path/to/my/newlypacked.nupkg -k key -s https://source
...

不需要单声道安装。我希望这会有所帮助!