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

SQL Server 数据库 :: 使用 Github、TeamCity 和 Octopus 进行源代码控制、持续集成和持续部署

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2019 年 10 月 20 日

CPOL

10分钟阅读

viewsIcon

15575

使用 Github、TeamCity 和 Octopus 为您的 Microsoft SQL Server 数据库构建 CI/CD 流水线的完整分步指南。

引言

本教程作为维护源代码控制和为 Microsoft SQL Server 数据库启用持续集成的一个基本概念验证。目标是将数据库代码放入基于云的源代码控制系统(如 Github)中,并配置持续集成和交付流水线,以实现平滑的数据库开发和部署周期。

背景

在传统的数据库开发过程中,有一个集中的开发服务器,多个开发人员在其中同时工作,并进行远程访问,因为很难在本地(个人)开发机上维护数据库。当只有一个开发人员处理项目时,这种方法是可以接受的,但随着团队规模的增加,要找出两次部署周期之间所做的更改就会变得很麻烦。此外,部署过程中出现手动错误的几率很高。

解决这个问题的方法是创建一个数据库项目,并在源代码控制系统中维护代码存储库。然后,该存储库可以作为数据库发布到各种环境,即开发、测试、预演和生产。由于每个开发人员都可以克隆存储库和数据库单独工作,因此跟踪更改也会更容易。通过在每次合并时构建存储库,我们还可以消除手动错误并确保平滑的部署过程。

基本用例

为了理解如何为数据库项目实现持续集成,让我们以一个使用 Microsoft SQL Server 开发的数据库以及云上的源代码控制系统 Github 的用例为例。本示例中使用的 IDE 是 Visual Studio 2019。一旦源代码控制机制启动并运行,我们将使用 Jetbrains 的 TeamCity 来集成持续构建方法并执行单元测试。如果构建成功,我们将把代码推送到 Octopus,然后 Octopus 会自动部署到不同的环境,无需任何手动干预。

考虑到完整流程的长度和为了更好地组织内容,本教程分为三个建设性部分

  1. 使用 Github 进行 SQL Server 数据库源代码控制
  2. 使用 Github 和 TeamCity 进行 SQL Server 数据库持续集成
  3. 使用 Github、TeamCity 和 Octopus 进行 SQL Server 数据库持续部署

必备组件

在本教程/课程中,使用了以下工具/平台。

  • Microsoft SQL Server 2017(任何适合您需求的版本)
  • Visual Studio 2019(2015+),已安装数据存储和处理工作负载
  • 一个 Github.com 帐户
  • Git Bash/集成到 Visual Studio 的 Git,以及对 Git 的基本了解
  • TeamCity 服务器
  • Octopus Deploy

现在开始吧。

1. 使用 Github 进行 SQL Server 数据库源代码控制

a. 为全新的数据库创建数据库项目

i. 设置数据库项目

打开 Visual Studio,选择“创建新项目”。

在下一页,我们将需要选择要创建的项目类型。根据我们的用例,这是一个 SQL Server 数据库项目。我们可以滚动浏览可用项目类型列表并选择类型。如果您安装了大量工作负载,列表会很长。因此,您可以在顶部的搜索栏中搜索“SQL Server”,然后从搜索结果中选择 SQL Server 数据库项目。点击下一步继续。

为您的项目命名。您还可以为解决方案命名,并选择是否将解决方案和项目放在同一个目录中。目前,我们暂时保留默认设置并创建项目。

ii. 将项目添加到源代码控制

项目创建并解决方案在 Visual Studio 中打开后,我们要做的第一件事是将解决方案添加到源代码控制。我们可以通过 Git Bash 初始化 Git 或直接从 Visual Studio 将解决方案添加到源代码控制来实现。右键单击解决方案,然后单击“添加到源代码控制”。

这将自动创建一个本地 Git 存储库,您可以在 Team Explorer 中看到该存储库。

这意味着 Git 已准备就绪,并监视此解决方案下所有项目中进行的每一次更改。让我们继续进行一些数据库相关的工作,例如创建几个表。

iii. 在 Visual Studio 中创建 SQL Server 对象

要使用 Visual Studio 创建新表,请右键单击项目,然后选择添加->新建项

在下一个窗口中,搜索表,从结果列表中选择“”,为表指定一个名称,然后单击“添加”。

这将自动创建一个带有默认主键列 Id 的表,并打开一个带有对象设计器和查询编辑器分屏视图的窗口。对象属性也在此窗口中可见。

让我们向表中添加几列。我们可以使用设计器或查询编辑器来更改表。在一个区域进行修改会在另一个视图中自动更新。完成更改后,按Ctrl + S保存更改。

iv. 本地提交更改

此时,如果您还没有注意到,新生成的 .sql 文件旁边有一个加号(+)图标。将鼠标悬停在该图标上时,它会显示文件为“待添加”。

这意味着文件正在被跟踪,但尚未添加到提交中。通常,使用 Git Bash,我们会转到项目目录并运行“git add .”将所有文件添加到提交中,但如果从 Visual Studio 提交,VS 会自动将这些文件添加到提交中。

右键单击解决方案,然后单击提交。

这将打开 Team Explorer 窗口,准备提交。您可以添加提交消息并提交更改。如果您查看“更改”部分,它会提到文件将在提交期间被添加。

添加提交消息并点击“全部提交”后,您的更改将在本地提交。我们可以设置一个远程存储库并与远程服务器同步更改。

v. 与远程服务器同步更改

点击通知中的“同步”链接,在下一个窗口中,Team Explorer 提供了将更改推送到 Azure DevOps 等远程服务器或远程存储库的选项。点击“发布 Git 存储库”,它会要求提供代码要推送到其上的远程存储库的 URL。

转到 Github.com,创建一个新存储库,将指向该空存储库的链接复制并粘贴到 URL 框中,然后点击“发布”。发布更改后,它们将推送到 Github.com 上的远程存储库。

刷新您的 Github 存储库,您就可以看到您的数据库项目了。

现在,我们可以修改数据库项目中的更改,Git 将为我们跟踪所有更改。我们可以为每个开发人员创建单独的分支,并将更改合并到主分支中,以保持数据库项目的单一真相来源。

vi. 发布数据库项目

现在,我们已经准备好了脚本,并将其维护在数据库项目中。如何使用这些脚本在服务器上创建数据库?在服务器上手动执行这些脚本不是最佳方法。我们也可以直接从 Visual Studio 创建数据库。我们还可以设置数据库连接进行调试。让我们看看有多容易。

首先,要创建数据库,我们需要一个正在运行的 SQL Server 实例。它可以位于本地计算机或远程服务器上。目前,让我们使用本地 SQL Server 实例。

在 Visual Studio 中,点击视图->SQL Server 对象资源管理器

左侧将显示您当前连接的服务器列表。我们可以从此执行添加另一个服务器或执行查询等操作。

要配置必须在哪台服务器上创建数据库,我们需要为我们的数据库项目应用一个连接字符串。右键单击项目,然后转到“属性”。

在下一个窗口中,选择“调试”,然后滚动面板直到看到“目标连接字符串”部分。

到达此处后,单击“编辑”按钮。将显示一个新表单,您可以在其中指定连接属性。在此窗口中,选择“浏览”选项卡并输入服务器名称。选择身份验证类型并提供凭据,然后单击“确定”。通过单击“测试连接”按钮,您可以确保凭据正确。如果测试连接成功,您就可以发布数据库和调试了。

返回解决方案资源管理器,右键单击项目,然后单击“发布”。

此操作将弹出一个新的弹出窗口,要求配置目标数据库设置。点击“编辑”按钮,然后按照上述步骤选择目标数据库。

设置目标数据库后,为数据库指定一个名称,然后点击发布。您可以在“高级”部分配置许多选项,例如备份、删除等,但目前这超出了本教程的范围。

这将花费几分钟时间,然后您的数据库将被发布到服务器。如果您在 SQL Server 对象资源管理器中刷新服务器,您应该会看到数据库已创建,并带有对象。

现在,我们可以简单地在数据库项目中添加和修改对象,并将其发布到我们的数据库。如果您想将其发布到不同的环境,如测试、预演和生产,您可以更改目标数据库设置并发布。

b. 从现有 SQL Server 数据库创建数据库项目并将其添加到源代码控制

到目前为止一切都很好,但如果您已经有一个生产数据库,其中包含大量数据,您希望将其添加到源代码控制中怎么办?别担心,这也不难。为了演示这一点,让我们在同一个解决方案下为现有数据库创建另一个数据库项目。由于我们在上面的场景中已经创建了一个数据库,让我们使用同一个数据库来查看如何从现有数据库创建 SQL Server 数据库项目。

返回解决方案资源管理器,右键单击解决方案,然后选择添加->新项目

按照“设置全新的数据库项目”下的相同步骤创建新项目。项目创建后,右键单击项目,然后选择导入->数据库

在下一个窗口中,单击“选择连接”。

在下一个窗口中,转到“浏览”选项卡并指定连接条件,例如服务器名称、身份验证类型和凭据。最重要的是,选择您想要为其创建数据库项目的数据库。

指定源数据库详细信息后,将导入设置保留为默认值,然后单击“开始”按钮。

这将根据数据库中的对象数量花费一些时间,然后完成将数据库的架构导入项目。

您可以通过展开解决方案资源管理器中的项目来验证是否已导入所有对象。

太棒了!让我们在数据库项目中再添加一个表并发布它,以验证一切是否正常。

继续在数据库项目中创建另一个表。

按照“发布数据库”中提到的步骤发布数据库,然后刷新 SQL Server 对象资源管理器。

瞧!您的更改现在已反映出来。

我们可以通过转到解决方案->源代码控制->查看历史记录来查看谁在何时更改了什么。

这将显示完整的 Git 日志。

到目前为止,我们的源代码控制与 Visual Studio、Microsoft SQL Server 和 Github 完美运行。

关注点

我们还可以在发布数据库项目时添加预部署脚本和后部署脚本。顾名思义,它们将在创建数据库之前和之后执行。

预部署脚本的典型用例是为任何需要权限的存储过程部分设置数据库权限。类似地,后部署脚本可用于在创建数据库后填充表中的种子数据。

这可以通过右键单击项目->添加->脚本->预部署脚本/后部署脚本来简单完成。

通常,为每个表进行预/后部署执行使用多个文件是个好主意。

下一篇使用 Github 和 TeamCity 进行 SQL Server 持续集成

历史

  • 2019 年 10 月 20 日:本文初稿
© . All rights reserved.