【问题标题】:publish a nuget package from a copy从副本发布 nuget 包
【发布时间】:2020-04-24 11:58:54
【问题描述】:

看来我的队友已经关闭了他们的 nuget 服务器并去度假了。 我需要临时解决,以便在还原 nuget 包时我的 Azure Dev Ops 构建不会失败。

我有一个包的本地副本

C:\Users\kirst.nuget\packages\mypackagetemp

我想发布到临时提要。

我阅读了on publishing a package from the command line 的说明,但对第 6 步感到困惑 当然我不需要设置项目和恢复包,因为我已经有了 .nupkg

我试过命令

c:\nuget\nuget.exe push -Source "TempFeed" -ApiKey az mypackagetemp.nupkg

但出现错误

无法加载源的服务索引 https://pkgs.dev.azure.com/mycompany/myproject/_packageing/TempFeed/nuget/v3/index.json

当我重复该命令时,我收到一个凭据请求 当我输入凭据时,我连接到 Azure Dev Ops,但它们不起作用。

[更新]

我被提示输入凭据……阅读它……太混乱了。

[更新]

我将 nuget.exe 从 5.1.0.6013 升级到最新版本 5.4.0.6315 这次我有一个 UI 可以登录和消息

您的包裹已推送

但是,当 devops 管道构建运行时,我收到一条消息

unable to load the service index for source
https://pkgs.dev.azure.com/mycompany/myproject/_packageing/TempFeed/nuget/v3/index.json

我想我需要以某种方式创建一个 index.json 文件。

我的项目正在使用 mynuget.config,它在 packagesources 中有以下内容

 <add key="TempPackage" value="https://pkgs.dev.azure.com/mycompany/_packaging/myfeed/nuget" />

[更新]

我把 mynuget.config 改成了有

  <add key="TempPackage" value="https://pkgs.dev.azure.com/mycompany/_packaging/myfeed/nuget/v3/index.json" />

现在开发操作构建显示消息

未能检索到有关“Serilog.Enrichers.Thread”的信息 从远程来源 'https://pkgs.dev.azure.com/mycompany/_packaging/myfeed/nuget/FindPackagesById()?id="Serilog.Enrichers.Thread'', 响应状态码不表示成功:404(未找到)。)

我的解决方案确实使用了 Serilog。我不认为 3rd 方包使用它。

[更新]

下一次构建时,我在寻找 WindowsAzure.Storage 时遇到了另一个错误

每次构建管道时,我似乎都会得到一个不同的文件导致错误。

我的项目工件确实有 2 个提要。所需文件位于未选择的提要中。

[更新]

我尝试编辑 mynuget.config 以使用 index.json 但是我得到一个构建错误

nuget 命令失败,退出代码 (1) 和错误(无法加载 源的服务索引 https://pkgs.dev.azure.com/mycompany/_packaging/myfeed/nuget/v3/index.json。 响应状态码不表示成功:404(未找到 - ID 为“MyFeed”的 Feed 不存在

[更新]

因为新提要是基于项目的,所以我编辑了 mynuget.config 以拥有

  <add key="TempPackage" value="https://pkgs.dev.azure.com/mycompany/myproject/_packaging/myfeed/nuget/v3/index.json" />

现在可以了!

【问题讨论】:

  • this,如果你使用nuget restore任务或类似任务,我们可以确定feedstouseselect(使用devops feed+nuget.org)或config(自定义nuget .config 文件)。对于您得到的错误,这意味着 401 Unauthorized。所以这是一个与权限相关的问题。
  • 您可以使用 select 方式,并导航到 Artifacts=>feed settings=>permissions=>add user/groups=>将您的 current projectName build service 添加为所有者角色,以确保您的构建具有访问以从您的提要中获取软件包。
  • 我的临时提要是项目范围的。我想知道它是否需要在组织范围内进行
  • 1.如果您的临时提要和当前构建管道属于同一个项目,那么它应该可以工作。如果您的临时提要属于项目 A 而构建管道属于项目 B,则应确保项目 A 已将 Project B build service account 添加为成员,以便项目 B 的构建管道可以访问项目 A 的提要。 2. 并查看我的更新作为回答,您可以在配置还原任务(使用UI)时使用select方式而不是mynuget.config,单击USe packages from Azure Artifacts/tfs feed的下拉列表,如果您可以在那里找到所需的提要?
  • 我的 tempfeed 属于该项目,但我仍然需要在 mynuget.config 中提及项目名称。也许这是因为该项目还使用了公司范围的包。

标签: azure-devops nuget-package


【解决方案1】:

在 Azure Devops 门户网站中,对于您当前的项目,转到 Artifacts 选项卡并确保您的包(如 mypackagetemp.nupkg)在那里可用。

对我来说,我有自定义LibraryCore.nupkg 推送到那里。现在我们点击Connect to feed设置,选择nuget.exe就可以看到了:

将完全相同的内容复制到您自己的mynuget.config 文件中。然后您的构建管道可以访问您发布的mypackagetemp.nupkg

未能从 远程源 'https://pkgs.dev.azure.com/mycompany/_packaging/myfeed/nuget/FindPackagesById()?id="Serilog.Enrichers.Thread'', 响应状态码不表示成功:404(未找到)。)

我下次构建时遇到了一个不同的错误 WindowsAzure.Storage

这些包(Serilog.Enrichers.ThreadWindowsAzure.Storage 和 ...)都在 nuget.org 中可用,因此您还应该确保在配置文件中添加 nuget.org 作为包源:

另外:

根据你的描述,你只需要使用你的自定义devops feed和nuget.org的其他包,除了使用你的mynuget.config,你可以像这样配置你的nuget restore任务:

通过Feeds I select here 直接选择devops 提要(第二条红线),而不是我的Nuget.config 中的提要。并检查Use packages from nuget.org 复选框。然后,您可以在构建期间访问自定义提要和 nuget.org 中的包。

【讨论】:

  • 我在 mynuget.config 中有 nuget.org。我不确定为什么需要为 myProjectSamples 创建 index.json 或如何制作它
  • @KirstenGreed 为什么您尝试手动创建 index.json?既然你已经推送成功了,那么你就可以使用URL格式xxx/index.json了,我们真的不需要自己创建...你只需要按照我上面的步骤来确定你是什么Url需要复制到您的 MyNuget.config 文件。另外,我猜你的错误发生在 nuget 恢复步骤中,你可以在那里检查你的日志,在日志的末尾,你可以看到类似 feeds used 的内容,确保你的 mynuget.config 可以提供正确的提要。
  • Lance 你有关于如何创建和推送 index.json 的说明吗?
  • @KirstenGreed 抱歉,我不知道如何手动创建和推送 index.json ......而且我确信我们不需要为 devops 提要手动创建 index.json 文件: -(参见this,一旦我们在devops 工件中创建了一个名为myfeed 的提要,那么devops 使用URL https://pkgs.dev.azure.com/OrgnizationName or whatever/_packaging/feedname/nuget/v3/index.json表示这个提要。无需创建index.json 文件。 . Devops 已经帮助我们做到这一点,我们只是使用它。
  • 对于I guess I need to create an index.json file somehow.:错误unable to load the service index for source通常表示权限问题。这不应该是您需要创建 index.json 文件的原因 :-( 按照我的步骤回答,您会找到正确的 URL(它应该以 xxx\index.json 结尾,请参阅 pic2 的项目设置)。 ..希望它有所帮助:-)
猜你喜欢
  • 2012-05-22
  • 2021-05-06
  • 2014-12-21
  • 2016-03-20
  • 2020-12-26
  • 1970-01-01
  • 2019-11-08
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多