NuGet 恢复使用 2 个源,有和没有 http 代理
NuGet restore using 2 sources with and without http proxy
我们公司后面是HTTP代理,访问nuget.org恢复包时需要用到它。
我们还使用内部 NuGet 服务器,在其中发布一些打包为 NuGet 的共享组件。
运行 CI 构建时,我们希望从两个来源恢复包。有什么方法可以将 NuGet 配置为对其中一个使用代理而不对另一个使用代理?
- 全局nuget.org - 使用代理
- 内部 NuGet 服务器 - 不直接使用代理
如果我在 NuGet.config 中定义了一个 http_proxy,它将用于两个来源,因此内部来源会失败。
如果我不定义它,它会因全局源而失败。
在 visual studio 中,您可以这样做,工具 -> NuGet 包管理器 -> 包管理器设置 -> NuGet 包管理器 -> 包源
我最终故意调用了 "nuget restore" 两次,作为 CI 在主要 MsBuild 解决方案之前构建的单独步骤。
第一次调用是针对带代理的全局源,第二次调用是针对不带代理的本地源。
它仍然在第一个 运行 抱怨本地源中找不到的包,所以我忽略了第一个 运行.
的退出代码
这是我在 CI 构建(在 TeamCity 中)中使用的 Windows 批处理代码:
set NUGET_PATH="%system.SolutionDirectory%\.nuget\NuGet.exe"
set NUGET_GLOBAL=https://www.nuget.org/api/v2/
set NUGET_LOCAL=%teamcity.nuget.feed.server%
echo Restoring from global source with proxy
set http_proxy=%env.http_proxy_global%
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_GLOBAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%
echo Restoring from local source without proxy
set http_proxy=
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_LOCAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%
exit %%ERRORLEVEL%%
请记住,此处的语法特定于 TeamCity,即双百分号用于包围环境变量,因为单个百分号用于引用 TeamCity 参数。
作为替代方案,您可以使用 ProGet 作为 NuGet 包的唯一来源,因为它可以在本地镜像 NuGet.org 包源。
我们公司后面是HTTP代理,访问nuget.org恢复包时需要用到它。
我们还使用内部 NuGet 服务器,在其中发布一些打包为 NuGet 的共享组件。
运行 CI 构建时,我们希望从两个来源恢复包。有什么方法可以将 NuGet 配置为对其中一个使用代理而不对另一个使用代理?
- 全局nuget.org - 使用代理
- 内部 NuGet 服务器 - 不直接使用代理
如果我在 NuGet.config 中定义了一个 http_proxy,它将用于两个来源,因此内部来源会失败。 如果我不定义它,它会因全局源而失败。
在 visual studio 中,您可以这样做,工具 -> NuGet 包管理器 -> 包管理器设置 -> NuGet 包管理器 -> 包源
我最终故意调用了 "nuget restore" 两次,作为 CI 在主要 MsBuild 解决方案之前构建的单独步骤。
第一次调用是针对带代理的全局源,第二次调用是针对不带代理的本地源。 它仍然在第一个 运行 抱怨本地源中找不到的包,所以我忽略了第一个 运行.
的退出代码这是我在 CI 构建(在 TeamCity 中)中使用的 Windows 批处理代码:
set NUGET_PATH="%system.SolutionDirectory%\.nuget\NuGet.exe"
set NUGET_GLOBAL=https://www.nuget.org/api/v2/
set NUGET_LOCAL=%teamcity.nuget.feed.server%
echo Restoring from global source with proxy
set http_proxy=%env.http_proxy_global%
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_GLOBAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%
echo Restoring from local source without proxy
set http_proxy=
%%NUGET_PATH%% restore "%system.SolutionDirectory%\%system.SolutionFile%" -NonInteractive -Source %%NUGET_LOCAL%%
echo --- Finished with exit code: %%ERRORLEVEL%%
exit %%ERRORLEVEL%%
请记住,此处的语法特定于 TeamCity,即双百分号用于包围环境变量,因为单个百分号用于引用 TeamCity 参数。
作为替代方案,您可以使用 ProGet 作为 NuGet 包的唯一来源,因为它可以在本地镜像 NuGet.org 包源。