使用TFS、NuGet和Artifactory进行持续集成
对于这个演示,我们将使用MyLogger解决方案。sln在构建过程中使用第三方引用,并生成一个公开简单日志记录方法的库。这个库稍后将被Artifactory的第二个解决方案在后续博客中使用。MyLogger使用的第三方远程资源将缓存在Artifactory2022世界杯阿根廷预选赛赛程中。
Artifactory与NuGet结合,允许TFS用户从本地CI构建中检索最新的二进制文件,同时自动更新来自多个远程存储库的引用二进制文件。以这种方式使用Artifactory将限制由于有限的internet访问而导致的CI构建的停机时间。
首先,让我们下载源代码示例
你可以克隆,分叉和克隆,或使用标签获得一个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 = $(artifact - 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中,进入“工具- > NuGet包管理器- >包管理器设置”
- 常规- >包恢复-打开“在Visual Studio中构建时自动检查丢失的包”

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

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

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

TFS删除站点,如果它是nuget-staging-local存储库。
在MSBuild日志中找到一个RestorePackages部分。对NuGet包的引用,不管它们来自哪里,都存储在csproj文件中。
这里我们正在阅读包装。目标文件将这些文件下载到Packages文件夹。
在构建多示例项目的过程中,我们使用一个预构建的.config,它已经被加载,并且在构建之前不会更新。

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

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

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

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