在 GitHub Actions 和 Azure DevOps 中构建和部署数据库项目

已完成

由于数据库是大型解决方案的组成部分,开发人员必须找到有效的方法来管理数据库开发,就像他们处理应用程序代码一样。 此任务特别具有挑战性,因为数据库开发与存储在数据库中的数据密切相关,增加了复杂性。

幸运的是,GitHub ActionsAzure DevOps Services 等工具为管理这些复杂性提供了强大的解决方案。 两个平台均支持 DACPAC 部署,通过将数据库更改打包到数据层应用程序组件 (DAC) 包中,简化部署过程。 这种方法不仅确保了数据库部署的一致性和可靠性,还与持续集成和持续部署 (CI/CD) 管道无缝集成,使开发人员更容易在维护应用程序代码的同时维护和更新数据库。

本单元中的示例假定你已具备以下条件:

使用 GitHub Actions 连接到 Azure SQL 数据库

你可以使用 GitHub Actions 连接到 Azure SQL 数据库,并通过 DACPAC 文件发布 SQL 项目。

使用 GitHub Actions 连接到 Azure SQL 数据库主要有三个步骤。

  1. 在 Visual Studio Code 中克隆 GitHub 存储库
  2. 在 Visual Studio Code 中创建数据库项目
  3. 通过 GitHub Actions 设置持续集成 (CI)

克隆 GitHub 存储库

你可以按照以下步骤克隆创建的 GitHub 存储库。

  1. 在 Visual Studio Code 中,选择视图>命令面板
  2. 在命令面板中,输入“Git: Clone”,然后选择它。
  3. 输入存储库的 URL 并选择“克隆”
  4. 选择或创建用于存储存储库文件的文件夹。

在 Visual Studio Code 中创建数据库项目

在 Visual Studio Code 中,新建一个数据库项目,并将项目保存在克隆 GitHub 存储库的同一文件夹中。

有关在 Visual Studio Code 中创建数据库项目的详细信息,请参阅 使用 Visual Studio Code 进行 SQL Server 开发

创建数据库项目后,添加代码以修改 Azure SQL 数据库。 然后将它们提交回 GitHub 存储库,确保它们被跟踪并集成到版本控制系统中。

通过 GitHub Actions 设置持续集成

要通过 GitHub Actions 设置持续集成 (CI),请在存储库的 /.github/workflows/ 路径中创建一个 .yml 文件。 .yml 文件包含两个部分。

  1. 设置身份验证
  2. 创建 GitHub 工作流

“设置身份验证”部分配置 GitHub 密钥,第二部分创建 GitHub Actions 工作流。

身份验证

首先,需要通过 Azure CLI 中的 az ad sp create-for-rbac 命令创建服务主体。 使用 Azure 门户中的 Azure Cloud Shell 运行以下 Azure CLI 代码。 将占位符替换为你的订阅 ID、资源组名称和应用名称。

az ad sp create-for-rbac --name "myML" --role contributor --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> --json-auth

输出是一个包含角色分配凭据的 JSON 对象。 将该文件保存为 GitHub 密钥。

其次,创建 SQL 连接字符串。 你可以从 Azure 门户复制该字符串。 在 Azure SQL 数据库中,打开设置>连接字符串

显示 Azure SQL 数据库连接设置的屏幕截图。

复制 ADO.NET 连接字符串,然后替换“你的数据库”和“你的密码”的占位符值。 连接字符串如下所示:

Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog={your-database};Persist Security Info=False;User ID={admin-name};Password={your-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

该连接字符串也将存储为 GitHub 密钥。

在 GitHub 存储库中,在设置>安全 ->密钥和变量>操作。 创建名为 AZURE_CREDENTIALS 的新密钥以存储 JSON 文本,创建名为 AZURE_SQL_CONNECTION_STRING 的密钥以存储连接字符串。

现在可以创建工作流了。

注意

在生产环境中,考虑使用托管标识让 GitHub Action 访问数据库,而不是使用 SQL 身份验证。 有关详细信息,请参阅 Microsoft Entra 中用于 Azure SQL 的托管标识

创建 GitHub 工作流

在 GitHub 存储库中,选择“操作”和“自行设置工作流”。 将打开一个空的 main.yml 文件。

现在可以构建 YAML 文件了。 有关详细语法和指南,请参阅 GitHub Actions 工作流。 例如,name: 标记指定工作流的名称,而触发条件 on 值确定触发工作流运行的事件。

提示

GitHub Actions 快速入门将帮助你了解 GitHub Actions 的其他功能。

通过 Azure DevOps Services 部署 Azure SQL 数据库

你也可以通过 Azure DevOps Services 向 Azure SQL 数据库部署更新。 开始前,你需要一个 Azure DevOps Services 帐户、一个版本控制系统(如 Azure Repos 或 GitHub)以及已安装 SQL 数据库扩展的 Visual Studio Code。

Azure DevOps Services 包含 Azure Pipelines,可自动构建、测试和部署代码。 通过 Azure Pipelines,你可以在项目中支持 Azure SQL 数据库修改的持续集成和持续部署 (CI/CD)。 这种集成确保数据库更改得到一致且可靠的应用。

Azure Pipelines 与各种版本控制系统无缝集成,包括 GitHub 和 Azure Repos。 Azure Pipelines 允许你将 SQL 脚本作为管道的一部分运行,使用 Azure PowerShell 脚本在 Azure 中创建和删除防火墙规则,确保安全高效的数据库管理。

有关 Azure SQL 数据库部署选项的更多信息,请参阅 Azure DevOps Services 文档中的 Azure SQL 数据库部署