Git、TFS、Nuget 和 Artifactory 的持续开发与集成 – 第二部分





5.00/5 (1投票)
在本文中,我们将使用 JFrog Artifactory 来优化我们的持续集成和开发模型。
在本文的第一部分,我们已经实现了一定程度的持续集成和开发方法,使用了 Nuget 公共库。这种方法留下了一些关于直接访问公共包的未解决问题。为了解决这些问题,我们意识到需要一个中间存储库,即私有的 Artifactory。在本文中,我们将使用 JFrog Artifactory 来优化我们的持续集成和开发模型。此外,在实施模型的范围内,我们将介绍在 Artifactory 中创建和发布 Nuget 包的步骤。
使用 Artifactory 的原因
使用 Artifactory 的原因如下:
- 减少网络流量并优化构建
- 可靠地访问公共包库(例如 Nuget 库)
- 通过缓存机制优化构建性能。首次从公共库获取包,然后由私有的 Artifactory 提供。
- 安全性和访问控制
- 作为内部包的存储库,这些包不应暴露在公共库中。
- 通过高可用性的包使构建系统稳定
实现
为了在我们的持续开发和集成模型中实现 Artifactory,我们将执行以下步骤:
- 设置 JFrog Artifactory。
- 在我们的示例应用程序中通过 Artifactory 访问第三方库
- 创建 Nuget 包并将其发布到 Jfrog 私有 Artifactory。
- 从 Jfrog 私有 Artifactory 消费该包在我们的示例应用程序中。
- 在 TFS 中构建示例应用程序
- 部署构件
Artifactory 设置
我们将使用 Jfrog Artifactory 进行实现。JFrog Artifactory 通过存储库进行访问。它托管三种类型的存储库:
本地:此存储库应包含所有不应向公共库公开的包。
远程:此存储库充当公共包库和开发人员之间的中间件。在构建过程中,存储库中的包首次从公共库拉取,然后从缓存中提供。
虚拟:此存储库是本地和远程存储库的集合。它充当所有存储库的接口。
下图显示了开发 IDE、Artifactory 和构建服务器通过存储库之间的交互。我们将实现此流程模型。
配置存储库
我们将首先配置一个本地存储库和一个远程存储库。然后,我们将创建一个虚拟存储库并将这两个存储库合并到其中。
访问 Jfrog 界面。在管理模块中,选择存储库 - 本地。
选择 Nuget 作为存储库的包类型
选择一个新存储库。将名称作为存储库键(例如,Nugetlocal)。
保存存储库。新创建的存储库将列在本地存储库中。
采用相同的方法创建远程存储库。选择存储库 – 远程。
将名称作为存储库键(例如,Nugetremote)。由于这是一个远程存储库,Nuget 公共库的 URL(https://nuget.net.cn/)将默认填充。您可以测试与 Nuget 库的连接。
保存存储库。新创建的存储库将列在远程存储库列表中。
现在,通过存储库 – 虚拟菜单创建一个虚拟存储库,并将本地和远程存储库添加到其中。
保存虚拟存储库。
现在选择构件菜单以访问构件存储库浏览器。
从列表中选择新创建的虚拟存储库Nugetvirtual,然后选择设置我。
Jfrog 将自动配置私有的 Artifactory 并提供访问它的 URL。
提供的 Artifactory URL(https://kausikn.jfrog.io/kausikn/api/nuget/Nugetvirtual)将用于在构建过程中拉取包。如果我们还需要 Nuget 公共库中的任何包,Artifactory 将通过其远程存储库在后台获取。
创建 Nuget 包并将其发布到 Jfrog Artifactory
有很多工具和 Visual Studio 扩展可以自动创建和发布 Nuget 包。为了理解概念,我们将使用简单的命令来创建和发布包。
开发 .NET 库
创建一个简单的 .NET 类库项目。
因此,我们已经开发了自己的组件。该组件不应通过公共包库暴露给外部世界。这时 Artifactory 的一个实用性就体现出来了。我们将打包此库并将其发布到 Jfrog 本地存储库。
获取 Nuget.exe
可以通过右键单击 Visual Studio 中的任何解决方案并选择“启用 NuGet 包还原”来获取Nuget.exe。这不仅会启用 NuGet 包还原,还会在解决方案文件旁边自动放置一个“.nuget/”文件夹中的 NuGet exe。该选项仅用于获取Nuget.exe。可以删除其他文件和文件夹(.nuget、Nuget.target)。
将Nuget.exe文件放在一个合适的位置,也许放在解决方案文件夹中的“tools”文件夹中,或者放在全局位置,如果您想更新您的 Path 系统变量,这样您就可以在任何您喜欢的地方打开命令行并输入Nuget。
作为替代方法,您也可以从以下链接下载命令行NuGet.exe:http://nuget.codeplex.com/releases/view/58939
创建 Nuspec 文件
您可以使用任何文本编辑器从头开始创建.nuspec文件,或者通过从另一个项目开始编辑文件来创建。您还可以使用以下命令让 NuGet 为您创建一个模板清单
nuget spec
从 Visual Studio 项目
从.csproj或.vbproj文件创建.nuspec非常方便,因为已安装到这些项目中的其他包将自动引用为依赖项。只需在与要创建库的项目文件相同的文件夹中使用以下命令:
nuget spec
将成功为项目创建 Nuspec 文件。这会像往常一样创建一个模板<project_name>.nuspec 文件,但包含将在打包时从项目值替换的令牌。这意味着您无需像更新项目那样更新.nuspec中的关键值(但如果您愿意,也可以始终将令牌替换为字面值)。
在 VS IDE 中打开.nuspec文件,检查包的内容,并修改作者、描述等详细信息。
Nuspec 参考详情请访问:http://docs.nuget.org/docs/reference/nuspec-reference
创建 .Nupkg 包文件
从 Visual Studio 项目,运行 nuget pack 并提供您的项目文件,它将自动加载项目的.nuspec文件并使用项目文件中的值替换其中的任何令牌。
nuget pack <project_name>.csproj
将成功创建 nuget 包。如果某些标签未用相关值修改,将显示警告。您可以从项目文件夹查看包。
将包添加到 Artifactory
您可以将包添加到 Jfrog Artifactory 配置的本地存储库。使用以下命令发布包:
nuget push <package.nupkg> <username:password> -Source <Artifactory URL>
您可以在 Jfrog 界面中获取本地 Artifactory 的 URL。从构件列表中选择本地存储库Nugetlocal,然后选择设置我。将提供本地 Artifactory 的 URL。您还需要提供用户名(即用户名/密码)才能将包添加到 Artifactory。
例如:
nuget push CILibrary.1.0.0.0.nupkg myusername:mypassword -Source https://kausikn.jfrog.io/kausikn/api/nuget/Nugetlocal
包已成功推送到 Jfrog 本地存储库。
可以从 Jfrog 本地存储库中查看已发布的包,如下所示:
从 VS2015 安装已发布的包
现在是时候从 Artifactory 拉取已发布的库了。首先,我们将在本文第一部分使用的示例应用程序中,在 Visual Studio 中使用该包。
以下是从 Visual Studio 使用库的步骤:
将 Jfrog 虚拟存储库添加为包源。使用已配置的虚拟存储库 URL。在后台,Jfrog 将从其本地存储库中拉取包。
在Nuget 包管理器中搜索已发布的包。使用包 IDCILibrary进行搜索。将显示包及其版本号、作者和描述。
将包安装到解决方案中。
该包将成功安装并添加到项目引用中。
最后,示例应用程序使用一个来自 Nuget 公共库的公共可用包(Elmah)和另一个来自私有库的私有包(CILibrary)。这两个包都通过我的 Artifactory 的通用接口进行拉取。
现在,是时候在 TFS 中构建项目了。修改Nuget.config文件以使用 Artifactory URL,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
<config>
<add key="repositoryPath" value=".\packages" />
</config>
<packageSources>
<add key="Artifactory" value="https://kausikn.jfrog.io/kausikn/api/nuget/Nugetvirtual" />
</packageSources>
</configuration>
在 Visual Studio 中构建代码。
将更改提交并推送到 Git 存储库。
访问 TFS 界面。选择在本文第一部分创建的构建。排队一个新的构建。
观察Nuget Restore构建步骤的日志。Nuget 包Elmah和新发布的包CILibrary都将从 Artifactory 地址拉取:(https://kausikn.jfrog.io/kausikn/api/nuget/Nugetvirtual)。
注意
TFS 构建有时可能因 Jfrog 安全配置设置而在 Nuget 还原时失败。当构建过程尝试从您的 Jfrog Artifactory URL 拉取包时,您可能会遇到凭据相关的错误。该错误意味着允许匿名访问已对 Artifactory 禁用,并且用户在使用其 NuGet 客户端时需要输入用户名和密码。要解决此错误,请修改您的Nuget.config文件,为 Artifactory 定义用户名和加密密码。
<packageSourceCredentials> <Artifactory> <add key="Username" value="admin" /> <add key="Password" value="...encrypted password..." /> </Artifactory> </packageSourceCredentials>
我已尝试在本文的两部分中实现持续开发和集成方法。本文的主要目标是向初学者解释这些过程。我已详细介绍了 Git、TFS、Nuget 和 JFrog Artifactory 中大多数过程的详细步骤。希望本文能帮助开发人员在采用完全自动化的持续开发和集成模型之前理解这些概念。