2017-05-08 34 views
0

我在我的项目上设置了CI,而且我无法安装某些DLL。设置如下:repo位于TFSGIT 2015服务器上。我在虚拟机上建立了一个构建服务器(代理)。当代码签入时,构建服务器将构建,运行测试等。构建失败,因为找不到一些内部程序包/ DLL(位于不同的TFS 2010服务器上)。如何在TFS上设置CI/CD - 导入依赖关系?

我的问题是:什么是解决这个问题的最好方法?我想粗略的方法是简单地将DLL添加到回购站,但我想知道是否有预构建步骤,我可以从TFS 2010服务器导入DLL。一个简单的电源shell脚本会这样做吗?

我不熟悉微软的栈,所以任何指导/建议,将不胜感激。谢谢。

回答

2

有一对夫妇的方式来处理这个问题,你可以:

  1. 创建的您正在使用的功能的NuGet包,并在内部托管此。这里的优势在于,您从CICD的角度以适当的构建方式进行操作,并且维护适当的版本,以便将来可以确保您可以重建版本的确切实例。当您执行NUGET RESTORE步骤时,您可以简单地添加参数:-source

  2. (假设你的远程TFS是不存储版本建立的这些)用生成步骤将这些文件复制出来的远程服务器TFS成一个版本系统,应用版本的详细信息作为元数据。再一次,这里的担忧是能够充分确保您可以在给定时间内有效回滚。

  3. 使用Powershell从您的TFS服务器获取特定的构建版本工件,以下是获取最新版本的示例脚本。如果你的DLL项目利用构建,你可以使用它 - 这应该是微不足道的修改,以获取特定的构建。我会亲自通过一些构建变量来做到这一点。这里最值得注意的是“DropLocation”,它将成为Artifact的文件放置。 Mike Poulson: Get last known good build via Powershell

  4. 直接使用Powershell脚本从构建脚本中的其他TFS复制数据。至少,将其保存在工件中将足以最小化回滚,但我希望确保我可以向后建立,特别是对于大型项目。以防万一您的工件存储发生严重问题。这个答案可以帮助你:Copy files from bfs version control to directory 还有PowerShell工具来帮助你做到这一点。

有可能有无数的方法来解决这个问题,但我的建议是退后一步,并设计正确的方式;在这种情况下,您需要确保是否发生远程构建并创建依赖工件,您是否正确管理它们并捕获它们与特定构建的关系。这就是为什么我仍然建议使用你自己的NUGET饲料。

+0

哇。非常感谢。不能要求更好的答案!对于我们的迫切需求(我试图给出所有这些的概念证明以获得管理),#2将起作用。据推测,这是构建定义中预构建步骤的一部分?假设一切顺利#1绝对是一条路,因为如果我们需要返回到特定版本,版本控制将为我们团队提供精确的数据。再次感谢。 – jrDeveloper