【问题标题】:How does Visual Studio Team Services manage custom or in-house dependencies?Visual Studio Team Services 如何管理自定义或内部依赖项?
【发布时间】:2014-02-04 04:42:09
【问题描述】:

我有一个自定义构建过程,它结合使用 NAnt、Maven Ivy、CruiseControl.Net 和其他一些来管理依赖项并处理我们项目的持续集成构建过程。老实说,它的效果很好。

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

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

使用 Maven 的 Ivy 依赖管理/配置工具,该过程几乎完美无缺,并且对它充满信心 - 与此等效的团队服务是什么?

经过数小时的搜索,我在网上的最佳发现似乎表明 NuGet 可用于此目的,并为我的每个依赖项制作自定义包,但是 Team Services 持续集成构建过程在哪里/如何存储和访问这些包?我可以将我的包存储在 Azure 中的 NuGet 服务器中吗?我能确定这个是我自己用的吗?

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

...但是这些仍然让我无法回答,也许我对此并不了解,但需要了解 TFS 将遵循的依赖关系管理过程。

【问题讨论】:

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


【解决方案1】:

很多人只是将他们的依赖项签入他们的 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

【讨论】:

    【解决方案2】:

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

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

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

    至于第 3 方选项,提到了 TeamCity,尽管它添加了一个 NuGet 服务器,这很容易托管自己。与其他人一样,但讨论哪个 3 方解决方案可能比其他解决方案更好是违反 StackOverflow 政策的。

    【讨论】:

    【解决方案3】:

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

    From their website

    将 TeamCity 用作 NuGet 服务器

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

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

    【讨论】:

    • 这是否适用于 Team Foundation Service (Visual Studio Online)?
    • 老实说不知道,我自己也在研究类似的东西,所以试试看。
    • 它可以工作,但需要在 Azure-VM 或本地机器上运行。
    • @skuld - 正如@jessehouwing 所说,使用 TeamCity 确实需要在某处使用机器来管理它,这是我希望能够避免的事情。
    【解决方案4】:

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

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

    http://inedo.com/proget/overview

    【讨论】:

    • 是的,我明白你的意思。我专门寻找完全在线的东西,这意味着在某处为 NuGet 私有服务器创建一个托管空间。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2018-10-23
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多