Visual Studio Team Services如何管理自定义或内部依赖项?

时间:2014-01-15 15:54:26

标签: build dependencies continuous-integration nuget azure-devops

我有一个自定义构建过程,它使用NAnt,Maven Ivy,CruiseControl.Net和其他一些组合来管理依赖项并处理项目的持续集成构建过程。诚然,它很有效。

对我们来说,一个相对重要的部分是,我们能够从我们的共享Ivy存储库中获取任何给定依赖项(.dll,.xml .whatever)的确切版本对我们的工作绝对至关重要。因不同的原因/目的而需要不同版本的特定库的不同应用程序。

然而 - 我目前正在研究Visual Studio团队服务(http://visualstudio.com)并正在尝试我的代码签入/自动构建过程,除了我无法看到我在哪里或如何管理我的外部/第三方依赖。

使用Maven的常春藤依赖管理/配置工具,这个过程非常完美无瑕,并且对它充满信心 - 团队服务与此相当于什么?

我在网上经过数小时的搜索后得到的最佳结果似乎建议将NuGet用于此,并为每个依赖项制作自定义程序包,然后由Team Services持续集成构建过程存储和访问这些程序包的位置/方式?我可以将我的包存储在Azure中的NuGet服务器中吗?我可以确定这只是我自己使用的吗?

到目前为止我发现的最好的SO帖子是:

...但是这些仍然没有得到答案,也许我正好偏离这一点,但需要了解TFS将遵循的依赖管理流程。

4 个答案:

答案 0 :(得分:2)

很多人只是将他们的依赖关系签入他们的TFS源代码库(lib文件夹中的二进制文件)。

更好的方法是使用您建议的包管理器。在.Net世界中最常用的是NuGet。你有正确的想法,TFS Build只会与任何可以在任何地方托管的NuGet服务器进行对话。阅读此博客文章了解更多详情:http://blogs.msdn.com/b/dotnet/archive/2013/08/27/nuget-package-restore-with-team-foundation-build.aspx

答案 1 :(得分:1)

TFS和Visual Studio没有内置的依赖管理工具,如Maven Ivy。 NuGet确实是你得到的最接近的,但它都是在解决方案级别配置并检查到源代码控制。您甚至需要运行自己的NuGet服务器,因为TFS不附带一个(除非您想将它们推送到公共存储库,这通常是您不想要的)。

有许多第三方解决方案,但开箱即用的功能简单归结为:

  • 检查依赖项到源代码控制中(您可以在成功构建结束时更改构建过程模板。您的构建始终可以引用所需依赖项的相对路径。如果您希望能够更改无需更改项目文件的依赖项版本,您可以使用Workspace映射将特定版本的依赖项映射到构建上的特定文件夹。
  • 配置您的构建以获取NuGet包并配置您自己的NuGet服务器,其中可以找到这些包。 TFS 2013和Visual Studio Online现在可以自动获取构建时的NuGet依赖项。下载哪些软件包仍存储在源代码管理中的配置文件中,但您可以使用NuGet软件包文件锁定版本或始终获取特定标记或版本。
  • 更改构建过程模板。这是你可以采取的最广泛的步骤,但可以说也是最强大的。默认的构建过程模板,尤其是.12.xaml版本非常简单直接,但您可以更改模板以执行您想要的任何操作。从任何地方获取特定的依赖关系当然可以是其中一个选项。如果您愿意,也可以将Build Process模板集成到Maven Ivy中。

至于第三方选项,TeamCity被提及,虽然它增加了一个NuGet服务器,这很容易自己托管。和其他人一样,但讨论哪个第三方解决方案可能比其他解决方案更好是针对StackOverflow策略。

答案 2 :(得分:0)

一个可能的答案可能是TeamCity:

From their website

  

将TeamCity用作NuGet服务器

     

如果由于某种原因你不想   将包发布到公共Feed,例如你正在生产包裹   旨在内部使用;您可以将TeamCity用作本机   NuGet Server而不是设置您自己的存储库。开始使用   TeamCity作为NuGet Server,您需要启用TeamCity服务器   通过单击Administration |中的相应按钮来NuGet服务器   NuGet设置| NuGet Server页面。将有两个不同的链接   显示在同一页面上:for public(带有guestAuth前缀)和   private(带有httpAuth前缀)feed。如果公共网址不可用,   您需要在管理中启用TeamCity中的Guest用户登录   |全局设置页面。

我不能说我已经使用过它,但这可能会帮助你解决问题。

答案 3 :(得分:0)

是的,您应该使用包管理器来管理内部依赖项。我们使用Nuget作为包管理器,并为我们的内部依赖项提供内部Nuget服务器,但我很确定你可以在azure上托管它。我们的CI版本会在运行时自动下载软件包,这应该不是问题。 @dylan提到的链接是用于此的链接。

我没有使用它,但你也可以看看ProGet,它基本上是Nuget for Enterprise。

http://inedo.com/proget/overview