持续集成(CI)使用TFS, Visual Studio和NuGet与Artifactory

第二部分-“天空裂开了吗?”

在本博客的第一部分中,我们介绍了示例项目的下载、Artifactory PRO的安装、MyLogger库的构建以及将其存储到Artifactory中。在以前的博客我们介绍了Artifactory从远程云存储库代理构建依赖关系的能力,以及如何设置Artifactory。

第二部分将介绍在一个Visual Studio解决方案中发现的三个项目对MyLogger库的使用。这multi-example项目构建api使用来自CI构建的最新mylogger.dll,以及需要Artifactory缓存的其他远程依赖项。所有构建工件将托管在Artifactory中。还将讨论如何将构建工件从Artifactory staging存储库提升到发布存储库。本博客的最后一部分将展示如何将存储在Artifactory中的工件连接回Visual Studio和TFS数据库。

所需的所有源代码应该已经从本博客的第1部分中获得。Artifactory使用适当存储库的专业程序设置假定已经完成。假定具有Visual Studio/TFS知识。

创建多示例构建定义

接着,我们在Visual Studio中创建一个新的多示例构建定义来构建多示例解决方案。自定义和此构建定义的相关部分在下面突出显示。图片下面还有对每个定制的简要说明。此构建的结果将创建三个库,将每个库打包成一个NuGet,并将这些包推送到Artifactory服务器。

多示例构建定义

NuGetExampleMultiProjectsExamplemulti-example.sln是将构建和存储api.dll、core.dll和services.dll的解决方案。

pDistribPackages=true -这是在Nuget中创建的自定义MSBuild任务目标文件。DistribPackages任务意味着将Nuget包从构建站点“推送”到本地artifacts存储库。

NuGet管理被添加到TFS的解决方案中,它添加了一个NuGet.exe,一个NuGet.exe和一个NuGet目标文件到解决方案文件。在这个项目中,我们检入NuGet配置和Nuget . config目标文件,而不是NuGet.exe。NuGet的目标文件是定制的,以包含部署到Artifactory所需的MSBuild目标。

ProcessTemplatesScriptsUpdateNuGetPackages。ps1 -这是一个定制的“预构建”powershell在编译之前运行的脚本。该脚本的主要目的是确保在构建中包含最新的MyLogger包和其他所需的二进制文件。

BuildDefinitionName_10.3美元牧师:r)-这将允许用户设置Major构建数字。

用MyLogger从Artifactory构建多示例项目

来自Artifactory的MyLogger

的multi-examplesln项目包含三个项目-一个用于api核心和服务。这三个程序都使用mylogger.dll以及其他第三方库。之后的NuGet集成与多例sln文件中,我们需要添加Newtonsoftjson、MyLogger.dll和Ninject.dll到已安装的包中。尽管这些都是在外部存储库中找到的,但它们都将在Artifactory本地缓存,并使用虚拟的回购而不是到外面去。

下面是NuGet包管理器屏幕上安装了此解决方案的包,并对包进行了屏幕截图配置对话框,可以为解决方案中的所有或部分项目更新。

NuGet Package Manager界面

在构建多示例期间sln,我们运行UpdateNuGetPackages。ps1 script to make sure we have the latest packages needed for each of the three builds. There is a RestorePackages in the NuGet目标文件,但这只恢复包中缺少的内容每个项目的配置文件。
的包在构建开始时读取配置,并在那时设置版本号。如果是新的NuGet软件包已经发布,MSBuild将不会得到最新的,因为软件包配置还没有更新。出于这个原因,我们不得不使用一个小的预构建powershell脚本更新包在MSBuild加载这些文件之前。此问题可能在构建模板的未来版本中得到解决。

运行可选脚本

预构建powershell脚本

在多示例项目完成后,来自三个项目的所有构件都将被打包到NuGet中,并“推送”到nuget在Artifactory中暂存本地存储库。这些新存储的工件可以从Artifactory中提取并部署。MyLogger项目工件的任何推广方案也可以应用于这些工件。

Nuget staging local

从登台到发布的推广

在一个包被部署和测试之后,它就可以被批准提升到“发布”状态。在Artifactory中,我们使用发布存储库(例如。nuget-release-local)来存储准备发布的NuGet包。通过更改每个存储库的组和用户安全设置来维护每个存储库的访问控制。

从本地暂存库迁移到本地发布库是一种“廉价复制”,不占用时间或磁盘空间——“它只发生在数据库中”,就像在一组文件上放置标签一样。

一旦文件进入发布存储库,其他需要使用最新“发布”包的开发人员就可以从nuget-release-local存储库,以确保他们使用的库已经过全面测试并准备好用于生产。

以下是Artifactory内部这种推广行动的结果示例。提升可以通过GUI或脚本进行。如果需要,脚本可以与测试连接结果或者审批签名工作流。通过使用提升,可以防止DevOps组从分级CI构建存储库(没有经过QA批准的代码)而不是发布存储库中部署代码。

Nuget发布本地

从Artifactory连接回TFS

NuGet包存储在Artifactory之后,我们可以通过以下操作返回到存储在TFS中的构建信息:
Artifactory - - - >工件-> NuPkg信息- - - - - ->点击MyLogger一般选项卡
从这里,您可以查看原始构建,阅读诊断日志,查看已经运行的测试,或者只是查看TFS数据库中的其他构建细节。

最初的构建

从Artifactory可以直接链接到TFS项目和用于实际推送到Artifactory的NuGet包中的构建。下面可以看到这个构建的更多细节。

构建的详细信息

如果您希望查看在Artifactory内部的NuGet包中找到的构建的TFS拖放站点中的内容,可以从TFS Web Client直接链接到拖放站点。

TFS投放地点

除了校验和之外NuGet包存储在Artifactory,其他属性,如项目URL和发布说明URL也可以找到。

项目的URL

此集成不修改构建过程模板,不依赖于自定义活动,也不需要任何自定义csharp代码。所使用的Powershell脚本是轻量级脚本,可以根据用户的需要弃用或扩展。

所有这些努力的结果是什么?

Artifactory目前,Pro几乎没有定制,允许使用Visual Studio和TFS构建一个存储工件(二进制文件)。Artifactory目前允许开发人员使用由开发人员控制的本地服务器在本地托管远程构建依赖。为其他内部开发小组使用而构建的库可以托管在同一台Artifactory服务器上。然后可以通过CI管道提升这些工件,并将其从Artifactory发布批准的存储库部署到生产环境或客户中。

对于这个例子,我们已经修改了标准nuget目标文件,添加了一个简单的powershell脚本,并在Artifactory中定制了存储库。使用MSBuild可以实现相同或类似的结果任务, TFS构建工作流定制,powershell脚本、Visual Studio插件或所有这些的组合。

随着需求的增加,所有这些工具的集成将有望得到改善。