使用TFS、NuGet和Artifactory进行持续集成
在这个演示中,我们将使用MyLogger解决方案。sln在其构建过程中使用第三方引用,并生成一个公开简单日志方法的库。该库稍后将在后续博客中的第二个解决方案中从Artifactory中使用。MyLogger使用的第三方远程资源将缓存在Artifactory2022世界杯阿根廷预选赛赛程中。
Artifactory与NuGet相结合,允许TFS用户从本地CI构建中检索最新的二进制文件,同时自动更新来自多个远程存储库的引用二进制文件。以这种方式使用Artifactory将限制由于有限的互联网访问而导致的CI构建的停机时间。
首先,让我们下载源代码示例
您可以克隆、fork和克隆,或者使用选项卡获取代码的zip文件。下载源代码后,使用TFS 2013中的默认Scrum模板创建一个TFS项目(TFVC或GIT)。将源代码添加到TFS项目中。
你的源代码树应该是这样的:

警告:在Visual Studio中打开解决方案之前,您应该等待。需要先安装NuGet和Artifactory,否则可能会尝试从其他来源找到软件包。
第二,让?设置Artifactory Pro服务器
标准设置:
为了与NuGet集成,将需要Pro版本。Java SDK 1.7+是运行Artifactory的必要条件。Artifactory Pro服务器可能位于其中一个?s本地工作站、TFS主机、不相关的机器,甚至存在于云中。出于我们的目的,我们的本地TFS服务器将托管Artifactory Pro服务。
- 下载并安装Java SDK 1.7+(为$JAVA_HOME创建一个环境变量)https://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- 的评估副本Artifactory职业以exe形式运行
自定义:
在使用有效的Pro临时许可证安装服务器之后(许可证将通过电子邮件从JFrog发送),在启动Artifactory服务之前,将以下两个文件替换为设置用户帐户的文件。
- security.xml = $(Artifactory-Home)etcsecurity.import.xml
- .xml = $(Artifactory-Home)etcartifactory.config.import.html
要在Artifactory中管理与TFS相关的远程和本地生成的二进制文件,我们将需要一些自定义存储库(见下文-这些是在您替换artifactory.配置.XML文件)。有关使用说明的参考资料可参阅://www.si-fil.com/confluence/display/RTF/NuGet+Repositories
在QA测试和批准之前建立本地库。这里的最新库可用于集成到最新的开发代码中进行测试。
所有软件包的版本。此存储库将是本地构建和QA测试/批准用于消费或生产的最终存储库。
nuget-staging-local库。这些符号将被开发人员拉出并部署用于调试目的。
JCenter画廊。这个存储库将缓存将在jcenter.bintray.com的构建中使用的库。这为这些库提供了一个本地源,可能对使用TeamCity插件和Artifactory远程搜索很有用。
nuget画廊。此存储库将缓存将在nuget.org的构建中使用的库。这为这些库提供了一个本地源。
现在,在Visual Studio中创建构建定义
下载MyLogger解决方案的源代码并将其放入TFS项目之后,我们需要创建一个构建定义。这是默认设置,例外情况将在下面突出显示和描述。
MyLogger构建定义

NuGetExampleMyLoggerMyLogger.sln是解决方案,将构建和存储MyLogger.dll
/。目标文件。DistribPackages任务意味着将Nuget包从构建站点“推送”到本地Artifactory存储库。
当.targets文件被定制为包含部署到Artifactory所需的MSBuild目标时。
\ tfsbuildssymbols-为此构建生成的符号创建一个放置站点。在本例中,我们没有捕获所有生成的符号和测试结果。
美元。构建数字。这个修订号允许TFS在构建多示例项目时增加MyLogger的“获取上次修订”中使用的修订号。
是时候将NuGet与Visual Studio集成了
在构建定义创建之后,我们需要将其与Visual Studio解决方案集成。安装说明如下:
- 在Visual Studio中,进入Tools - > NuGet Package Manager - > Package Manager Settings
- 常规- >包还原-打开“在Visual Studio构建过程中自动检查丢失的包”

包源——确保包源只使用本地Artifactory。我们希望构建中使用的所有内容都缓存在本地Artifactory服务器中。这里所做的更改将反映在%APPDATA%RoamingNuGetNuGet.config中。

通过创建集成,下列文件已按如下所述进行了修改,并且需要检入。项目和解决方案文件也应该在集成之后检入。
. config文件
Artifactory服务器路径将被添加。确保Artifactory键指向正确的位置,并且只有一个存在。
< packageSources >
.targets文件
.targets文件。
- 新增命令更新命令
- 新增命令distribubcommand
- 将Build设置为依赖于distribubpackages
- 如果需要,新建Target .config。
- 新目标分发包运行NuGet push命令到Artifactory
- 获取构建服务器上msbuild.exe的路径
- 新建任务TFSEnvVar
* sln文件
nuget项目将被添加到解决方案文件中。
* csproj文件
在解决方案中发现的VScsproj文件中:
<进口项目= " $ (SolutionDir) .nugetNuGet.targets”
<目标Name = " EnsureNuGetPackageBuildImports "
接下来,构建MyLogger并部署到Artifactory
验证第三方引用是否来自Artifactory并由NuGet管理。
要验证NuGet包确实来自Artifactory,请查看Artifactory logsrequest.log。因为我们正在做一个干净的构建,所以包文件夹将是空的,现在应该只从Artifactory填充。

执行构建定义。如果构建定义已经正确设置,在排队之后,我们应该看到一个. json文件在构建期间被正确更新。

TFS放置站点,如果它是核staging本地存储库的话。
在MSBuild日志中找到RestorePackages部分。对NuGet包的引用,无论它们来自哪里,都存储在csproj文件中。
这里我们正在阅读包装。target文件将把这些文件下载到Packages文件夹中。
在构建多示例项目期间,我们使用预构建。config将已经加载,并且在构建之前不会更新。

MSBuild日志中的BuildPackage部分将显示在构建期间创建了哪些NuGet包,以及对依赖包的引用是从哪里派生的。

MsBuild日志文件中的DistribPackages部分显示了NuGet应用程序。

的团队。这些概念将在后续博客中进行演示。

这是本博客的第一部分。
未来的后续博客将介绍将该包推广到“本地发布”存储库、安全性和访问,以及其他构建使用该包以生成将交付到CI生产管道中的新包。