如何将自定义nuget源添加到TeamCity构建?

Eug*_*ene 45 .net msbuild teamcity nuget

我使用Teamcity(在Internet上的虚拟机上运行)创建了一个Nuget Server,并创建了一个将包发布到其中的构建.

我还有另一个需要使用该软件包的项目.该项目也建立在团队城市之上.在我的本地Visual Studio上,我添加了nuget feed uri,安装了包,一切正常.但是当我尝试在teamcity上构建它时,它会说"找不到包".

所以我的问题是:"如何将自定义nuget Feed添加到TeamCity构建中?"

Joh*_*err 44

NuGet包源是通过Visual Studio配置的,但它们存储在每个用户配置文件中,位于c:\Users\$USER\AppData\Roaming\NuGet\NuGet.config.需要将TeamCity包源的条目添加到运行构建的构建代理用户的配置文件中.

  1. 在本地计算机上,为您的用户打开Nuget.config文件
  2. 将TeamCity包源的条目复制到剪贴板
  3. 在构建代理上,打开正在执行TeamCity构建的用户的NuGet.config文件
  4. 粘贴在TeamCity包源条目中.保存并退出.
  5. 再次运行构建.它现在应该能够找到包.

编辑: ladenedge记录了一个很好的解决方案,当我最初回答这个问题时,这个解决方案并不存在.如果您没有构建代理的管理员权限,或者希望基于每个项目配置程序包源,则该解决方案特别有用.

  • 如果您在Windows SYSTEM帐户下运行构建代理,则配置文件路径将为`C:\ Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config`(对于64位操作系统)或`C :\ Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config`(32位操作系统). (14认同)

lad*_*dge 26

NuGet现在可以从NuGet.targets存储在源本身的文件中读取源,如重复问题的答案所述.

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
    <!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
    <PackageSource Include="https://nuget.org/api/v2/" />
    <PackageSource Include="https://my-nuget-source/nuget/" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)


Iva*_*van 19

我不想在源代码中添加NuGet.config中的feed,因为这是构建基础结构的一部分而不是应用程序代码的一部分.

我不想在TeamCity构建代理上添加NuGet.config中的 feed,因为它很难维护(更新,添加,删除),而且我们有很多构建代理.

什么对我来说最有效 - 在TeamCity中添加%system.PackageSources%(在Root项目上),包含全局nuget feed和我的自定义(以分号分隔):

https://www.nuget.org/api/v2/ ; HTTP:// <teamcity_server_name>:81/guestAuth /应用程序/的NuGet/V1/FeedService.svc

如果你看看NuGet.Targets,你会看到它使用$(PackageSources),如果它被定义的话.因此,您在TeamCity中将其定义为"system"参数,并将其传递给构建过程.

  • @Ivan 有没有办法通过环境变量添加身份验证(用户名和密码)?我们的提要受到保护,我找不到任何通过环境变量设置这些的方法。具体来说,我需要设置通常位于 NuGet.Config 的 `packageSourceCredentials` 部分中的值。 (4认同)