65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016年10月3日

CPOL

7分钟阅读

viewsIcon

14143

在本文中,我们将采用一种逐步实施的方法,来实现包含分布式版本控制系统、制品库、包管理器和第三方库包存储库的持续开发与集成模型。

在本文中,我们将采用一种逐步实施的方法,来实现包含分布式版本控制系统、制品库、包管理器和第三方库包存储库的持续开发与集成模型。我们还将探讨在模型中私有制品库的实际用途。在第一部分中,我们将实现不带私有制品库的模型,然后在文章的第二部分中,我们将通过使用私有制品库来优化模型。

使用的工具

实施过程中使用的工具如下:

开发 IDE Visual Studio 2015
存储库 Git
版本控制 Git-TFS
包管理器 Nuget
公共包存储库 Nuget 库
制品库 JFrog
构建工具 TFS
部署工具

持续开发与集成的步骤

  • 设置 Git 存储库。
  • 从 Git 客户端连接到存储库。
  • 设置 Artifactory。
  • 确定适合私有 Artifactory 的包。
  • 创建并发布包到 Artifactory。
  • 组织您的应用程序,在构建项目时通过私有 Artifactory 使用所有二进制文件和公开可用的第三方存储库。
  • 构建源代码。
  • 部署制品。

实现

创建团队项目并设置 Git 存储库

在 Visual Studio Team Services/TFS 界面上创建团队项目。注册并创建您的团队项目。从版本控制选项中选择 Git。

项目将成功创建。

 

导航到项目。您将看到项目的首页。导航到项目的“代码”页面。

创建新项目并选择 Git 作为版本控制后,将默认创建一个新的 Git 存储库。“代码”页面显示新创建的空 Git 存储库的信息。页面显示克隆 URL。此 URL 将用于从任何 Git 客户端克隆已创建的存储库。

您也可以通过存储库下拉列表创建新的存储库。

从 Git 客户端克隆存储库

我们已经创建了 Git 存储库。现在是时候向存储库添加源代码了。要添加代码,您需要先使用 Visual Studio Git 插件将存储库克隆到本地计算机。获得本地克隆后,您就可以开始向存储库添加代码了。

可以使用以下方式克隆远程存储库:

  • 打开 Visual Studio 2015。
  • 打开 Visual Studio Team Explorer。
  • 单击“**管理连接**” -> “**克隆**”。

       

  • 需要 Git 存储库 URL。

    输入克隆 URL 和本地存储库路径。

    存储库将成功克隆。

将源代码添加到存储库

从 Team Explorer 在 Visual Studio 中创建新项目。如果要添加现有项目,请从 Team Explorer 打开该项目。

创建一个新的控制台应用程序。

将创建一个控制台应用程序。请注意,您的新解决方案显示在“首页”下的“解决方案”中。

在 Team Explorer 中,导航到“更改”页面。

新应用程序出现在“已包含的更改”部分。输入提交消息,然后单击“提交并推送”按钮将更改提交到本地存储库,然后将更改推送到 Visual Studio Team Services。

您的代码将成功推送到本地存储库和 TFS。

注意:

在“更改”页面上,如果您尚未配置用户名或电子邮件地址,系统会提示您。如果您在此计算机上以前未使用过 Git,则可能需要配置用户名和电子邮件地址。您也可以从 Team Explorer 中的“设置”页面,在“Git”部分下的“全局设置”中访问 Git 设置页面。

从 Git 远程存储库查看已添加的代码

单击 TFS 界面中的“代码”菜单,查看已推送到服务器的更改。

与公共包库(Nuget)集成

企业应用程序包含许多公开可用的库(例如 Log4Net、jQuery 等)。过去,我们会将这些库与源代码一起检入版本控制系统。通过新的 CI 和 CD 模型,我们将不再将这些库检入源代码。相反,我们将在应用程序中包含一些配置文件,并指示我们的项目从公共包库(如 Nuget)获取所需的二进制文件。在构建服务器(例如 TFS)中构建代码时,构建过程将使用配置文件从包库位置下载具有适当版本的库。

为了实现此方法,让我们在示例应用程序中包含一个第三方库。

从 VS2015 IDE 安装第三方 Nuget 包

让我们在应用程序中添加第三方库 Elmah。以下是添加和安装 Nuget 包的步骤:

转到“**工具 - 选项**”。然后是“Nuget **包管理器 - 包源**”,或者单击“**项目添加引用**”上下文菜单中的“管理 Nuget 包”。默认情况下,“**NuGet 包管理器**”窗口将引用位于“Nuget.Org”的所有包源,如下图所示。

转到“**工具 - 选项**”。然后是“**Nuget 包管理器 - 解决方案的 Nuget 包管理器**”。搜索第三方库 Elmah

为您的项目选择库并安装。

第三方库 Elmah 将被成功安装并自动引用到项目。将自动创建一个名为 packages.config 的文件。该文件包含第三方或二进制文件的包 ID 和版本号。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="elmah" version="1.2.2" targetFramework="net452" />
  <package id="elmah.corelibrary" version="1.2.2" targetFramework="net452" />
</packages>

我们将把此文件检入源代码管理,而不是二进制文件(例如 ELmah)。在构建时,构建过程将使用此文件获取项目中所需二进制文件的包 ID 和版本号。

在解决方案正下方创建一个名为 Nuget.config 的文件,并添加以下行:

<?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="nuget.org" value="https://nuget.net.cn/api/v2/" />
  </packageSources>
</configuration>

Nuget.config 仅在与 TFS 集成时才生效。“DisableSourceControlIntegration”值限制将二进制文件检入源代码管理。“PackageSources”定义了 Nuget 包源的源 URL。目前,我们正在从 Nuget 公共包库(https://nuget.net.cn/api/v2/)访问二进制文件。

注意

为了在 TFS 中成功构建代码,在解决方案文件(.sln)级别创建 Nuget.config 非常重要。稍后,在“构建解决方案”步骤中,TFS 构建过程会根据 <HintPath> 在项目根目录下查找一个名为“packages”的文件夹。根目录下不存在该文件夹将导致构建失败。

Elmah 实现添加一些代码。

    class Program
    {
        static void Main(string[] args)
        {
            //Use third party Elmah
            Elmah.MemoryErrorLog log = new Elmah.MemoryErrorLog();
            log.Log(new Elmah.Error(new Exception("Hello ELMAH!")));

            List<Elmah.ErrorLogEntry> list = new List<Elmah.ErrorLogEntry>();
            log.GetErrors(0, 100, list);
            foreach (Elmah.ErrorLogEntry err in list)
            {
                Console.WriteLine(err.Error.Exception.Message);
            }
            Console.ReadLine();
        }
    }

在 VS2015 中构建代码。

将修改后的解决方案提交并推送到 Git 存储库。

在 TFS 中构建项目

现在是时候在 TFS 中构建我们的项目了。我们将从 Git 存储库拉取源代码,并从 Nuget 公共包库拉取二进制文件。让我们相应地创建构建定义。

构建定义

从 VSTS 访问 TFS 界面,导航到已创建的项目。选择“**生成**”菜单。

单击“**创建新生成定义**”按钮以创建新的生成。

选择 Visual Studio 作为生成模板。

存储库和 master 分支将默认选中。验证相同项并继续。

创建生成。

现在我们需要添加生成步骤。我们的示例应用程序将从公共库获取 Elmah Nuget 包,然后构建源代码。因此,我们暂时定义两个生成步骤:

  • Nuget 还原。
  • 构建解决方案。

为 Nuget 还原添加生成步骤。

  • 提供解决方案或 Package.config 文件的路径。
  • 提供 Nuget.config 文件的路径。

选择“**构建解决方案**”步骤。提供解决方案文件(.sln)的路径。

保存生成。

选择“**队列新生成**”并队列生成以执行。

项目将成功构建。

观察 Nuget 还原 生成步骤的日志。Nuget 包 Elmah 从 Nuget 公共包库(https://nuget.net.cn/api/v2/)中获取。

因此,我们通过 Nuget 公共库在一定程度上实现了持续集成和开发方法。我们将源代码与二进制文件隔离,并在构建时从公共包库中拉取二进制文件。但是,这种方法仍然留下一些待解决的问题:

  • 这些包驻留在公共库中。许多用户正在从公共包存储库下载包。一个典型的项目可能需要 Nuget 存储库中的 5-10 个包。如何减少网络流量并优化我的构建?
  • 如果公共包库存储库宕机或网络出现问题怎么办?
  • 如何控制组织中的人员从公共包库下载的内容,而不是使用内部自定义库?
  • 如何控制应该首先搜索哪些公共库来查找包?
  • 如何在不将其暴露给公共包库的情况下使用内部自定义包?

所有这些待解决的问题都引导我们使用开发者和公共包库(Nuget)之间的中间私有存储库。我们可以使用 Artifactory 作为中间件来解决上述问题。

在下一部分中,我们将通过使用 JFrog Artifactory 来优化我们的持续集成和开发模型。

© . All rights reserved.